SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
TDD en action : refactoring
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
Refactoring
●   Définition
●   Théorie
●   Exemples
●   Exercice
●   Auto-évaluation
Refactoring
●   En français vous pourrez trouver le terme
    « remaniement »
●   Définition dans notre contexte logiciel
Modifier la structure interne d'une partie de code
sans modifier son comportement observable
...donc :
●   Le code change
●   La couverture fonctionnelle ne change pas
●   Les tests passent toujours
Gains attendus
●   + simple
●   + évolutif
●   + performant
●   …
●   La « qualité » du code augmente
Qu'est qu'un 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
 d'ajout d'une nouvelle fonctionnalité reste stable
                  avec le temps
1.TEST        2.CODE




                        3.REFACTOR



●   Le refactoring a lieu lorsque les tests passent
●   Le refactoring n'ajoute pas de fonctionnalité
●   Le refactoring concerne le code de production
    et le code de test
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
3.REFACTOR



●   Qu'est 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
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 n'avez pas d'intuition
    d'amélioration, cherchez les smells qui vous ont
    déjà aidé
3.REFACTOR




Un « 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
        ●   Structures
        ●   Comportements
    –   Respecter les principes SOLID
        ●   Single responsability
        ●   Open/Closed
        ●   Liskov substitution
        ●   Interface segregation
        ●   Dependency inversion
3.REFACTOR



●   Comment supprimer du code « dangereux »?
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
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 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
Notez aussi que
●   Plusieurs chemins sont possibles
●   Vous avez probablement besoin d'une vision
    –   Un modèle cible
    –   Une architecture cible
    –   Au moins une intention cible
Modèle cible
●   Une cible de type
    architecture
    hexagonale
●   ...et des coeurs de la
    part de mes enfants
    pour me donner du
    courage ;)
Plusieurs chemins possibles
       OrdersView
                                                         ErrorView

                       BlankPage           ErrorLog




                         Center

                                           Repository

                                   Order                SqlRepository

DisplayOrdersCommand
Plusieurs chemins possibles
       OrdersView
                                                          ErrorView

                        BlankPage           ErrorLog




                          Center

                                            Repository

                    1               Order                SqlRepository

DisplayOrdersCommand
Plusieurs chemins possibles
       OrdersView
                                                          ErrorView

                        BlankPage           ErrorLog




        2
                          Center

                                            Repository


                    1               Order                SqlRepository

DisplayOrdersCommand
Plusieurs chemins possibles
       OrdersView
                                                            ErrorView

                        BlankPage             ErrorLog

                         3

        2
                             Center

                                              Repository

                    1                 Order                SqlRepository

DisplayOrdersCommand
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 ;)
Un autre exemple
●   Supprimer les commentaires
    –   Les commentaires sont souvent désynchronisés du
        code
    –   Remplacer les commentaires par des tests
Supprimer un commentaire
Attention
●   « supprimer un commentaire » veut dire
    –   Prendre l'opportunité d'amé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
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 d'explorer cette cible
●   Exemple: cible === reflection
Approche par intention
●   Modifiez le code comme vous voudriez qu'il soit
    –   Faites le compiler
    –   Laisser votre suite de tests passer au rouge
    –   Revenez ensuite au vert
●   Exemple:
Combinez les deux approches
●   Modifiez le code comme vous voudriez qu'il 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
        cible

Votre suite de tests contient plusieurs tests rouges
        avant de retrouver le vert complet
Auto-évaluation

                               Tests                       X/V?
J'ai écrit plusieurs tests
Chaque nouveau test commence par ne pas passer
Chaque test a une seule intention
Chaque test a un nom qui illustre l'intention du test
Mes tests illustrent un développement incrémentale
Un autre que moi comprend l'intention de mes tests
Je sais nommer les smells que je supprime en refactoring
Mon backlog de refactoring a réduit
Je sais nommer les Design Patterns que j'ai implémenté
Je sais nommer le principe SOLID que j'ai suivi
Merci
●   M'aiderez vous à améliorer ce matériel ?
    –   Qu'avez-vous aimé ?
    –   Quelles améliorations feriez-vous ?




                  eric.mignot@gmail.com

Contenu connexe

Tendances

Anatomie du test
Anatomie du testAnatomie du test
Anatomie du test
Frederic Hardy
 
Cocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitaires
CocoaHeads France
 
