Le TDD, Test Driven Development ou Développement piloté par les tests pour les réfractaires à la langue de Shakespeare, est une pratique d’ingénierie logicielle qui impose l’écriture des tests unitaires avant le code production qu’ils sont censés valider. Issu du monde agile au sein duquel il constitue une pratique de base de la méthode XP, le TDD est aujourd’hui reconnu comme une discipline à part entière utilisée également en dehors du contexte agile. Tour d’horizon et initiation à une pratique dont vous ne pourrez rapidement plus vous passer !
La mouvance agile ne cesse de progresser depuis une dizaine d’années amenant de nouvelles pratiques plus pragmatiques ayant pour but de fournir au client le programme répondant à ses besoins dans le meilleur délai. Pour cette problématique, les méthodes traditionnelles basées sur le cycle en V proposent une approche "Test-Last" avec écriture des tests unitaires après le code de l’application. Cette approche a clairement montré ses limites au cours du temps puisque dans le meilleur des cas les tests écrits sont adaptés au code et non l’inverse, introduisant de fait un biais de confirmation. Dans le pire des cas, ces tests ne sont même pas écrits puisque le code semble fonctionner correctement, pourquoi perdre du temps en les écrivant ? La réponse à cette question est une évidence pour les partisans du TDD, bien conscients que l’investissement réalisé aujourd’hui sur les tests sera largement remboursé à l’avenir lors de l’ajout de fonctionnalités ou d’opérations de refactoring. Ainsi, le TDD adopte une approche "Test-First" au sein de laquelle les tests unitaires sont écrits avant le code dont la seule raison d’être sera le succès de l’exécution de ces tests. Cette idée qui remonte à des temps anciens a été formalisée au milieu des années 90 par Kent Beck qui en fait un des piliers de la méthodologie Extreme Programming (XP). Il faut ensuite attendre 2003 et la sortie du livre "Test Driven Development : By Example" pour le voir achever de codifier la pratique. Cette dernière adjoint à l’approche "Test-First" la notion de refactoring continu dans une optique d’amélioration du code produit.
Sylvain Saurel