Définition courte
Test Driven Development — discipline de développement où le test décrivant le comportement attendu est écrit avant le code qui l'implémente.
Définition détaillée
Au sens technique établi, le TDD désigne un cycle court et répété : écrire un test qui échoue, écrire le code minimal qui le fait passer, remanier le code sans casser le test. C'est une pratique de conception du code autant qu'une pratique de test.
Dans les articles de ce blog, le terme est employé sous un angle plus étroit : le test antérieur au code est retenu comme artefact de spécification. Il porte le quoi — le comportement attendu, ce qui doit rester vrai — là où le code porte le comment. À ce titre, il intéresse le produit autant que le développement : il fixe un accord sur un comportement dans une forme que la machine évalue, et qui ne peut donc pas diverger silencieusement de l'implémentation.
Usage dans le domaine
Discussions sur la réduction du nombre de défauts produits, définition d'une politique qualité, arbitrage sur le coût des tests, formalisation des critères d'acceptation d'une fonctionnalité.
Synonymes et variantes
Test Driven Development · développement piloté par les tests · test-first.
À ne pas confondre avec
- Tests automatisés — tests exécutés par une machine, sans indication sur le moment où ils ont été écrits ; écrits après le code, ils constatent ce qu'il fait.
BDD(Behaviour Driven Development) — formulation des comportements attendus dans un langage lisible par les non-développeurs, orientée vers la conversation avec le métier.- Tests de non-régression — jeu de tests rejoué pour vérifier qu'un comportement existant n'a pas été cassé, indépendamment de son antériorité au code.
- QA — fonction qui définit et vérifie les critères de qualité ; le TDD est une pratique tenue par les développeurs eux-mêmes.
Exemples
« Le test décrit le quoi. Le code implémente le comment. »
Un comportement attendu fixé par un test avant l'implémentation reste vérifiable après plusieurs remaniements du code, alors que la prose qui le décrivait a cessé d'être relue.
Ambiguïtés / débats
Le sigle est souvent employé pour désigner toute pratique de test automatisé, ce qui efface la seule chose qui le caractérise : l'antériorité du test sur le code.
Sa valeur reste discutée — pratique de conception pour les uns, surcoût d'écriture pour les autres —, et le débat porte rarement sur le même objet, selon qu'on parle du cycle complet ou du seul test-first.