TDD en action : refactoring
Repérage●   TDD en action    –   Découverte    –   Refactoring                Nous allons aborder ceci    –   Itératif inc...
Refactoring●   Définition●   Théorie●   Exemples●   Exercice●   Auto-évaluation
Refactoring●   En français vous pourrez trouver le terme    « remaniement »●   Définition dans notre contexte logicielModi...
...donc :●   Le code change●   La couverture fonctionnelle ne change pas●   Les tests passent toujours
Gains attendus●   + simple●   + évolutif●   + performant●   …●   La « qualité » du code augmente
Quest quun code de qualité ?●   +simple, +évolutif, +performant ?●   Les programmeurs et les clients ont-ils la même    ré...
1.TEST        2.CODE                        3.REFACTOR●   Le refactoring a lieu lorsque les tests passent●   Le refactorin...
1.TEST        2.CODE                        3.REFACTOR●   Le refactoring consiste à améliorer le code●   Une façon pour am...
3.REFACTOR●   Quest ce que du code « dangereux »?    –   Duplication    –   Couplage    –   Valeurs magiques    –   Commen...
3.REFACTOR●   Connaissez les « code smells » qui vous aident●   Essayez plusieurs smells pour trouver ceux qui    vous aid...
3.REFACTORUn « code smell » est une opportunité, pas une    règle ni une obligation de refactoring.
3.REFACTOR●   Comment supprimer du code « dangereux »?    –   Introduire des « Design patterns »        ●   Création      ...
3.REFACTOR●   Comment supprimer du code « dangereux »?
3.REFACTOR●   Une possibilité : piloter vos refactoring par de    nouveaux tests●   Une possibilité : programmer par inten...
2 exemples●   Supprimer un smell « God class »●   Supprimer un smell « Comments » dans un test
God class
Un possible refactoring
Notez que●   Ce code est très différent du premier    –   Plusieurs collaborateurs ont apparu    –   Les collaborateurs so...
Notez aussi que●   Plusieurs chemins sont possibles●   Vous avez probablement besoin dune vision    –   Un modèle cible   ...
Modèle cible●   Une cible de type    architecture    hexagonale●   ...et des coeurs de la    part de mes enfants    pour m...
Plusieurs chemins possibles       OrdersView                                                         ErrorView            ...
Plusieurs chemins possibles       OrdersView                                                          ErrorView           ...
Plusieurs chemins possibles       OrdersView                                                          ErrorView           ...
Plusieurs chemins possibles       OrdersView                                                            ErrorView         ...
Souvenez-vous●   Commencez lorsque vos tests passent●   Ecoutez vos tests●   Ne restez pas trop longtemps sans feedback de...
Un autre exemple●   Supprimer les commentaires    –   Les commentaires sont souvent désynchronisés du        code    –   R...
Supprimer un commentaire
Attention●   « supprimer un commentaire » veut dire    –   Prendre lopportunité daméliorer le code    –   Supprimer le bru...
Un possible refactoring
A vous :)
Supprimer un « switch »●   Choisissez un code avec du conditionnel●   « Jouez » à le supprimer●   Ce type de code:
Approche par de nouveaux tests●   Choisissez une cible●   Décrivez dans un test une étape qui vous    permet dexplorer cet...
Approche par intention●   Modifiez le code comme vous voudriez quil soit    –   Faites le compiler    –   Laisser votre su...
Combinez les deux approches●   Modifiez le code comme vous voudriez quil soit    –   Faites le compiler    –   Laisser vot...
Auto-évaluation                               Tests                       X/V?Jai écrit plusieurs testsChaque nouveau test...
Merci●   Maiderez vous à améliorer ce matériel ?    –   Quavez-vous aimé ?    –   Quelles améliorations feriez-vous ?     ...
Prochain SlideShare
Chargement dans…5
×

Tdd en action - refactoring

1 011 vues

