Software craft
TDD, Clean Code et autres pratiques essentielles
Cyrille Martraire
Arnaud Thiéfaine
Dorra Bartaguiz
Fabien Hiegel
Houssam Fakih
Dunod
Avant-propos
VII
Partie 1
Les pratiques incontournables du craft
1 Le Développement Dirigé par les Tests (TDD)
3
1.1 Une technique pour programmer efficacement des fonctionnalités complexes3
1.2 Les principes et les étapes du TDD4
1.3 Rigueur nécessaire à chaque étape6
1.4 Anatomie d'un test7
1.5 Autres conseils sur les tests9
1.6 TDD en pratique sur un kata très simple9
1.7 Conclusion20
2 Techniques et principes de propreté de code (Clean Code)
23
2.1 Programmer comme un exercice de communication23
2.2 L'importance d'être exemplaire24
2.3 Principes essentiels pour un code lisible et évolutif25
2.4 Des commentaires à consommer avec modération34
2.5 Ne pas se répéter (DRY)37
2.6 La propreté de code aussi pour les tests38
2.7 Conclusion39
3 Les spécifications agiles avec le développement dirigé par le comportement (BDD)
41
3.1 Les 3 amigos (tres amigos)42
3.2 Des rôles complémentaires42
3.3 3+ amigos43
3.4 Les ateliers de spécifications43
3.5 Exemples concrets43
3.6 Des exemples exprimés dans le langage du métier44
3.7 Après les ateliers de spécifications47
3.8 Automatisation des scénarios48
3.9 Un effort, beaucoup de bénéfices52
3.10 Techniques complémentaires52
3.11 Démarrer BDD55
4 Collaborer efficacement avec le pair & mob programming
57
4.1 Le binômage (pair programming)57
4.2 Comment binômer ?58
4.3 Styles de binômage59
4.4 Motivations pour choisir de binômer64
4.5 La vie à deux66
4.6 Le mob programming (ou ensemble programming)72
5 L'importance des techniques de refactoring
75
5.1 Transformer le code pour l'améliorer75
5.2 Le code : une matière en perpétuelle transformation76
5.3 Le refactoring comme antidote de la dette technique76
5.4 Les freins au refactoring77
5.5 Un principe fondateur : exprimer l'intention78
5.6 Principes méthodologiques de refactoring78
5.7 Patterns de refactoring : la boîte à outils79
5.8 Refactoring vers des design patterns84
5.9 Combinaison de patterns84
5.10 Situations nécessitant du refactoring85
5.11 Situations impropres au refactoring85
5.12 Refactorer aussi le code de test86
5.13 Conclusion87
6 Travailler avec du code legacy
89
6.1 L'enfer du legacy90
6.2 Apprivoiser le code legacy91
6.3 Tester le code legacy94
6.4 Rendre testable le code legacy104
6.5 Refactorer le code legacy110
6.6 Pour aller plus loin : l'approche scratch refactoring112
6.7 Pour aller plus loin : l'approche d'amélioration marginale113
6.8 Conclusion113
7 Étude détaillée du kata Fraction
115
7.1 Pourquoi les fractions ?115
7.2 Présentation du kata Fraction116
7.3 Premier exercice : implémentation sans contraintes116
7.4 Décomposition118
7.5 Exploration119
7.6 Découpage120
7.7 Second exercice : implémentation avec l'approche TDD121
7.8 Les quatre règles de design simple appliquées au kata134
Partie 2
Techniques avancées et élargissements
8 Principes et outils pour tester efficacement
139
8.1 Les caractéristiques des tests : les tests unitaires F.I.R.S.T139
8.2 Doublures de tests (test double)142
8.3 Types de tests, au-delà des tests unitaires153
8.4 Conclusion161
9 Outils et techniques avancées de TDD
163
9.1 Baby steps et ordonnancement des tests163
9.2 Styles de TDD165
9.3 Lidée du TDD poussée au maximum : TDD as if you meant it173
10 Techniques de conception
179
10.1 Principes essentiels de conception179
10.2 Le jeu de contraintes « Object Calisthenics »184
10.3 Principes de programmation fonctionnelle190
10.4 Code smells courants191
10.5 Design patterns classiques comme destinations de refactorings200
11 Transformations de code à caractère architectural
207
11.1 Découpler un lien navigable par une méthode de recherche208
11.2 Refactorer vers une architecture hexagonale210
11.4 Évoluer progressivement vers un style réactif orienté chorégraphie215
11.5 Rendre un service stateless223
11.6 Rendre un service idempotent naturellement227
Partie 3
Craft et attitudes
12 Introduire le craft dans votre contexte
231
12.1 Démarrer le craft à titre Individuel ou entre collègues231
12.2 Introduire le craft dans une organisation233
12.3 Les causes d'échec du craft236
13 Au-delà des pratiques, un état d'esprit
239
13.1 Développer son savoir-faire239
13.2 Cultiver son savoir-être245
13.3 Professionnalisme251
14 Craft 2.0
257
14.1 Attitudes et aptitudes257
14.2 Le craft en contexte (big) data259
14.3 Le craft en contexte DevOps260
14.4 Le craft en contexte machine learning260
14.5 Le craft en contexte cloud & serverless261
14.6 Évolution et suite du craft261
Annexe 1 : Katalogue, les katas incontournables
263
Annexe 2 : La bibliothèque idéale des crafters
265
Index
271