SlideShare une entreprise Scribd logo
TDD et Refactoring




                     Walid
                     Skouri
Plan
• Introduction
• L’eXtreme Programming
• Les bases du TDD
• Les tests unitaires
• Le refactoring
Introduction
Introduction
• Introduction
• L’eXtreme Programming
• Les bases du TDD
• Le refactoring
Introduction
• Les démarches traditionnelles



  – spécification > conception > réalisation > validation




         – Concentre la plupart des décision au début d’un projet

         – Les client réalisent que leurs besoins ont changé
Introduction
Accepter ce changment
• C’est une composante incontournable de
  tout projet

• Approche XP
eXtreme Programming
XP
L’idée

• Réduction significative de la durée du cycle
  de développement:
  – Réduction du temps entre :
     • L’implémentation d’une fonctionnalité
     • Mise en production d’une nouvelle version du logiciel
XP
Comment
• On ne fait de conception que pour les fonctionnalités
  existantes, pas pour les fonctionnalités futures:
  – On ne fait de généralisations dans la conception que lorsque
    des besoins concrets se font sentir.
  – On n'introduit pas d'optimisations si elles ne sont pas
    demandées par le client.
• Priorité :
  – Travail actuel bien fait : Code testé, simple, lisible et sans
    duplication
XP
Principaux éléments de fonctionnement de XP

• Cycles itératifs pilotés par le client : Le projet progresse au rythme d'itérations
  très courtes, dont le contenu fonctionnel est déterminé par le client.
• Travail d'équipe auto-organisé : L'équipe travaille réellement... en équipe. Les
  développeurs organisent eux-mêmes leur travail, interviennent sur l'ensemble du
  code, travaillent systématiquement en binômes, et synchronisent leurs
  développements plusieurs fois par jour.
• Programmation pilotée par les tests : les développeurs écrivent des test
  automatiques pour chaque portion de code qu'ils conçoivent, et ils s'appuient sur
  ces tests pour affiner et améliorer sans cesse la conception de l'application sans
  craindre de régression.
XP
    Le coût des changements

                              Traditionnel




 Coût des
changement
     s




                                             XP




                                                  Temps
XP
Les valeurs de XP
• Communication : XP favorise le contact humain, la communication directe, plutôt que le cloisonnement
  des activités et les échanges de courriers électroniques ou de documents formels. Les développeurs
  travaillent directement avec la maîtrise d'ouvrage, les testeurs sont intégrés à l'équipe de développement,
  etc.


• Feedback : qu'il s'agisse d'itérations courtes, de livraisons fréquentes, de travail en binômes ou de tests
  automatiques exécutés en permanence, la plupart des pratiques XP sont conçues pour donner un
  maximum de feedback sur le déroulement du projet afin de corriger la trajectoire au plus tôt. En particulier,
  les points de début d'itération offrent à l'équipe le moyen de prendre du recul sur son fonctionnement et de
  l'améliorer sans cesse au fil des itérations.


• Simplicité : XP relève le défi suivant : « que pouvons-nous arrêter de faire tout en continuant à créer
  efficacement un logiciel qui réponde aux besoins réels du client ? ». Cette recherche de simplification
  touche le processus lui-même, mais aussi l'outil fabriqué (la mécanique de planification incite le client à
  focaliser les efforts sur les fonctions prioritaires) ou encore la conception de l'application (guidée par un
  principe de « You ain't gonna need it »).
Les bases du TDD
Les bases du TDD
Tests au début du développement


              Ecriture des             Ecriture du
                  tests                   code
                              Tests
  Commencer                                          Fini
                             échoués
Les bases du TDD
Développements pilotés par les tests


       Code                      Tests
       propre                   échoués




       Refactoring

                     Tous les
                       tests
                      réussis
TDD
Les bases du TDD
 Recommandations




• Ne jamais écrire de code sans avoir de
  tests qui échouent
• Les tests doivent être représentatifs des
  spécifications
Les test unitaires
Les tests unitaires
• Il permettent


  – De contrôler et conserver la qualité du produit tout
    au long du projet
  – De se focaliser sur l’amélioration du code, plutôt
    que sur les bugs
  – D’améliorer la productivité de l’équipe en
    automatisant un maximum de tâches redondantes
    et ennuyantes
Les tests unitaires
Testabilité du code



• Privilégier la composition à l’héritage
• Isoler les dépendances
• Injecter les dépendances
Les tests unitaires
  Testabilité du code