Publié le

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 011
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1
Actions
Partages
0
Téléchargements
18
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Tdd en action - refactoring

  1. 1. TDD en action : refactoring
  2. 2. Repérage● TDD en action – Découverte – Refactoring Nous allons aborder ceci – Itératif incrémental – Bases de données – Développement Web – Déploiement continu
  3. 3. Refactoring● Définition● Théorie● Exemples● Exercice● Auto-évaluation
  4. 4. Refactoring● En français vous pourrez trouver le terme « remaniement »● Définition dans notre contexte logicielModifier la structure interne dune partie de codesans modifier son comportement observable
  5. 5. ...donc :● Le code change● La couverture fonctionnelle ne change pas● Les tests passent toujours
  6. 6. Gains attendus● + simple● + évolutif● + performant● …● La « qualité » du code augmente
  7. 7. Quest quun code de qualité ?● +simple, +évolutif, +performant ?● Les programmeurs et les clients ont-ils la même réponse ?● Proposition:Un code de qualité est un code pour lequel le coût dajout dune nouvelle fonctionnalité reste stable avec le temps
  8. 8. 1.TEST 2.CODE 3.REFACTOR● Le refactoring a lieu lorsque les tests passent● Le refactoring najoute pas de fonctionnalité● Le refactoring concerne le code de production et le code de test
  9. 9. 1.TEST 2.CODE 3.REFACTOR● Le refactoring consiste à améliorer le code● Une façon pour améliorer le code consiste à supprimer le code dangereux● Vous entendrez parler de « dette technique » Le refactoring consiste à diminuer la dette technique
  10. 10. 3.REFACTOR● Quest ce que du code « dangereux »? – Duplication – Couplage – Valeurs magiques – Commentaires (avez-vous envie de réagir à celui-ci ?) – Conditionnel – Longues classes ou méthodes – Code obscur – ...cherchez « code smells » sur Google
  11. 11. 3.REFACTOR● Connaissez les « code smells » qui vous aident● Essayez plusieurs smells pour trouver ceux qui vous aident● Commencez par étudier les plus faciles – Bad name – Switch statement – Primitive obsession● Lorsque vous navez pas dintuition damélioration, cherchez les smells qui vous ont déjà aidé
  12. 12. 3.REFACTORUn « code smell » est une opportunité, pas une règle ni une obligation de refactoring.
  13. 13. 3.REFACTOR● Comment supprimer du code « dangereux »? – Introduire des « Design patterns » ● Création ● Structures ● Comportements – Respecter les principes SOLID ● Single responsability ● Open/Closed ● Liskov substitution ● Interface segregation ● Dependency inversion
  14. 14. 3.REFACTOR● Comment supprimer du code « dangereux »?
  15. 15. 3.REFACTOR● Une possibilité : piloter vos refactoring par de nouveaux tests● Une possibilité : programmer par intention et laisser les tests existant réagir● Une possibilité : faire les deux
  16. 16. 2 exemples● Supprimer un smell « God class »● Supprimer un smell « Comments » dans un test
  17. 17. God class
  18. 18. Un possible refactoring
  19. 19. Notez que● Ce code est très différent du premier – Plusieurs collaborateurs ont apparu – Les collaborateurs sont des interfaces dans cet exemple en Java – Les responsabilités des collaborateurs sont orthogonales – Des injecteurs sont disponibles ● Les tests utilisent ces injecteurs pour paramétrer cette classe et faire des vérifications de collaboration
  20. 20. Notez aussi que● Plusieurs chemins sont possibles● Vous avez probablement besoin dune vision – Un modèle cible – Une architecture cible – Au moins une intention cible
  21. 21. Modèle cible● Une cible de type architecture hexagonale● ...et des coeurs de la part de mes enfants pour me donner du courage ;)
  22. 22. Plusieurs chemins possibles OrdersView ErrorView BlankPage ErrorLog Center Repository Order SqlRepositoryDisplayOrdersCommand
  23. 23. Plusieurs chemins possibles OrdersView ErrorView BlankPage ErrorLog Center Repository 1 Order SqlRepositoryDisplayOrdersCommand
  24. 24. Plusieurs chemins possibles OrdersView ErrorView BlankPage ErrorLog 2 Center Repository 1 Order SqlRepositoryDisplayOrdersCommand
  25. 25. Plusieurs chemins possibles OrdersView ErrorView BlankPage ErrorLog 3 2 Center Repository 1 Order SqlRepositoryDisplayOrdersCommand
  26. 26. Souvenez-vous● Commencez lorsque vos tests passent● Ecoutez vos tests● Ne restez pas trop longtemps sans feedback de la part de votre suite de tests – En programmant par intention votre suite de tests passera du rouge au vert plusieurs fois – En ajoutant de nouveaux tests aussi ;)
  27. 27. Un autre exemple● Supprimer les commentaires – Les commentaires sont souvent désynchronisés du code – Remplacer les commentaires par des tests
  28. 28. Supprimer un commentaire
  29. 29. Attention● « supprimer un commentaire » veut dire – Prendre lopportunité daméliorer le code – Supprimer le bruit – Augmenter la confiance● « supprimer un commentaire » ne veut pas dire – Perdre la documentation – Perdre quelque chose, quoi que ce soit
  30. 30. Un possible refactoring
  31. 31. A vous :)
  32. 32. Supprimer un « switch »● Choisissez un code avec du conditionnel● « Jouez » à le supprimer● Ce type de code:
  33. 33. Approche par de nouveaux tests● Choisissez une cible● Décrivez dans un test une étape qui vous permet dexplorer cette cible● Exemple: cible === reflection
  34. 34. Approche par intention● Modifiez le code comme vous voudriez quil soit – Faites le compiler – Laisser votre suite de tests passer au rouge – Revenez ensuite au vert● Exemple:
  35. 35. Combinez les deux approches● Modifiez le code comme vous voudriez quil soit – Faites le compiler – Laisser votre suite de tests passer au rouge● Identifiez une cible – Décrivez dans un test une étape vers cette cible – Faires passer un à un les tests qui vous amène à la cibleVotre suite de tests contient plusieurs tests rouges avant de retrouver le vert complet
  36. 36. Auto-évaluation Tests X/V?Jai écrit plusieurs testsChaque nouveau test commence par ne pas passerChaque test a une seule intentionChaque test a un nom qui illustre lintention du testMes tests illustrent un développement incrémentaleUn autre que moi comprend lintention de mes testsJe sais nommer les smells que je supprime en refactoringMon backlog de refactoring a réduitJe sais nommer les Design Patterns que jai implémentéJe sais nommer le principe SOLID que jai suivi
  37. 37. Merci● Maiderez vous à améliorer ce matériel ? – Quavez-vous aimé ? – Quelles améliorations feriez-vous ? eric.mignot@gmail.com

×