Le développement piloté par les tests (TDD) est une approche du développement logiciel dans laquelle les tests logiciels sont écrits avant les fonctions correspondantes.
Les développeurs écrivent suffisamment de code pour passer chaque test, puis le test et le code sont affinés avant de passer à un nouveau test, puis à une nouvelle fonctionnalité.
Le développement piloté par les tests oblige essentiellement les développeurs à ralentir, à valider et à affiner leur code dans des cycles de rétroaction plus courts. Bien que cela ne soit pas obligatoire, les équipes DevOps encouragent les codeurs, qu’ils soient novices ou expérimentés, à utiliser le TDD dans un large éventail de langages de programmation tels que Java, Python, les interfaces de programmation des applications (API) et les applications de programmes.
Ce type de programmation renforce la relation entre le codage, les tests (sous forme de tests unitaires automatisés) et la conception du code. Si le développement piloté par les tests peut augmenter le temps de développement initial, il a été démontré qu’il améliore la fonctionnalité et la souplesse du code et permet généralement de gagner du temps.
En identifiant et en corrigeant immédiatement les erreurs, les développeurs qui emploient le TDD peuvent éviter que de petits problèmes ne grandissent. Le développement piloté par les tests oblige les développeurs à valider et à affiner leur code au fur et à mesure, ce qui rationalise les contrôles de qualité et les corrections finaux.
Il existe d’autres cadres de test, qui consistent par exemple à écrire le code de production avant tous les tests automatisés ou à écrire l’ensemble des tests avant le code de production. Ces méthodes, bien que pas nécessairement inefficaces, ont montré qu’elles augmentaient le temps de débogage nécessaire, en particulier pour les projets plus importants et plus complexes.
Si le développement piloté par les tests est couramment utilisé pour la création de nouveau code de production, il est également souvent employé pour améliorer le débogage de code hérité développé avec des techniques plus anciennes ou différentes.
Le développement piloté par les tests inverse le processus de développement traditionnel en plaçant les tests avant le développement. En tant qu’approche itérative, il améliore la qualité et la lisibilité du code en favorisant des workflows testables qui aboutissent à un code de haute qualité au niveau des unités. Lorsque les développeurs mettent en œuvre des tests unitaires, ils se concentrent sur une petite partie de la logique, telle qu’un algorithme individuel. L’écriture de code spécifiquement destiné à faire passer les tests permet non seulement d’obtenir un code plus propre et plus durable, mais contribue également à améliorer la documentation.
Newsletter sectorielle
Restez au fait des tendances les plus étonnantes du secteur dans le domaine de l’IA, de l’automatisation, des données et bien d’autres avec la newsletter Think. Consultez la Déclaration de confidentialité d’IBM.
Vous recevrez votre abonnement en anglais. Vous trouverez un lien de désabonnement dans chaque newsletter. Vous pouvez gérer vos abonnements ou vous désabonner ici. Consultez la Déclaration de confidentialité d’IBM pour plus d’informations.
Il existe deux niveaux principaux de développement piloté par les tests :
Pour le TDD d’acceptation (ATDD), parfois appelé développement piloté par le comportement (BDD), les programmeurs écrivent un seul test d’acceptation, puis suffisamment de nouveau code pour le faire passer. Ces tests sont parfois appelés tests clients ou tests d’acceptation par le client.
Ils peuvent généralement être considérés comme des cas de test requis pour vérifier les fonctionnalités minimales définies par les parties prenantes du produit. L’ATDD vise à d’identifier des exigences détaillées et exécutables. Les tests d’acceptation peuvent être effectués à l’aide de divers outils de test, tels que Fitnesse ou RSpec.
Parfois appelé simplement TDD, le TDD pour développeurs exige des codeurs qu’ils écrivent des tests uniques pour évaluer leur propre solution à un test ATDD. Le TDD pour développeurs utilise des outils d’automatisation des tests, tels que JUnit ou VBUnit.
Lorsqu’ils emploient une stratégie de développement piloté par les tests, les codeurs écrivent d’abord des tests pour vérifier chaque élément ou fonction d’un logiciel avant d’écrire suffisamment de code pour passer ce test individuel. Une fois terminé, le logiciel est testé à nouveau ; s’il passe le test, le code est affiné (un processus appelé refactoring) pour n’inclure que les éléments essentiels. Les développeurs répètent ensuite ce processus pour chaque fonction logicielle suivante.
Le processus de développement piloté par les tests se décompose en cinq étapes distinctes :
En termes simples, le processus de développement piloté par les tests suit une boucle répétitive, appelée cycle rouge-vert-refactoring. Les étapes du cycle sont les suivantes :
Bien que les origines spécifiques du développement piloté par les tests soient inconnues, le concept consistant à écrire d’abord les tests, puis le code de production, n’était pas une pratique courante avant le milieu des années 1990. Auparavant, les cadres de test empêchaient les développeurs de tester leurs propres bases de code. Mais avec l’évolution de l’ingénierie logicielle, les équipes DevOps ont exigé des méthodologies plus rapides et plus flexibles pour répondre aux demandes des parties prenantes, en particulier lorsque celles-ci changeaient rapidement.
Le développement piloté par les tests a évolué à partir de divers cadres de test novateurs et parallèlement à ceux-ci, et a également été adopté comme composant modulaire dans divers autres cadres. Le TDD est notamment inclus dans le concept d’Extreme Programming (XP), un cadre de développement logiciel agile développé pour améliorer à la fois la qualité des logiciels et la qualité de vie des développeurs.
L’ingénieur logiciel Kent Beck, figure majeure de la communauté agile et créateur de l’Extreme Programming, est considéré comme ayant « redécouvert » le développement piloté par les tests. Selon ses propres mots :
« La description initiale du TDD figurait dans un ancien livre sur la programmation. Elle disait qu’il fallait prendre la bande d’entrée, taper manuellement la bande de sortie attendue, puis programmer jusqu’à ce que la bande de sortie réelle corresponde à la sortie attendue. Après avoir écrit le premier cadre xUnit dans Smalltalk, je me suis souvenu avoir lu cela et j’ai essayé. C’est ainsi qu’est né le TDD pour moi. Lorsque je décris le TDD à des programmeurs plus âgés, j’entends souvent : "Bien sûr. Comment pourrait-on programmer autrement ?" C’est pourquoi je dis que j’ai "redécouvert" le TDD. »
Voici quelques-unes des dates clés dans l’évolution du développement piloté par les tests :
En tant que composante d’Extreme Programming, le développement piloté par les tests s’est avéré bénéfique non seulement pour créer un meilleur code, mais également pour améliorer les codeurs eux-mêmes. Le TDD leur permet de mieux comprendre leurs projets et contribue à la conception des programmes. En se concentrant sur le cas de test avant la mise en œuvre de chaque fonctionnalité, les développeurs doivent visualiser comment une fonction sera employée par un client ou un utilisateur. Cette approche place l’interface du produit avant la mise en œuvre et aide les développeurs à créer des applications plus centrées sur l’utilisateur.
Voici d’autres avantages du développement piloté par les tests :
Bien que l’utilisation du développement piloté par les tests (TDD) présente de nombreux avantages, elle n’est pas sans défis. Si la gravité de ces défis peut dépendre du projet ou être atténuée par diverses autres techniques, voici quelques-uns des inconvénients du TDD :
Construisez une entreprise plus résiliente grâce à des solutions alimentées par l’IA pour la gestion intelligente des actifs et de la chaîne d’approvisionnement.
Transformez vos opérations métier avec IBM en intégrant des processus d’optimisation à l’aide de données riches et de puissantes technologies d’IA.
IBM Cloud Pak for Business Automation est un ensemble modulaire de composants logiciels intégrés pour la gestion et l'automatisation des opérations.