Description
ATDD est l'acronyme de "Acceptance Test-Driven Development". ATDD trouve ses racines dans la pratique du TDD. L'idée de l'ATDD semble émerger avec Lisa Crispin [Crispin 2000] qui suggère déjà d'automatiser les tests d'acceptation (AT) écrits avant le code [Kaner 2002].
ATDD consiste en [Axelrod 2018] :
- définir le site ATs pour chaque nouvelle histoire d'utilisateur (US)
- une mise en œuvre du site ATs avec du code de production
- un code de production minimal qui est généré pour passer le ATs avec le Definition of Done (DoD)
- lorsque tous les ATs passent, les USpasse ; c'est "fait" si la DoD passe aussi [Schwaber 2020].
ATDD n'est pas seulement pour les interfaces graphiques mais pour tout type d'interface les UScomme les API REST, les RPC ou d'autres mécanismes permettant d'assurer la testabilité du carnet de commandes.
ATs peut [Axelrod 2018] :
- aider l'organisation à se concentrer sur le client en améliorant la communication entre le propriétaire de l'entreprise et l'équipe de développement
- aider l'équipe de développement à comprendre les progrès et les éléments à tester
- aider les clients et les équipes de développement à s'assurer que le projet progresse dans la bonne direction [Crispin 2000] [Deng 2009]
- forcer pour commencer à planifier un code de production testable
- garantir que les testeurs et les scripteurs sont impliqués le plus tôt possible, ce qui leur permet d'influencer réellement la qualité du produit
- être utilisé comme un test de régression et permet une exécution automatique sur une base régulière et permet au code d'être remanié en toute sécurité
- améliorer la précision de l'estimation de l'effort de développement si ATs est écrit à l'avance (par exemple, au cours d'une session 3 Amigos ou d'une session de cartographie des exemples au moment du raffinement du sprint).
- être utilisé comme documentation à la "manière Agile" et fournir des "spécifications exécutables" [Ambler 2005]
- être exécuté juste après la ligne de code la plus simple censée mettre en œuvre l'AT au lieu d'attendre une version candidate de la solution complète, conformément au principe de test "Shift Left"
- être répété à un rythme plus élevé s'il est répété, plutôt qu'à la fin du SDLC, réduisant ainsi les risques de non-conformité très rapidement.
Les ATDD sont des spécifications exécutables, ce qui signifie que les ATDD sont comme une "Bande de Möbius" : les deux côtés de l'AT sont en fait les mêmes ; l'automatisation du script de test les rend exécutables [Moustier 2020].
Pourquoi avons-nous besoin de l'automatisation des tests ?
- l'automatisation réduit les " coûts de transaction " [SAFe 2021-06] : dans le modèle de livraison itératif, chaque fois qu'un lot de livraison doit être déployé, il supporte certains coûts qui doivent être maintenus bas pour permettre des mises en production fréquentes.
- de faibles coûts de transaction réduisent également le coût de détention [SAFe 2021-06] : le fait de retarder la mise sur le marché entraîne un manque à gagner pour les clients et les concurrents peuvent tirer profit de la valeur ajoutée non livrée.
- l'automatisation permet de réaliser des tests rapides, entièrement répétables et précis [Axelrod 2018].
- il aide à effectuer des tests de régression sans aucune connaissance du produit
- Agile, et plus généralement DevOps, reposent sur une stratégie d'automatisationpoussée.
"L'automatisation des tests" présente bien sûr des inconvénients tels que :
- scripts maintenance pour s'adapter aux modifications des interfaces telles que l'IU ou l'API
- les données d'essai doivent être maintenues/migrées pour correspondre aux changements d'activité et à leur mise en œuvre
- les faux positifs (aka "Flaky tests") doivent être chassés dans une approche Jidoka
- un script n'est pas un test et s'appuyer uniquement sur des cas de test scriptés n'est pas suffisant [Bach 2014]
- si l'automatisation des tests se fait en mode silo, des goulots d'étranglement apparaîtront
- les tests automatisés doivent démarrer à partir d'un état initial bien connu, car un échec dans le scénario interrompt le test et saute au suivant ; par conséquent, l'échec d'un test ne doit pas affecter les tests suivants et les dépendances entre les tests automatisés sont fortement déconseillées [Axelrod 2018].
L'ATDD est souvent confondu avec le développement piloté par le comportement (BDD). Le BDD est une méthodologie qui vise à combler l'écart entre la description d'un comportement et sa mise en œuvre. Le comportement est décrit en langage naturel et remplace les spécifications formelles. Il est accompagné de tests qui vérifient la fonctionnalité [North 2006] [Axelrod 2018] [Moustier 2019-1].
Alors que BDD est axé sur les comportements du point de vue du client, ATDD vise à tester les critères d'acceptation. D'une part, BDD décrit l'activité (outside-in) et fournit des critères grâce à ce que l'on appelle les "spécifications par exemples" (SBE) [Fowler 2004] ; d'autre part, ATDD permet le côté technique de l'AC, il fait la transition de l'outside-in à l'inside-out pour TDD [Moe 2019].
Parallèlement à BDD, créé par Dan North [North 2006], est apparu un outil appelé "Cucumber" [Wynne 2012] [Ye 2013] qui compile une spécification de comportement en langage naturel formaté en stubs de code prêts à intégrer l'implémentation du test. Le BDD permet donc l'ATDD [Axelrod 2018].
Ce "langage naturel" utilisé par Cucumber a été surnommé "Gherkin". Voici la structure de ce langage naturel :
Feature: <US name>
As a <User Type>
I need to <do something>
So that <benefit of the action>
Scenario X : <scenario test name X>
Given <context X>
When <something happens>
Then <items to check with AND, THEN or BUT between items>
La quantité de scénarios peut varier d'un US à l'autre ; en fournir trop pour le même US n'est pas une bonne pratique car cela génèrera un US qui serait trop grand pour être traité dans un Sprint.
À partir de la description Gherkin, la plupart des frameworks BDD génèrent le squelette du code de test unitaire. Le squelette de test unitaire généré doit ensuite être rempli d'instructions et d'appels à définir [Axelrod 2018].
- la condition initiale - la partie "Given" (donnée).
- le produit à la situation attendue - la partie "Quand".
- les contrôles définis à effectuer - la partie "Ensuite".
Ces outils sont en fait basés sur des mots-clés qui reçoivent l'implémentation, tout comme l'approche Keyword-Driven Testing (KDT) où chaque partie du Gherkin est considérée comme un mot-clé [Deng 2009].
D'autres outils BDD vous permettent d'intégrer la documentation dans le code de test lui-même, par exemple :
- RSpec pour Ruby
- Spectre pour Java
- MSpec pour .Net
- Jasmine et Mocha pour JavaScript
Impact sur la maturité des tests
ATDD est fortement lié à TDD, en raison de son origine [Crispin 2000] mais aussi parce que ATDD renforce TDD en fournissant le squelette des tests unitaires qui doivent être remplis avec des appels au code de production. Cela génère un système d'apprentissage en double boucle [Argyris 1977] [Smith 2001] qui permet de fournir la bonne solution au lieu de la seule conformité aux tests unitaires.
ATDD et TDD sont un système d'apprentissage en double boucle [Ambler 2006].
Ce système d'apprentissage en double boucle devrait également être inclus dans une boucle de niveau supérieur telle que le Lean Startup [Ries 2012]. Cela permettrait de livrer le bon produit au lieu de quelque chose qui serait simplement conforme à la définition US.
Lean Startup comme mécanisme d'apprentissage en double boucle par rapport à la double boucle ATDD/TDD [Moustier 2020].
Ces systèmes à double boucle peuvent inclure des niveaux de boucle intermédiaires comme dans le cas de l'Extreme Programming [Beck 2004] qui fournit un retour d'information à plusieurs niveaux et à plusieurs fréquences [DonWells 2013].
L'Extreme Programming nécessite une planification et un retour d'information à plusieurs niveaux et à plusieurs fréquences [DonWells 2013].
L'ATDD étant basé sur le BDD, les non-programmeurs sont alors en mesure de créer des tests [Kaner 2002] et d'assurer une liaison transparente avec les travailleurs des niveaux inférieurs. Gherkin et SBE visent tous deux à fournir un moyen de communication qui combine les critères d'utilisation et d'acceptation entre l'AT et les tests unitaires, mais l'état d'esprit "Test First" peut être étendu aux systèmes connectés à double boucle mis en œuvre dans l'organisation. Dans le prisme de l'ATDD, les organisations sont de différentes saveurs :
- Équipe dédiée : responsabilité complète mais l'équipe de scripteurs sera déconnectée de l'équipe de développement. Cette configuration introduit des problèmes dans un contexte DevOps [Axelrod 2018] ; cela conduit à fusionner les scripteurs au sein des équipes de développement.
- Des scripteurs isolés au sein des équipes de développement créeraient des goulots d'étranglement au sein de l'équipe et renforceraient la loi de Conway [Conway 1968], augmentant ainsi les problèmes lors de l'intégration des pièces.
- Membres de l'équipe T-Shape : pour désengorger le goulot d'étranglement des tests, les développeurs contribuent aux tests en automatisant les scripts.
- Feature Teams une fois que les compétences ne sont plus une, l'ensemble de l'équipe peut gérer les tests E2E avec ATDD - généralement, un objectif commun, quelques mesures pertinentes pour surveiller le succès, et des valeurs communes aident l'équipe à dépasser le paradigme de l'équipe de fonctionnalité [North 2016].
Un autre sujet que l'automatisation des tests attire est la gestion des données de test (TDM).
Le TDM est un sujet majeur dans l'automatisation des tests. Les données peuvent être générées à partir des données de production par le biais de la BI et éventuellement grâce à l'IA [Legeard 2021]. Lorsqu'il s'agit de nouvelles fonctionnalités, les données de production manqueront probablement ; malheureusement, l'ATDD concerne principalement les nouvelles fonctionnalités, ce qui en fait un anti-modèle. En outre, le test guidé par les données est facile au niveau des unités de test [Axelrod 2018], mais lorsqu'il s'agit de systèmes complexes et de logiciels de test, cela peut être vraiment difficile en raison de la quantité de données à gérer. Pour aider cela, les données peuvent être organisées grâce à un dictionnaire où chaque cas de test possède ses propres données qui doivent être injectées (et éventuellement anonymisées ou obfusquées) dans l'environnement de test [Axelrod 2018].
A la fin du scénario, les données doivent également être réinitialisées pour permettre la répétition des tests. Si des tests menés en parallèle devaient toucher les mêmes données, plusieurs environnements doivent être mis à disposition [Axelrod 2018] notamment grâce à :
- la gestion des nuages ainsi qu'une approche en 12 facteurs ;
- des stratégies de stockage des données telles que le partage des données en lecture seule [Axelrod 2018], l'utilisation du mécanisme de réplication de la base de données [Wiesmann 2000] ou l'application d'une conception CQRS [Fowler 2011] ;
- lancement sombre pour acheminer les modifications de données vers des stockages spécifiques lorsqu'il s'agit d'isoler les modifications de test.
La GDT est quelque chose de complexe et de difficile à aborder ; c'est pourquoi elle doit être traitée petit à petit, à tout moment, dès le début.
Le point de vue d'Agilitest sur cette pratique
Parce qu'Agilitest est un outil de script #nocode, les développeurs ne font généralement pas confiance à la technologie ; par conséquent, de nombreux utilisateurs d'Agilitest sont des personnes orientées vers les affaires. Cette situation conduit souvent les gestionnaires à mettre en place une organisation orientée vers les silos afin de réaliser rapidement l'automatisation des tests dans leur entreprise. Cependant, cette réalisation n'est pas l'objectif réel. Comme nous l'avons montré ci-dessus, l'état d'esprit introduit par ATDD est essentiellement une question de communication ; la diffusion des outils qui permettent ATDD est vitale pour le flux de livraison. Le partage des préoccupations concernant les outils ATDD entre les développeurs et les scripteurs vise à fusionner les écocycles de développement et d'automatisation des tests. Cela passe notamment par
- connecter Agilitest à un serveur Jenkins existant
- l'extraction de données des bases de données pour tirer parti de la fonctionnalité Data-Driven d'Agilitest
Enfin, l'automatisation des scripts de test infère des défaillances mineures qui peuvent bloquer l'exécution des parties plus importantes du test [Axelrod 2018] ; les tests doivent donc être courts. Certains des utilisateurs d'Agilitest possèdent des scripts avec beaucoup d'étapes : un script de 3000+ étapes a été enregistré ! La bonne nouvelle est que cela prouve que l'outil est robuste ; cependant, il est préférable de concevoir des scripts qui ne vérifient qu'une seule chose.
Pour découvrir l'ensemble des pratiques, cliquez ici.
Cartes connexes
Pour aller plus loin
- [Ambler 2005] : Scott Ambler - c2005 - "Agile Core Practice Executable Specifications" - http://agilemodeling.com/essays/executableSpecifications.htm
- [Argyris 1977] : Chris Argyris - " Double Loop Learning in Organizations " - Harvard Business Review - SEP/1977 - https://hbr.org/1977/09/double-loop-learning-in-organizations
- [Axelrod 2018] : Arnon Axelrod - 2018 - "Complete Guide to Test Automation : Techniques, pratiques et patrons pour construire et maintenir des projets logiciels efficaces" - isbn:9781484238318.
- [Bach 2014] : James Bach & Aaron Hodder - APR 2014 - "Les cas de test ne sont pas des tests" - https://www.satisfice.com/download/test-cases-are-not-testing
- [Beck 2004] : Kent Beck & Cynthia Andres - feb 2004 - "Extreme Programming Explained : Embrasser le changement" - ISBN : 9780321278654
- [Cohn 2004] : Mike Cohn - 2004 - "User Stories Applied : Pour un développement logiciel agile" - isbn:9780321205681
- [Conway 1968] : Melvin Conway - " How do Committee Invent ? " - magazine Datamation - 1968 -http://www.melconway.com/Home/Committees_Paper.html
- [Crispin 2000] : Lisa Crispin & Carol Wade - NOV 2000 - "The Need for Speed : Automatisation des tests d'acceptation dans un environnement de programmation extrême" - http://www.qualityweek.com/QWE2K/Papers.pdf/Crispin.pdf
- [Deng 2009] : Chengyao Deng - SEP 2007 - "FitClipse : a Testing Tool for Supporting Executable Acceptance Test Driven Development" - https://www.researchgate.net/publication/221592535_FitClipse_A_Tool_for_Executable_Acceptance_Test_Driven_Development
- [Fowler 2004]. Martin Fowler - MAR 2004 - "Specification by Example" - www.martinfowler.com/bliki/SpecificationByExample.html
- [Fowler 2011] : Martin Fowler - JUL 2011 - "CQRS" - https://martinfowler.com/bliki/CQRS.html
- [Jureczko 2010] : Marian Jureczko & Michal Mlynarski - JAN 2010 - "Outils de tests d'acceptation automatisés pour les applications web utilisant le développement piloté par les tests" - https://www.researchgate.net/publication/234137871
- [Kaner 2002] : Cem Kaner & James Bach & Bret Pettichord - 2002 - "Leçons apprises dans les tests de logiciels : A Context-Driven Approach" - isbn:9781118080559
- [Legeard 2021] : Bruno Legeard & Julien Botella - OCT 2021 - "API Testing based on AI-assisted Log Analysis" - https://www.youtube.com/watch?v=Pe9TIbMw5KQ
- [Moe 2019] : Myint Myint Moe - MAI 2019 - "Étude comparative du développement piloté par les tests (TDD), du développement piloté par le comportement (BDD) et du développement piloté par les tests d'acceptation (ATDD)" - https://www.researchgate.net/publication/334123683_Comparative_Study_of_Test-Driven_Development_TDD_Behavior-Driven_Development_BDD_and_Acceptance_Test-Driven_Development_ATDD
- [Moustier 2019-1] : Christophe Moustier - JUIN 2019 - " Le test en mode agile " - ISBN 978-2-409-01943-2
- [Moustier 2020] : Christophe Moustier - OCT 2020 - " Conduite de tests agiles pour SAFe et LeSS " - ISBN : 978-2-409-02727-7
- [North 2006] : Dan North - " Introducing BDD " - Magazine Better Software - Mars 2006 - https://dannorth.net/introducing-bdd/
- [North 2016] : Dan North - JAN 2016 - "Beyond Feature Teams" (Au-delà des équipes de spécialistes) - https://www.youtube.com/watch?v=EzWmqlBENMM
- [Ries 2012] : Eric Ries - 2012 - " Lean start-up " - Pearson - ISBN 978-2744065088 - http://zwinnalodz.eu/wp-content/uploads/2016/02/The-Lean-Startup-.pdf
- [SAFe 2021-06] : SAFe - FEV 2021 - " s Principe n°6 - Visualiser et limiter les encours, réduire la taille des lots et gérer les files d'attente " - https://www.scaledagileframework.com/visualize-and-limit-wip-reduce-batch-sizes-and-manage-queue-lengths/
- [Schwaber 2020] : Ken Schwaber et Jeff Sutherland - " The Scrum Guide : The Definitive Guide to Scrum : The Rules of the Game " - NOV 2020 - https://scrumguides.org/docs/scrumguide/v2020/2020-Scrum-Guide-French.pdf ou https://scrumguides.org/docs/scrumguide/v2020/2020-Scrum-Guide-US.pdf
- [Smith 2001] : Mark K. Smith - 2001 (mis à jour en 2005) - "Chris Argyris : théories de l'action, apprentissage en double boucle et apprentissage organisationnel" - www.infed.org/thinkers/argyris.htm
- [Wiesmann 2000] : Matthias Wiesmann & Fernando Pedoney & André Schiper & Bettina Kemme & Gustavo Alonso - FEB 2000 - "Database Replication Techniques : a Three Parameter Classification" - https://www.researchgate.net/publication/3876756
- [Wynne 2012] : Matt Wynne & Aslak Hellesoy - 2012 - "The Cucumber Book : Behaviour-Driven Development for Testers and Developers" - isbn:9781934356807
- [Ye 2013] : Wayne Ye - 2013 - "Instant Cucumber BDD How-to" - isbn:9781782163480