Travailler en TDD (Test Driven Development)

TDD
TDD

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.

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.

Tests Unitaires avec Php Unit
Tests Unitaires avec Php Unit

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.

[ Article lu 2 fois aujourd'hui ]
A propos Judicaël Paquet 491 Articles
  Paquet Judicaël (coach agile et devops sénior) Mes activités en France et en Suisse : - architecte de transformation agile - formations agiles personnalisées - sensibilisations et coaching de manager - audits de maturité agile et de situations - coaching agile (équipes, orga, product owner, scrum master, coach agile) Spécialités : scrum, kanban, management 3.0, agilité à l’échelle, lean startup, méthode agile. [Suisse/France]