Développement piloté par les tests
Le développement piloté par les tests (TDD) est une approche de développement logiciel dans laquelle des cas de test sont développés pour spécifier et valider ce que le code va faire. En termes simples, les cas de test pour chaque fonctionnalité sont créés et testés en premier et si le test échoue, le nouveau code est écrit afin de réussir le test et de rendre le code simple et sans bogue.
Le développement piloté par les tests commence par la conception et le développement de tests pour chaque petite fonctionnalité dune application. TDD demande aux développeurs décrire un nouveau code uniquement si un test automatisé a échoué. Cela évite la duplication de code. La forme complète de TDD est le développement piloté par les tests.
Le concept simple de TDD est décrire et de corriger les tests qui ont échoué avant décrire nouveau code (avant développement). Cela permet déviter la duplication de code lorsque nous écrivons une petite quantité de code à la fois afin de réussir les tests. (Les tests ne sont rien dautre que des conditions requises que nous devons tester pour les remplir).
Le développement piloté par les tests est un processus de développement et dexécution automatisé test avant le développement réel de lapplication. Par conséquent, TDD est parfois également appelé Test First Development.
Dans ce didacticiel, vous en apprendrez plus sur-
- Comment effectuer un test TDD
- TDD Vs. Test traditionnel
- Quest-ce que lacceptation TDD et Developer TDD
- Scaling TDD via Agile Model Driven Development (AMDD)
- Test Driven Development (TDD) vs. Développement basé sur un modèle agile (AMDD)
- Exemple de TDD
- Avantages de TDD
Comment effectuer un test TDD
Les étapes suivantes définissent comment effectuer un test TDD,
- Ajoutez un test.
- Exécutez tous les tests et voyez si un nouveau test échoue.
- Écrivez-en quelques-uns code.
- Exécutez les tests et le code Refactor.
- Répétez.
Définition du cycle TDD
- Ecrire un test
- Faites-le exécuter.
- Changer le code pour faire les choses correctement, cest-à-dire Refactor.
- Répétez le processus.
Quelques clarifications sur TDD:
- TDD ne concerne ni le « Test » ni à propos de « Design ».
- TDD ne signifie pas « écrire certains des tests, puis construire un système qui réussit les tests.
- TDD ne signifie pas » faire beaucoup de tests. «
TDD contre les tests traditionnels
Lapproche TDD est avant tout une technique de spécification. Elle garantit que votre code source est soigneusement testé lors de la confirmation niveau.
- Avec les tests traditionnels, un test réussi détecte un ou plusieurs défauts. Cest la même chose que TDD. Lorsquun test échoue, vous avez progressé car vous savez que vous devez résoudre le problème.
- TDD garantit que votre système répond réellement aux exigences définies pour lui. Cela aide à renforcer votre confiance dans votre système.
- Dans TDD, laccent est davantage mis sur le code de production qui vérifie si les tests fonctionnent correctement. Dans les tests traditionnels, laccent est davantage mis sur la conception des cas de test. Si le test montrera la bonne / mauvaise exécution de lapplication afin de répondre aux exigences.
- Dans TDD, vous obtenez un test de couverture de 100%. Chaque ligne de code est testée, contrairement aux tests traditionnels.
- La combinaison des tests traditionnels et du TDD conduit à limportance de tester le système plutôt que de la perfectionner.
- In Modélisation Agile (AM), vous devez «tester avec un objectif». Vous devez savoir pourquoi vous testez quelque chose et à quel niveau il doit être testé.
Quest-ce que lacceptation TDD et Developer TDD
Il existe deux niveaux de TDD
- Acceptation TDD (ATDD): Avec ATDD, vous écrivez un seul test dacceptation. Ce test satisfait à lexigence de la spécification ou satisfait au comportement du système. Après cela, écrivez juste assez de code de production / fonctionnalité pour remplir ce test dacceptation. Le test dacceptation se concentre sur le comportement global du système. ATDD était également connu sous le nom de Behavioral Driven Development (BDD).
- Developer TDD: avec Developer TDD, vous écrivez un test de développeur unique, cest-à-dire un test unitaire, puis juste assez de code de production pour remplir ce test. Le test unitaire se concentre sur chaque petite fonctionnalité du système. Le développeur TDD est simplement appelé TDD.
Lobjectif principal dATDD et de TDD est de spécifier des exigences détaillées et exécutables pour votre solution sur une base juste à temps (JIT). JIT signifie ne prendre en compte que les exigences nécessaires dans le système. Alors augmentez votre efficacité.
Scaling TDD via Agile Model Driven Development (AMDD)
TDD est très bon pour la spécification et la validation détaillées. Il ne parvient pas à réfléchir à des problèmes plus importants tels que la conception globale, lutilisation du système ou linterface utilisateur.AMDD résout les problèmes de mise à léchelle Agile que TDD ne fait pas.
Ainsi, AMDD est utilisé pour des problèmes plus importants.
Le cycle de vie dAMDD.
Dans le développement piloté par modèle (MDD), des modèles étendus sont créés avant le le code source est écrit. Lesquels ont à leur tour une approche agile?
Dans la figure ci-dessus, chaque case représente une activité de développement.
La visualisation est lun des processus TDD de prédiction / imaginaire des tests qui seront effectués au cours de la première semaine du projet. Lobjectif principal de la visualisation est didentifier la portée du système et larchitecture du système. La modélisation des exigences et de larchitecture de haut niveau est effectuée pour une vision réussie.
Cest le processus où il ny a pas de spécification détaillée du logiciel / système, mais lexploration des exigences du logiciel / système qui définit la stratégie globale du projet.
- Itération 0: Envisioning
Il y a deux sous-activations principales.
- Présentation des exigences initiales.
Lidentification des exigences de haut niveau et de la portée du système peut prendre plusieurs jours. Lobjectif principal est dexplorer le modèle dutilisation, le modèle de domaine initial et le modèle dinterface utilisateur (UI).
- Visualisation architecturale initiale.
Il faut également plusieurs jours pour identifier larchitecture du système. Il permet de définir les orientations techniques du projet. Lobjectif principal est dexplorer les diagrammes technologiques, le flux de linterface utilisateur (UI), les modèles de domaine et les cas de changement.
- Modélisation des itérations:
Ici, léquipe doit planifier le travail qui sera fait pour chaque itération.
- Le processus Agile est utilisé pour chaque itération, cest-à-dire que lors de chaque itération, un nouvel élément de travail sera ajouté avec une priorité.
- Premier plus prioritaire les travaux seront pris en considération. Les éléments de travail ajoutés peuvent être redéfinis ou supprimés de la pile déléments à tout moment.
- Léquipe discute de la manière dont elle va mettre en œuvre chaque exigence. La modélisation est utilisée à cette fin.
- Lanalyse et la conception de la modélisation sont effectuées pour chaque exigence qui sera mise en œuvre pour cette itération.
- Storming de modèle:
Ceci est également connu sous le nom de modélisation juste à temps.
- Ici, la session de modélisation implique une équipe de 2/3 membres qui discutent des problèmes sur papier ou sur un tableau blanc.
- Un membre de léquipe en demandera à un autre pour modéliser avec eux. Cette séance de modélisation prendra environ 5 à 10 minutes. Où les membres de léquipe se réunissent pour partager un tableau blanc / un document.
- Ils explorent les problèmes jusquà ce quils ne trouvent pas la cause principale du problème. Juste à temps, si un membre de léquipe identifie le problème quil souhaite pour le résoudre, il / elle demandera laide rapide des autres membres de léquipe.
- Les autres membres du groupe explorent ensuite le problème, puis tout le monde continue comme avant. Cela sappelle également des sessions de modélisation debout ou de contrôle qualité client .
- Test Driven Development (TDD).
- Il favorise les tests de confirmation du code de votre application et des spécifications détaillées.
- Le test dacceptation (exigences détaillées) et les tests du développeur (test unitaire) sont des entrées pour TDD.
- TDD simplifie et clarifie le code. Il permet au développeur de conserver moins de documentation.
- Examens.
- Ceci est facultatif. Cela inclut des inspections de code et des examens de modèles.
- Cela peut être fait pour chaque itération ou pour lensemble du projet.
- Cest une bonne option pour donner des commentaires sur le projet.
Test Driven Development (TDD) Vs. Agile Model Driven Development (AMDD)
Exemple de TDD
Ici, dans cet exemple, nous allons définir un mot de passe de classe. Pour cette classe, nous essaierons de satisfaire les conditions suivantes.
Une condition dacceptation du mot de passe:
- Le mot de passe doit comprendre entre 5 et 10 caractères.
Tout dabord, nous écrivons le code qui remplit toutes les conditions ci-dessus.
Scénario 1: Pour exécuter le test, nous créons la classe PasswordValidator ();
Nous allons exécuter au-dessus de la classe TestPassword ();
La sortie est PASSÉE comme indiqué ci-dessous;
Résultat:
Scénario 2: Ici, nous pouvons voir dans la méthode TestPasswordLength () il nest pas nécessaire de créer une instance de la classe PasswordValidator. Instance signifie créer un objet de classe pour référencer les membres (variables / méthodes) de cette classe.
Nous supprimerons la classe PasswordValidator pv = new PasswordValidator () du code. Nous pouvons appeler la méthode isValid () directement par PasswordValidator. IsValid (« Abc123 »).(Voir limage ci-dessous)
Nous refactorisons (le code change) comme ci-dessous:
Scénario 3: Après la refactorisation, la sortie affiche létat déchec (voir limage ci-dessous), cest parce que nous avons supprimé linstance. Il ny a donc aucune référence à la méthode non statique isValid ().
Donc nous devons changer cette méthode en ajoutant un mot « statique » avant Boolean comme booléen statique public isValid (String password). Refactoring de la classe PasswordValidator () pour supprimer lerreur ci-dessus pour réussir le test.
Résultat:
Après avoir apporté des modifications à la classe PassValidator () si nous exécutons le test, la sortie sera PASSÉE comme indiqué ci-dessous.
Avantages de TDD
- Bug précoce notification.
Les développeurs testent leur code mais dans le monde des bases de données, cela consiste souvent en des tests manuels ou des scripts ponctuels. En utilisant TDD, vous créez, au fil du temps, une suite de tests automatisés que vous et tout autre développeur pouvez relancer à volonté.
- Code mieux conçu, plus propre et plus extensible.
- Cela aide à comprendre comment le code sera utilisé et comment il interagit avec les autres modules.
- Il en résulte une meilleure décision de conception et un code plus maintenable.
- TDD permet décrire du code plus petit ayant une responsabilité unique plutôt que des procédures monolithiques avec des responsabilités multiples. Cela rend le code plus simple à comprendre.
- TDD oblige également à écrire uniquement du code de production pour réussir les tests en fonction des besoins des utilisateurs.
- Confiance pour Refactor
- Si vous refactorisez du code, il peut y avoir des possibilités de coupures dans le code. Ainsi, avec un ensemble de tests automatisés, vous pouvez corriger ces pauses avant la publication. Un avertissement approprié sera donné si des pauses sont détectées lors de lutilisation de tests automatisés.
- Lutilisation de TDD devrait entraîner un code plus rapide et plus extensible avec moins de bogues pouvant être mis à jour avec un minimum de risques.
- Bon pour le travail déquipe
En labsence de tout membre de léquipe, les autres membres de léquipe peuvent facilement saisir et travailler sur le code. Cela facilite également le partage des connaissances, ce qui rend léquipe plus efficace dans lensemble.
- Bon pour les développeurs
Bien que les développeurs doivent passer plus de temps à écrire des cas de test TDD, cela prend beaucoup moins de temps pour le débogage et le développement de nouvelles fonctionnalités. Vous écrirez un code plus propre et moins compliqué.
Résumé:
- TDD signifie développement piloté par les tests. Il sagit dun processus de modification du code afin de réussir un test conçu précédemment.
- Il met davantage laccent sur le code de production que sur la conception de cas de test.
- Le développement piloté par les tests est un processus de modifier le code afin de réussir un test conçu précédemment.
- En génie logiciel, il est parfois appelé « Test First Development ».
- TDD inclut la refactorisation dun code, cest-à-dire modifier / ajouter une certaine quantité de code au code existant sans affecter le comportement du code.
- TDD lorsquil est utilisé, le code devient plus clair et simple à comprendre.
Cet article est rédigé par Kanchan Kulkarni