Présentation Alt.net - Tests unitaires automatisés
Présentation Alt.net - Tests unitaires automatisésPrésentation Alt.net - Tests unitaires automatisés
Présentation Alt.net - Tests unitaires automatisés
Djamel Zouaoui
 
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaJava uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 java
Amel Morchdi
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
Cyrille Grandval
 
PyConFR - testons en python
PyConFR - testons en pythonPyConFR - testons en python
PyConFR - testons en python
gburet
 

Tendances (20)

Anatomie du test
Anatomie du testAnatomie du test
Anatomie du test
 
TDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoringTDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoring
 
Journées Perl 2008 "Kalité de Modules"
Journées Perl 2008 "Kalité de Modules"Journées Perl 2008 "Kalité de Modules"
Journées Perl 2008 "Kalité de Modules"
 
05 visual basic .net - variables, procedures, arguments et structures de cont...
05 visual basic .net - variables, procedures, arguments et structures de cont...05 visual basic .net - variables, procedures, arguments et structures de cont...
05 visual basic .net - variables, procedures, arguments et structures de cont...
 
La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine
La qualité logicielle et l'intégration continue - Cas concret du projet CytomineLa qualité logicielle et l'intégration continue - Cas concret du projet Cytomine
La qualité logicielle et l'intégration continue - Cas concret du projet Cytomine
 
Bbl sur les tests
Bbl sur les testsBbl sur les tests
Bbl sur les tests
 
[Agile Testing Day] Techniques avancées de tests
[Agile Testing Day] Techniques avancées de tests[Agile Testing Day] Techniques avancées de tests
[Agile Testing Day] Techniques avancées de tests
 
Rédaction de tests unitaires avec fakes
Rédaction de tests unitaires avec fakesRédaction de tests unitaires avec fakes
Rédaction de tests unitaires avec fakes
 
Outils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web moderneOutils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web moderne
 
Cocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitaires
 
Tester c'est douter - Linkvalue tech
Tester c'est douter - Linkvalue techTester c'est douter - Linkvalue tech
Tester c'est douter - Linkvalue tech
 
Présentation Alt.net - Tests unitaires automatisés
Présentation Alt.net - Tests unitaires automatisésPrésentation Alt.net - Tests unitaires automatisés
Présentation Alt.net - Tests unitaires automatisés
 
J Unit
J UnitJ Unit
J Unit
 
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaJava uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 java
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
 
Développement piloté par les tests - DDD
Développement piloté par les tests - DDDDéveloppement piloté par les tests - DDD
Développement piloté par les tests - DDD
 
PyConFR - testons en python
PyConFR - testons en pythonPyConFR - testons en python
PyConFR - testons en python
 
[Agile Testing Day] Behavior Driven Development (BDD)
[Agile Testing Day] Behavior Driven Development (BDD)[Agile Testing Day] Behavior Driven Development (BDD)
[Agile Testing Day] Behavior Driven Development (BDD)
 
Les aventuriers des tests exploratoires : à la poursuite du bug perdu V. Théa...
Les aventuriers des tests exploratoires : à la poursuite du bug perdu V. Théa...Les aventuriers des tests exploratoires : à la poursuite du bug perdu V. Théa...
Les aventuriers des tests exploratoires : à la poursuite du bug perdu V. Théa...
 
Test unitaire
Test unitaireTest unitaire
Test unitaire
 

En vedette

Exercices 2 test d'hypothése (prise de notes)
Exercices 2 test d'hypothése (prise de notes)Exercices 2 test d'hypothése (prise de notes)
Exercices 2 test d'hypothése (prise de notes)
Taha Can
 
Cierre de semestre UBB
Cierre de semestre UBBCierre de semestre UBB
Cierre de semestre UBB
movilizadosubb
 
New formation 100% pratique
New formation 100% pratiqueNew formation 100% pratique
New formation 100% pratique
SAGA Formation
 
Présentation Majord'Job
Présentation Majord'JobPrésentation Majord'Job
Présentation Majord'Job
demilly
 
Libraire ambulant
Libraire ambulantLibraire ambulant
Libraire ambulant
Eric Mignot
 
Animaux océanie
Animaux océanieAnimaux océanie
Animaux océanie
dindhonnete
 
Lejournaldesindignes2
Lejournaldesindignes2Lejournaldesindignes2
Lejournaldesindignes2
WKTL-Agency
 
法國的世界遺產 (La france au patrimoine mondial)
法國的世界遺產 (La france au patrimoine mondial)法國的世界遺產 (La france au patrimoine mondial)
法國的世界遺產 (La france au patrimoine mondial)
lys167
 