• Privilégier la composition à l’héritage

                                   Héritage                                            Composition
                 class Fruit {                                           class Fruit {
                 //... }                                                 //... }
                 class Apple extends Fruit {                             class Apple {
                 //... }                                                 private Fruit fruit = new Fruit(); //... }




  – L’héritage permet à la sous classe d’heriter toutes les fonctionnalité
  – La composition permet une solution plus flexible et réutilisable
  – Exemple: Permet d’instancier le l’objet composite avec différentes implémentations
Les tests unitaires
 Testabilité du code



Injection de dépendance
• Se rapporte à la fourniture d'une dépendance
  externe à un composant logiciel.
• Formes d’injection de dépendance
   – interface injection
   – setter injection
   – constructor injection
Les tests unitaires
  Testabilité du code

Injection du constructeur
public class ImportantClass {             public class ImportantClass {
        IFoo foo;                                 IFoo foo;
        public ImportantClass()           public ImportantClass(IFoo foo) {
        {                                         this.foo = foo;
              this.foo = new              }
        EnterpriseFoo();
                                                  void doReallyImportantStuff() {
        }
                                                  this.foo.bar();
        void doReallyImportantStuff() {
        this.foo.bar();                           }
        }                                  }
 }
Refactoring
Refactoring
 C’est quoi?



• C’est une technique de restructuration du
  code existant: modifier sa structure sans
  changer son comportement externe


• Ensemble de petites modifications dans le
  but d’améliorer le code
Refactoring
 C’est quoi?


• Chaque transformation (ou Refactoring) ne
  modifie qu’une petite partie du code mais un
  ensemble de transformations peut produire un
  changement significatif


• Le système se doit de toujours fonctionner suite
  à chaque refactoring. Eviter les régressions.
Refactoring
  Pourquoi?


• Améliorer la structure du logiciel


• Rendre le code plus lisible et maintenable


• Faciliter les futurs changements


• Plus de flexibilité


• Augmenter la réutilisabilité


• Faciliter la recherche de bugs
Refactoring
 Quand?


• Code dupliqué


• Longues méthodes


• Longues liste de paramètres


• Nommage inapproprié
Démo

Contenu connexe

PPTX
PDF
Tp2 - WS avec JAXRS
PDF
Sécurité des Applications Web avec Json Web Token (JWT)
PDF
Formation Gratuite Total Tests par les experts Java Ippon
PDF
Support programmation orientée objet c# .net version f8
PDF
Spring Boot & Containers - Do's & Don'ts
PDF
Intégration continue et déploiement continue avec Jenkins
Tp2 - WS avec JAXRS
Sécurité des Applications Web avec Json Web Token (JWT)
Formation Gratuite Total Tests par les experts Java Ippon
Support programmation orientée objet c# .net version f8
Spring Boot & Containers - Do's & Don'ts
Intégration continue et déploiement continue avec Jenkins

Tendances (20)

PDF
Un exemple élémentaire d'application MVC en PHP
PDF
Concevoir, développer et sécuriser des micro-services avec Spring Boot
PDF
Introdução, instalação e configuração do SonarQube
PPTX
Spring ioc
PPTX
Introduction à React JS
PDF
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
PPTX
Introduction à spring boot
PPTX
Servlets et JSP
PDF
Présentation de Django @ Orange Labs (FR)
PDF
Gradle - the Enterprise Automation Tool
PDF
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
PDF
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
PDF
Support POO Java première partie
PDF
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
PDF
Tp3 - Application SOA avec BPEL
PDF
Tp1 - WS avec JAXWS
PDF
Android-Tp3: fragments et menus
PDF
Rapport exposé eXtreme Programming XP
PDF
Support distributed computing and caching avec hazelcast
PDF
Cours Génie Logiciel 2016
Un exemple élémentaire d'application MVC en PHP
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Introdução, instalação e configuração do SonarQube
Spring ioc
Introduction à React JS
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Introduction à spring boot
Servlets et JSP
Présentation de Django @ Orange Labs (FR)
Gradle - the Enterprise Automation Tool
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
Support POO Java première partie
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Tp3 - Application SOA avec BPEL
Tp1 - WS avec JAXWS
Android-Tp3: fragments et menus
Rapport exposé eXtreme Programming XP
Support distributed computing and caching avec hazelcast
Cours Génie Logiciel 2016
Publicité

Similaire à TDD (Test Driven Developement) et refactoring (20)

ODP
Formation Extreme Programming, Tests unitaires, travail collaboratif
PPTX
Automatisation des tests - objectifs et concepts - partie 2
PDF
Pratiques de développement pour équipes Agile
PPTX
Human Talks Grenoble - 11/12/2012 - TDD
PPTX
Les cinq bonnes pratiques des Tests Unitaires dans un projet Agile
PDF
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
PDF
Processus d’intégration continue et outils
PPTX
4-Cours de Géniel Logiciel
PPTX
Université du soir - TDD
KEY
Flex Unit Testing
PPTX
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
PPTX
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
PDF
Test driven development v0.2 20121221
PDF
L'integration continue pour tous
PDF
Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...
PDF
Altran soirée du test logiciel - assez des c 05-10-17
PDF
Test unitaires
PPTX
WC Bretagne 2024 - Tester son extension avec les outils WordPress
PDF
Valider par des tests - Blend
PDF
Delphi et les tests unitaires
Formation Extreme Programming, Tests unitaires, travail collaboratif
Automatisation des tests - objectifs et concepts - partie 2
Pratiques de développement pour équipes Agile
Human Talks Grenoble - 11/12/2012 - TDD
Les cinq bonnes pratiques des Tests Unitaires dans un projet Agile
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Processus d’intégration continue et outils
4-Cours de Géniel Logiciel
Université du soir - TDD
Flex Unit Testing
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
Test driven development v0.2 20121221
L'integration continue pour tous
Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...
Altran soirée du test logiciel - assez des c 05-10-17
Test unitaires
WC Bretagne 2024 - Tester son extension avec les outils WordPress
Valider par des tests - Blend
Delphi et les tests unitaires
Publicité

Plus de neuros (20)

PDF
Solution pour un Réseau Social d'Entreprise (RSE)
PDF
Le service workers
PDF
Proteger votre vie privee sur internet
PDF
Le pouvoir d'être Visible ou Invisible sur Internet
PDF
Vos projets web sur les plateformes ouvertes
PDF
Livre Drupal avance, un CMS pour développeurs
PDF
Http2 les impacts dans le web
PDF
Php 7 Think php7
PDF
RGAA 3 dans un Web Accessible
PDF
Les effets de la loi Hamon
PDF
La sécurité et php
PPTX
Les protocoles temps réels
PDF
Vectoriel et 3d en html5 - Animation newschool (partie 2)
PDF
Améliorer les performances SQL
PDF
Newschool partie1 methode HTML5
PDF
Integrons en mode continu
PDF
Effectuer des tests modernes pour drupal
PDF
Integration Drupal systemes d'informations
PDF
La maitrise des contenus hors internet
PDF
La mémoire et PHP
Solution pour un Réseau Social d'Entreprise (RSE)
Le service workers
Proteger votre vie privee sur internet
Le pouvoir d'être Visible ou Invisible sur Internet
Vos projets web sur les plateformes ouvertes
Livre Drupal avance, un CMS pour développeurs
Http2 les impacts dans le web
Php 7 Think php7
RGAA 3 dans un Web Accessible
Les effets de la loi Hamon
La sécurité et php
Les protocoles temps réels
Vectoriel et 3d en html5 - Animation newschool (partie 2)
Améliorer les performances SQL
Newschool partie1 methode HTML5
Integrons en mode continu
Effectuer des tests modernes pour drupal
Integration Drupal systemes d'informations
La maitrise des contenus hors internet
La mémoire et PHP

TDD (Test Driven Developement) et refactoring

  • 1. TDD et Refactoring Walid Skouri
  • 2. Plan • Introduction • L’eXtreme Programming • Les bases du TDD • Les tests unitaires • Le refactoring
  • 4. Introduction • Introduction • L’eXtreme Programming • Les bases du TDD • Le refactoring
  • 5. Introduction • Les démarches traditionnelles – spécification > conception > réalisation > validation – Concentre la plupart des décision au début d’un projet – Les client réalisent que leurs besoins ont changé
  • 6. Introduction Accepter ce changment • C’est une composante incontournable de tout projet • Approche XP
  • 8. XP L’idée • Réduction significative de la durée du cycle de développement: – Réduction du temps entre : • L’implémentation d’une fonctionnalité • Mise en production d’une nouvelle version du logiciel
  • 9. XP Comment • On ne fait de conception que pour les fonctionnalités existantes, pas pour les fonctionnalités futures: – On ne fait de généralisations dans la conception que lorsque des besoins concrets se font sentir. – On n'introduit pas d'optimisations si elles ne sont pas demandées par le client. • Priorité : – Travail actuel bien fait : Code testé, simple, lisible et sans duplication
  • 10. XP Principaux éléments de fonctionnement de XP • Cycles itératifs pilotés par le client : Le projet progresse au rythme d'itérations très courtes, dont le contenu fonctionnel est déterminé par le client. • Travail d'équipe auto-organisé : L'équipe travaille réellement... en équipe. Les développeurs organisent eux-mêmes leur travail, interviennent sur l'ensemble du code, travaillent systématiquement en binômes, et synchronisent leurs développements plusieurs fois par jour. • Programmation pilotée par les tests : les développeurs écrivent des test automatiques pour chaque portion de code qu'ils conçoivent, et ils s'appuient sur ces tests pour affiner et améliorer sans cesse la conception de l'application sans craindre de régression.
  • 11. XP Le coût des changements Traditionnel Coût des changement s XP Temps
  • 12. XP Les valeurs de XP • Communication : XP favorise le contact humain, la communication directe, plutôt que le cloisonnement des activités et les échanges de courriers électroniques ou de documents formels. Les développeurs travaillent directement avec la maîtrise d'ouvrage, les testeurs sont intégrés à l'équipe de développement, etc. • Feedback : qu'il s'agisse d'itérations courtes, de livraisons fréquentes, de travail en binômes ou de tests automatiques exécutés en permanence, la plupart des pratiques XP sont conçues pour donner un maximum de feedback sur le déroulement du projet afin de corriger la trajectoire au plus tôt. En particulier, les points de début d'itération offrent à l'équipe le moyen de prendre du recul sur son fonctionnement et de l'améliorer sans cesse au fil des itérations. • Simplicité : XP relève le défi suivant : « que pouvons-nous arrêter de faire tout en continuant à créer efficacement un logiciel qui réponde aux besoins réels du client ? ». Cette recherche de simplification touche le processus lui-même, mais aussi l'outil fabriqué (la mécanique de planification incite le client à focaliser les efforts sur les fonctions prioritaires) ou encore la conception de l'application (guidée par un principe de « You ain't gonna need it »).
  • 14. Les bases du TDD Tests au début du développement Ecriture des Ecriture du tests code Tests Commencer Fini échoués
  • 15. Les bases du TDD Développements pilotés par les tests Code Tests propre échoués Refactoring Tous les tests réussis
  • 16. TDD
  • 17. Les bases du TDD Recommandations • Ne jamais écrire de code sans avoir de tests qui échouent • Les tests doivent être représentatifs des spécifications
  • 19. Les tests unitaires • Il permettent – De contrôler et conserver la qualité du produit tout au long du projet – De se focaliser sur l’amélioration du code, plutôt que sur les bugs – D’améliorer la productivité de l’équipe en automatisant un maximum de tâches redondantes et ennuyantes
  • 20. Les tests unitaires Testabilité du code • Privilégier la composition à l’héritage • Isoler les dépendances • Injecter les dépendances
  • 21. Les tests unitaires Testabilité du code • Privilégier la composition à l’héritage Héritage Composition class Fruit { class Fruit { //... } //... } class Apple extends Fruit { class Apple { //... } private Fruit fruit = new Fruit(); //... } – L’héritage permet à la sous classe d’heriter toutes les fonctionnalité – La composition permet une solution plus flexible et réutilisable – Exemple: Permet d’instancier le l’objet composite avec différentes implémentations
  • 22. Les tests unitaires Testabilité du code Injection de dépendance • Se rapporte à la fourniture d'une dépendance externe à un composant logiciel. • Formes d’injection de dépendance – interface injection – setter injection – constructor injection
  • 23. Les tests unitaires Testabilité du code Injection du constructeur public class ImportantClass { public class ImportantClass { IFoo foo; IFoo foo; public ImportantClass() public ImportantClass(IFoo foo) { { this.foo = foo; this.foo = new } EnterpriseFoo(); void doReallyImportantStuff() { } this.foo.bar(); void doReallyImportantStuff() { this.foo.bar(); } } } }
  • 25. Refactoring C’est quoi? • C’est une technique de restructuration du code existant: modifier sa structure sans changer son comportement externe • Ensemble de petites modifications dans le but d’améliorer le code
  • 26. Refactoring C’est quoi? • Chaque transformation (ou Refactoring) ne modifie qu’une petite partie du code mais un ensemble de transformations peut produire un changement significatif • Le système se doit de toujours fonctionner suite à chaque refactoring. Eviter les régressions.
  • 27. Refactoring Pourquoi? • Améliorer la structure du logiciel • Rendre le code plus lisible et maintenable • Faciliter les futurs changements • Plus de flexibilité • Augmenter la réutilisabilité • Faciliter la recherche de bugs
  • 28. Refactoring Quand? • Code dupliqué • Longues méthodes • Longues liste de paramètres • Nommage inapproprié
  • 29. Démo