Que fait Développement piloté par les tests (TDD) ?
Développez des fonctionnalités et corrigez des bugs une tranche verticale à la fois, en utilisant les tests comme boucle de rétroaction.
Principe fondamental
Les tests vérifient le comportement via les interfaces publiques, pas les détails d'implémentation. Si vous refactorez et que le test échoue sans que le comportement ne change, c'est le test qui est erroné.
Anti-patron : tranches horizontales
N'écrivez pas d'abord tous les tests, puis toute l'implémentation. Écrivez un test, faites-le passer, puis répétez.
Mauvais : ROUGE test1, test2, test3 -> VERT impl1, impl2, impl3
Bon : ROUGE test1 -> VERT impl1 -> ROUGE test2 -> VERT impl2 -> ...
Workflow
1. Planifier
- Confirmer les modifications d'interface avec l'utilisateur.
- Confirmer quels comportements tester. Vous ne pouvez pas tout tester.
- Lister les comportements comme des résultats observables, pas des étapes d'implémentation.
- Obtenir l'approbation de l'utilisateur avant d'écrire du code.
2. Balle traçante
Écrivez un test pour un comportement. Regardez-le échouer. Écrivez le code minimal pour le faire passer.
3. Boucle incrémentale
Pour chaque comportement restant :
- Écrivez le test suivant.
- Faites-le passer avec un code minimal.
- N'anticipez pas les tests futurs.
4. Refactoriser
Une fois tous les tests passés :
- Extrayez les duplications.
- Approfondissez les modules : petite interface, implémentation profonde.
- Exécutez les tests après chaque étape de refactorisation.
Ne refactorisez jamais tant que les tests sont au ROUGE.
Liste de vérification par cycle
- Le test décrit le comportement, pas l'implémentation.
- Le test utilise l'interface publique.
- Le test survivrait à une refactorisation interne.
- Le code est minimal pour ce test.
- Aucune fonctionnalité spéculative ajoutée.
Règles
- Écrivez les tests avant l'implémentation pour tout nouveau comportement.
- Utilisez des indications de type et des noms explicites.
- Gardez les fonctions petites et à usage unique.
- Échouez rapidement avec des messages d'erreur clairs.