En vedette (20)

Exercices 2 test d'hypothése (prise de notes)
Exercices 2 test d'hypothése (prise de notes)Exercices 2 test d'hypothése (prise de notes)
Exercices 2 test d'hypothése (prise de notes)
 
Cierre de semestre UBB
Cierre de semestre UBBCierre de semestre UBB
Cierre de semestre UBB
 
New formation 100% pratique
New formation 100% pratiqueNew formation 100% pratique
New formation 100% pratique
 
Petit déjeuner conférence du 3 avril 2013 de la Chambre de commerce de Lévis
Petit déjeuner conférence du 3 avril 2013 de la Chambre de commerce de LévisPetit déjeuner conférence du 3 avril 2013 de la Chambre de commerce de Lévis
Petit déjeuner conférence du 3 avril 2013 de la Chambre de commerce de Lévis
 
Clase #3 de internet
Clase #3 de internetClase #3 de internet
Clase #3 de internet
 
Anem a l'MNAC
Anem a l'MNACAnem a l'MNAC
Anem a l'MNAC
 
Plan 3daparte-beer-corner.2
Plan 3daparte-beer-corner.2Plan 3daparte-beer-corner.2
Plan 3daparte-beer-corner.2
 
Introduction à Cassandra
Introduction à CassandraIntroduction à Cassandra
Introduction à Cassandra
 
Imparfait et passé composé
Imparfait et passé composéImparfait et passé composé
Imparfait et passé composé
 
Présentation Majord'Job
Présentation Majord'JobPrésentation Majord'Job
Présentation Majord'Job
 
Treballem pdf
Treballem pdfTreballem pdf
Treballem pdf
 
Acceptance Tests Workshop
Acceptance Tests WorkshopAcceptance Tests Workshop
Acceptance Tests Workshop
 
Libraire ambulant
Libraire ambulantLibraire ambulant
Libraire ambulant
 
Violences conjugales et familiales reperes juillet 2011
Violences conjugales et familiales reperes juillet 2011Violences conjugales et familiales reperes juillet 2011
Violences conjugales et familiales reperes juillet 2011
 
SEO : étude rapide d'un site
SEO : étude rapide d'un siteSEO : étude rapide d'un site
SEO : étude rapide d'un site
 
Animaux océanie
Animaux océanieAnimaux océanie
Animaux océanie
 
Lejournaldesindignes2
Lejournaldesindignes2Lejournaldesindignes2
Lejournaldesindignes2
 
法國的世界遺產 (La france au patrimoine mondial)
法國的世界遺產 (La france au patrimoine mondial)法國的世界遺產 (La france au patrimoine mondial)
法國的世界遺產 (La france au patrimoine mondial)
 
Sortir Montpellier - Magazine
Sortir Montpellier - MagazineSortir Montpellier - Magazine
Sortir Montpellier - Magazine
 
Presentation d'agence
Presentation d'agencePresentation d'agence
Presentation d'agence
 

Similaire à Tdd en action - refactoring

AgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratiqueAgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratique
Agile Toulouse
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyon
Clement Bouillier
 
Soirée Qualité Logicielle avec Sonar
Soirée Qualité Logicielle avec SonarSoirée Qualité Logicielle avec Sonar
Soirée Qualité Logicielle avec Sonar
ElsassJUG
 

Similaire à Tdd en action - refactoring (20)

Université du soir - TDD
Université du soir - TDDUniversité du soir - TDD
Université du soir - TDD
 
Clean code en pratique
Clean code en pratiqueClean code en pratique
Clean code en pratique
 
AgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratiqueAgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratique
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2
 
La relecture de code : avant tout des pratiques
La relecture de code : avant tout des pratiquesLa relecture de code : avant tout des pratiques
La relecture de code : avant tout des pratiques
 
Rails 3 au Djangocong
Rails 3 au DjangocongRails 3 au Djangocong
Rails 3 au Djangocong
 
Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyon
 
Soirée Qualité Logicielle avec Sonar
Soirée Qualité Logicielle avec SonarSoirée Qualité Logicielle avec Sonar
Soirée Qualité Logicielle avec Sonar
 
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
 
Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)
 
C'est quoi, du bon code ?
C'est quoi, du bon code ?C'est quoi, du bon code ?
C'est quoi, du bon code ?
 
Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
 
CocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - EpitezCocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - Epitez
 
