La TDD (Test Driver Development) est une technique de développement logiciel qui consiste à écrire les tests unitaires d’une fonction avant d’écrire le contenu de cette fonction. C’est une pratique très connue dans le domaine de l’intégration continue.
Le but de cette pratique connue en XP, Scrum XP ou en devops est d’indiquer à quoi s’exposera le code avant même d’être écrit. Cette pratique change radicalement les concepts classiques des développeurs et peut s’avérer perturbante.
Bien que le TDD renforce la qualité des produits et limite les futures regressions, la notion de « test » n’est pas sa principale fonction. Le TDD permet principalement d’amener les développeurs à trouver une solution à une demande posée par le test.
En effet, en réalisant le test en amont, les développeurs seront guidés pour aller vers la solution attendue. Terminé les pertes de temps pour réaliser des fonctionnalités avec le risque fort d’arriver à un résultat non satisfaisant.
Vous pouvez regarder la vidéo de La Minute Agile sur le sujet :
Une culture à changer avant tout
La TDD est une pratique qui peut énormément apporter également au niveau de la qualité ; un développeur qui guidé par le test, va aller à l’essentiel de l’attendu et épargnera des errances dans le code qui complexifieront la lisibilité de celui-ci.
Amener le TDD sans accompagnement peut avoir des conséquences sur la productivité des équipes ; mal comprise, cette pratique peut devenir une perte de temps considérablement pour les développements.
Il est essentiel que les équipes de développement comprennent concrètement ce qu’apporte la TDD avant de les forcer à en faire.
Rappelez leur que la TDD c’est :
- Un guide pour les développeur
- Un code de meilleur qualité
- Une pratique pour diminuer considérablement les bugs
- Un gain de temps dans un avenir proche pour faire du projet et non plus du débogage
- Une pratique de développement très appréciée sur un CV
Tous les arguments sont bons pour convaincre les développeurs de la nécessité de changer leur façon de faire pour une façon plus propre de le faire. Cependant cela doit partir d’arguments concrets.
Cycle de la TDD
La TDD propose un cycle de travail aux développeurs pour obtenir une qualité optimale de la mise en place des tests unitaires :
- Ecrire le test unitaire
- Lancer celui-ci et vérifier qu’il échoue (classe pas encore codée)
- Ecrire la classe à tester avec le minimum pour faire marcher le test
- Lancer le test et vérifier qu’il fonctionne
- Finir le code complet de la classe
- Vérifier que le test fonctionne toujours (non-régression)
Pratiques complémentaires
En TDD, il existe des pratiques utiles à mettre en place :
- L’utilisation de « mocks » en remplacement des modules de code qui n’ont pas encore été écrits
- La mise en place de « Test Fail First » qui a pour but de créer une première erreur à tester qui sera éventuellement trappée.
Outils de tests unitaires
Chaque langage possède son outil de test unitaire facilement exploitable et tous basés sur les mêmes principes.
-
- Php Unit (PHP)
- JUNit (Java)
- NUnit (.Net)
- Unit.js (Js)
- CppUnit (C++)
Ces outils vous permettront de réaliser vos tests unitaires et de les lancer manuellement. Cependant il existe de nombreux outils qui permettent de faire des tests unitaires de façon automatisées comme Team City, Jenkins ou Travis (outil saas directement connecté avec Git Hub).
Petit exemple rapide avec PHP Unit
Pour vous donner une première idée de l’écriture de tests unitaires, j’ai décidé de vous montrer un exemple simple sous Php Unit. Le but n’étant pas ici d’apprendre à faire des tests unitaires mais de vous montrer que la pratique n’est pas aussi difficile comme nous pourrions le croire au premier abord.
Conclusion
La TDD est une pratique très utile pour améliorer la qualité de vos produits et renforce la qualité de vos mises en production. Le produit n’ira pas en production si un des tests unitaires ne passe pas.
Il ne faut pas oublier qu’il y a un accompagnement à faire pour ne pas voir les équipes de développements céder à la démotivation si vous leur imposez cette pratique pas toujours bien acceptée.
8 Rétroliens / Pings