TDD (Test Driven Developement) et refactoring

  • View
    463

  • Download
    1

Embed Size (px)

DESCRIPTION

Présentation à la nAcademy (Janvier 2012) : Retour d'expérience sur le TDD (Test Driven Developement) et refactoring par Walid Skouri

Text of TDD (Test Driven Developement) et refactoring

  • 1.TDD et Refactoring Walid Skouri

2. Plan Introduction LeXtreme Programming Les bases du TDD Les tests unitaires Le refactoring 3. Introduction 4. Introduction Introduction LeXtreme Programming Les bases du TDD Le refactoring 5. Introduction Les dmarches traditionnelles spcification > conception > ralisation > validation Concentre la plupart des dcision au dbut dun projet Les client ralisent que leurs besoins ont chang 6. IntroductionAccepter ce changment Cest une composante incontournable detout projet Approche XP 7. eXtreme Programming 8. XPLide Rduction significative de la dure du cyclede dveloppement: Rduction du temps entre : Limplmentation dune fonctionnalit Mise en production dune nouvelle version du logiciel 9. XPComment On ne fait de conception que pour les fonctionnalitsexistantes, pas pour les fonctionnalits futures: On ne fait de gnralisations dans la conception que lorsquedes besoins concrets se font sentir. On nintroduit pas doptimisations si elles ne sont pasdemandes par le client. Priorit : Travail actuel bien fait : Code test, simple, lisible et sansduplication 10. XPPrincipaux lments de fonctionnement de XP Cycles itratifs pilots par le client: Le projet progresse au rythme ditrationstrs courtes, dont le contenu fonctionnel est dtermin par le client. Travail dquipe auto-organis: Lquipe travaille rellement... en quipe. Lesdveloppeurs organisent eux-mmes leur travail, interviennent sur lensemble ducode, travaillent systmatiquement en binmes, et synchronisent leursdveloppements plusieurs fois par jour. Programmation pilote par les tests: les dveloppeurs crivent des testautomatiques pour chaque portion de code quils conoivent, et ils sappuient surces tests pour affiner et amliorer sans cesse la conception de lapplication sanscraindre de rgression. 11. XPLe cot des changementsTraditionnel Cot deschangement s XPTemps 12. XPLes valeurs de XP Communication: XP favorise le contact humain, la communication directe, plutt que le cloisonnementdes activits et les changes de courriers lectroniques ou de documents formels. Les dveloppeurstravaillent directement avec la matrise douvrage, les testeurs sont intgrs lquipe de dveloppement,etc. Feedback: quil sagisse ditrations courtes, de livraisons frquentes, de travail en binmes ou de testsautomatiques excuts en permanence, la plupart des pratiques XP sont conues pour donner unmaximum de feedback sur le droulement du projet afin de corriger la trajectoire au plus tt. En particulier,les points de dbut ditration offrent lquipe le moyen de prendre du recul sur son fonctionnement et delamliorer sans cesse au fil des itrations. Simplicit: XP relve le dfi suivant : que pouvons-nous arrter de faire tout en continuant crerefficacement un logiciel qui rponde aux besoins rels du client ? . Cette recherche de simplificationtouche le processus lui-mme, mais aussi loutil fabriqu (la mcanique de planification incite le client focaliser les efforts sur les fonctions prioritaires) ou encore la conception de lapplication (guide par unprincipe de You aint gonna need it ). 13. Les bases du TDD 14. Les bases du TDDTests au dbut du dveloppementEcriture des Ecriture dutests codeTestsCommencerFini chous 15. Les bases du TDDDveloppements pilots par les tests CodeTests propre chous Refactoring Tous les testsrussis 16. TDD 17. Les bases du TDD Recommandations Ne jamais crire de code sans avoir detests qui chouent Les tests doivent tre reprsentatifs desspcifications 18. Les test unitaires 19. Les tests unitaires Il permettent De contrler et conserver la qualit du produit toutau long du projet De se focaliser sur lamlioration du code, pluttque sur les bugs Damliorer la productivit de lquipe enautomatisant un maximum de tches redondanteset ennuyantes 20. Les tests unitairesTestabilit du code Privilgier la composition lhritage Isoler les dpendances Injecter les dpendances 21. Les tests unitairesTestabilit du code Privilgier la composition lhritage HritageComposition class Fruit { class Fruit { //... } //... } class Apple extends Fruit { class Apple { //... } private Fruit fruit = new Fruit(); //... } Lhritage permet la sous classe dheriter toutes les fonctionnalit La composition permet une solution plus flexible et rutilisable Exemple: Permet dinstancier le lobjet composite avec diffrentes implmentations 22. Les tests unitaires Testabilit du codeInjection de dpendance Se rapporte la fourniture dune dpendanceexterne un composant logiciel. Formes dinjection de dpendance interface injection setter injection constructor injection 23. Les tests unitairesTestabilit du codeInjection du constructeurpublic 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(); }}} } 24. Refactoring 25. Refactoring Cest quoi? Cest une technique de restructuration ducode existant: modifier sa structure sanschanger son comportement externe Ensemble de petites modifications dans lebut damliorer le code 26. Refactoring Cest quoi? Chaque transformation (ou Refactoring) nemodifie quune petite partie du code mais unensemble de transformations peut produire unchangement significatif Le systme se doit de toujours fonctionner suite chaque refactoring. Eviter les rgressions. 27. RefactoringPourquoi? Amliorer la structure du logiciel Rendre le code plus lisible et maintenable Faciliter les futurs changements Plus de flexibilit Augmenter la rutilisabilit Faciliter la recherche de bugs 28. Refactoring Quand? Code dupliqu Longues mthodes Longues liste de paramtres Nommage inappropri 29. Dmo