La revue de code : facile !
La revue de code : facile !La revue de code : facile !
La revue de code : facile !
 
Revue de code - PHP Tour Nantes 2012
Revue de code - PHP Tour Nantes 2012Revue de code - PHP Tour Nantes 2012
Revue de code - PHP Tour Nantes 2012
 
Human Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDDHuman Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDD
 
Test driven development v0.2 20121221
Test driven development v0.2 20121221Test driven development v0.2 20121221
Test driven development v0.2 20121221
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Design patterns
Design patternsDesign patterns
Design patterns
 

Tdd en action - refactoring

  • 1. TDD en action : refactoring
  • 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. Refactoring ● Définition ● Théorie ● Exemples ● Exercice ● Auto-évaluation
  • 4. Refactoring ● En français vous pourrez trouver le terme « remaniement » ● Définition dans notre contexte logiciel Modifier la structure interne d'une partie de code sans modifier son comportement observable
  • 5. ...donc : ● Le code change ● La couverture fonctionnelle ne change pas ● Les tests passent toujours
  • 6. Gains attendus ● + simple ● + évolutif ● + performant ● … ● La « qualité » du code augmente
  • 7. Qu'est qu'un 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 d'ajout d'une nouvelle fonctionnalité reste stable avec le temps
  • 8. 1.TEST 2.CODE 3.REFACTOR ● Le refactoring a lieu lorsque les tests passent ● Le refactoring n'ajoute pas de fonctionnalité ● Le refactoring concerne le code de production et le code de test
  • 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. 3.REFACTOR ● Qu'est 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. 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 n'avez pas d'intuition d'amélioration, cherchez les smells qui vous ont déjà aidé
  • 12. 3.REFACTOR Un « code smell » est une opportunité, pas une règle ni une obligation de refactoring.
  • 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. 3.REFACTOR ● Comment supprimer du code « dangereux »?
  • 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. 2 exemples ● Supprimer un smell « God class » ● Supprimer un smell « Comments » dans un test
  • 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. Notez aussi que ● Plusieurs chemins sont possibles ● Vous avez probablement besoin d'une vision – Un modèle cible – Une architecture cible – Au moins une intention cible
  • 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. Plusieurs chemins possibles OrdersView ErrorView BlankPage ErrorLog Center Repository Order SqlRepository DisplayOrdersCommand
  • 23. Plusieurs chemins possibles OrdersView ErrorView BlankPage ErrorLog Center Repository 1 Order SqlRepository DisplayOrdersCommand
  • 24. Plusieurs chemins possibles OrdersView ErrorView BlankPage ErrorLog 2 Center Repository 1 Order SqlRepository DisplayOrdersCommand
  • 25. Plusieurs chemins possibles OrdersView ErrorView BlankPage ErrorLog 3 2 Center Repository 1 Order SqlRepository DisplayOrdersCommand
  • 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. Un autre exemple ● Supprimer les commentaires – Les commentaires sont souvent désynchronisés du code – Remplacer les commentaires par des tests
  • 29. Attention ● « supprimer un commentaire » veut dire – Prendre l'opportunité d'amé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
  • 32. Supprimer un « switch » ● Choisissez un code avec du conditionnel ● « Jouez » à le supprimer ● Ce type de code:
  • 33. Approche par de nouveaux tests ● Choisissez une cible ● Décrivez dans un test une étape qui vous permet d'explorer cette cible ● Exemple: cible === reflection
  • 34. Approche par intention ● Modifiez le code comme vous voudriez qu'il soit – Faites le compiler – Laisser votre suite de tests passer au rouge – Revenez ensuite au vert ● Exemple:
  • 35. Combinez les deux approches ● Modifiez le code comme vous voudriez qu'il 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 cible Votre suite de tests contient plusieurs tests rouges avant de retrouver le vert complet
  • 36. Auto-évaluation Tests X/V? J'ai écrit plusieurs tests Chaque nouveau test commence par ne pas passer Chaque test a une seule intention Chaque test a un nom qui illustre l'intention du test Mes tests illustrent un développement incrémentale Un autre que moi comprend l'intention de mes tests Je sais nommer les smells que je supprime en refactoring Mon backlog de refactoring a réduit Je sais nommer les Design Patterns que j'ai implémenté Je sais nommer le principe SOLID que j'ai suivi
  • 37. Merci ● M'aiderez vous à améliorer ce matériel ? – Qu'avez-vous aimé ? – Quelles améliorations feriez-vous ? eric.mignot@gmail.com