« Introduction à TDD et BDD » : différence entre les versions

De Wiki Agile
Aucun résumé des modifications
 
(4 versions intermédiaires par le même utilisateur non affichées)
Ligne 2 : Ligne 2 :
[[Category: Portail Equipe de développement]]
[[Category: Portail Equipe de développement]]
[[Category: Tests]]
[[Category: Tests]]
[[Catégorie:TDD]]
[[Category: BDD]]
[[Category: BDD]]
[[Catégorie:ATDD]]
Auteur : Cucumber<br/>
Auteur : Cucumber<br/>
Source : [https://cucumber.io/blog/2017/05/15/intro-to-bdd-and-tdd Introduction to TDD and BDD]<br/>
Source : [https://cucumber.io/blog/2017/05/15/intro-to-bdd-and-tdd Introduction to TDD and BDD]<br/>
Ligne 11 : Ligne 13 :
Traduction :<br/>
Traduction :<br/>
<br/>
<br/>
[[Fichier:Cukeup-seb.jpg|border]]<br/>
[[Fichier:Cukeup-seb.jpg|border|link=]]<br/>
<br/>
<br/>
Cet article comporte quatre sous-sections.
Cet article comporte quatre sous-sections.
Ligne 21 : Ligne 23 :
<br/>
<br/>
==Qu'est-ce que TDD ?==
==Qu'est-ce que TDD ?==
[[Fichier:Write-failing-test.png|border|800px]]<br/>
[[Fichier:Write-failing-test.png|border|800px|link=]]<br/>
<br/>
<br/>
C'est le cycle TDD classique, popularisé dans le livre de Nat Pryce et Steve Freeman : [https://www.amazon.com/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627 Growing Object-Oriented Software, Guided by Tests]. On le décrit généralement comme l'action de "écrire un test qui échoue" puis faire passer le test avec succès et ensuite refactorer le code ; et vous continuez à tourner dans cette boucle. C'est le cycle du TDD, c'est très simple. Il y a trois énoncés simples ; il y a des flèches colorées entre eux. Mais à l'intérieur de ce schéma, il y a beaucoup de complexité ou du moins beaucoup de subtilités.<br/>
C'est le cycle TDD classique, popularisé dans le livre de Nat Pryce et Steve Freeman : [https://www.amazon.com/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627 Growing Object-Oriented Software, Guided by Tests]. On le décrit généralement comme l'action de "écrire un test qui échoue" puis faire passer le test avec succès et ensuite refactorer le code ; et vous continuez à tourner dans cette boucle. C'est le cycle du TDD, c'est très simple. Il y a trois énoncés simples ; il y a des flèches colorées entre eux. Mais à l'intérieur de ce schéma, il y a beaucoup de complexité ou du moins beaucoup de subtilités.<br/>
<br/>
<br/>
[[Fichier:Tdd-bullet-points.png|border|800px]]<br/>
[[Fichier:Tdd-bullet-points.png|border|800px|link=]]<br/>
<br/>
<br/>
Voici une autre façon de le représenter et d'y réfléchir. Bien que "écrire un test qui échoue" soit correct en tant que procédure, cela reste assez déroutant parce que ce n'est pas ce que vous essayez de faire ; l'idée n'est pas de faire un test qui échoue. Ce que vous essayez de faire, c'est d'imaginer la prochaine étape que vous voulez faire, c'est de faire évoluer l'implémentation de façon nécessaire et suffisante pour créer de la valeur. On le reformule souvent comme "écrire la spécification suivante". En gros, votre prochain test est votre prochaine spécification sur la façon dont le logiciel devrait se comporter... et parce que vous ne l'avez pas encore fait, le logiciel va échouer... mais vous n'êtes pas là pour écrire un test qui échoue.<br/>
Voici une autre façon de le représenter et d'y réfléchir. Bien que "écrire un test qui échoue" soit correct en tant que procédure, cela reste assez déroutant parce que ce n'est pas ce que vous essayez de faire ; l'idée n'est pas de faire un test qui échoue. Ce que vous essayez de faire, c'est d'imaginer la prochaine étape que vous voulez faire, c'est de faire évoluer l'implémentation de façon nécessaire et suffisante pour créer de la valeur. On le reformule souvent comme "écrire la spécification suivante". En gros, votre prochain test est votre prochaine spécification sur la façon dont le logiciel devrait se comporter... et parce que vous ne l'avez pas encore fait, le logiciel va échouer... mais vous n'êtes pas là pour écrire un test qui échoue.<br/>
Ligne 57 : Ligne 59 :
La manière classique, en utilisant Cucumber et SpecFlow et tout autre outil qui utilise une syntaxe semi-structurée appelée Gherkin, c'est de documenter et de définir ces spécifications. Vous finirez par avoir ce qu'on appelle des fichiers feature.<br/>
La manière classique, en utilisant Cucumber et SpecFlow et tout autre outil qui utilise une syntaxe semi-structurée appelée Gherkin, c'est de documenter et de définir ces spécifications. Vous finirez par avoir ce qu'on appelle des fichiers feature.<br/>
<br/>
<br/>
[[Fichier:Feature-file.png|border|800px]]<br/>
[[Fichier:Feature-file.png|border|800px|link=]]<br/>
<br/>
<br/>
Les fichiers feature sont simplement des fichiers texte. Ils ont une semi-structure, il y a une syntaxe, et les mots-clés sont en bleu. L'intention est que n'importe qui de votre domaine devrait être capable de lire vos fichiers feature et de comprendre exactement quelle est l'intention du système.<br/>
Les fichiers feature sont simplement des fichiers texte. Ils ont une semi-structure, il y a une syntaxe, et les mots-clés sont en bleu. L'intention est que n'importe qui de votre domaine devrait être capable de lire vos fichiers feature et de comprendre exactement quelle est l'intention du système.<br/>
Ligne 69 : Ligne 71 :
  ''[https://lizkeogh.com/2011/06/27/atdd-vs-bdd-and-a-potted-history-of-some-related-stuff/ Sa réponse] est : ce sont des noms différents pour les mêmes choses.''
  ''[https://lizkeogh.com/2011/06/27/atdd-vs-bdd-and-a-potted-history-of-some-related-stuff/ Sa réponse] est : ce sont des noms différents pour les mêmes choses.''
<br/>
<br/>
Il n'y a pas de différence fondamentale entre eux. Ce qui les unit, c'est qu'ils ont tous besoin qu'un groupe de personnes précise comment le logiciel doit se comporter, en collaborant avant sa mise en oeuvre. C'est ce qui est important, alors c'est peut-être à cela que nous devrions réduire la définition du BDD. L'idée est de travailler à partir d'une vue extérieure, en réfléchissant à la façon dont nous voulons avancer, nous utilisons des exemples pour nous assurer que tous les membres de l'équipe comprennent ce sur quoi nous venons de nous entendre, des exemples concrets avec des données concrètes, et nous écrivons ces exemples dans un langage universel : un langage utilisant des termes dérivés du domaine métier qui sont compris, sans ambiguïté, par tout le monde dans l'équipe.<br/>
Il n'y a pas de différence fondamentale entre eux. Ce qui les unit, c'est qu'ils ont tous besoin qu'un groupe de personnes précise comment le logiciel doit se comporter, en collaborant avant son implémentation. C'est ce qui est important, alors c'est peut-être à cela que nous devrions réduire la définition du BDD. L'idée est de travailler à partir d'une vue extérieure, en réfléchissant à la façon dont nous voulons avancer, nous utilisons des exemples pour nous assurer que tous les membres de l'équipe comprennent ce sur quoi nous venons de nous entendre, des exemples concrets avec des données concrètes, et nous écrivons ces exemples dans un langage universel : un langage utilisant des termes dérivés du domaine métier qui sont compris, sans ambiguïté, par tout le monde dans l'équipe.<br/>
<br/>
<br/>
==Concevez vos tests - xDD==
==Concevez vos tests - xDD==
La sujet "xDD". De quoi s'agit-il ? La raison pour laquelle on appelle cela "Test-Driven" ou "Behaviour-Driven" ou "Acceptance Test-Driven" est que vous devez spécifier le comportement ''avant'' de mener l'implémentation. Il n'y a pas de "nous faisons une sorte de Behaviour-Driven", " nous faisons une sorte de Test-Driven", "nous écrivons les tests dans le sprint". Vous devez d'abord les écrire. C'est de cette façon que les tests pilotent, c'est comme cela que ça devient un processus de conception. C'est la spécification qui échoue, c'est le fait de la voir échouer, qui vous pousse à mener l'implémentation. C'est ce qui pousse le développeur ; c'est ce qu'il utilise pour écrire le code.<br/>
La sujet "xDD". De quoi s'agit-il ? La raison pour laquelle on appelle cela "Test-Driven" ou "Behaviour-Driven" ou "Acceptance Test-Driven" est que vous devez spécifier le comportement ''avant'' de mener l'implémentation. Il n'y a pas de "nous faisons une sorte de Behaviour-Driven", " nous faisons une sorte de Test-Driven", "nous écrivons les tests dans le sprint". Vous devez d'abord les écrire. C'est de cette façon que les tests pilotent, c'est comme cela que ça devient un processus de conception. C'est la spécification qui échoue, c'est le fait de la voir échouer, qui vous pousse à mener l'implémentation. C'est ce qui pousse le développeur ; c'est ce qu'il utilise pour écrire le code.<br/>
Ligne 88 : Ligne 91 :
Mais la question pertinente au moment de décider de la mise en oeuvre d'un test est la suivante : ''Qui'' est intéressé par la lecture de ces tests ?<br/>
Mais la question pertinente au moment de décider de la mise en oeuvre d'un test est la suivante : ''Qui'' est intéressé par la lecture de ces tests ?<br/>
<br/>
<br/>
Si vous voulez obtenir des feedbacks de votre métier/entreprise au sujet de quelque chose, si c'est un comportement qui est vraiment important pour votre produit et que votre métier/entreprise va dire "non, ça ne devrait pas fonctionner comme ça", "oui, ça devrait fonctionner comme ça", pensez vraiment à écrire ces tests d'une façon qui leur permette de lire ces tests et de dire "c'est ce que nous voulons". Cucumber, SpecFlow, les outils qui utilisent Gherkin vous permettent de le faire directement dans un langage universel. Cependant, vous n'avez toujours pas besoin de les utiliser, vous pouvez écrire de longues phrases au sein du cadre technique sur lequel vous travaillez et qui pourrait générer cette documentation lisible que vous pouvez partager avec votre entreprise. Vous pouvez le faire dans JUnit, vous pouvez le faire dans CPP Lite, vous pouvez le faire dans n'importe lequel de ces outils ; ce n'est pas un problème.<br/>
Si vous voulez obtenir des feedbacks de votre métier/entreprise au sujet de quelque chose, si c'est un comportement qui est vraiment important pour votre produit et que votre métier/entreprise va dire "non, ça ne devrait pas fonctionner comme ça", "oui, ça devrait fonctionner comme ça", pensez vraiment à écrire ces tests d'une façon qui leur permette de lire ces tests et de dire "c'est ce que nous voulons". Cucumber, SpecFlow, les outils qui utilisent Gherkin vous permettent de le faire directement dans un langage universel. Cependant, vous n'avez toujours pas besoin de les utiliser, vous pouvez écrire de longues phrases au sein du cadre technique sur lequel vous travaillez et qui pourrait générer cette documentation lisible que vous pouvez partager avec votre métier/entreprise. Vous pouvez le faire dans JUnit, vous pouvez le faire dans CPP Lite, vous pouvez le faire dans n'importe lequel de ces outils ; ce n'est pas un problème.<br/>
<br/>
<br/>
Ce que vous devez faire, c'est vous assurer que cela s'exprime d'une manière qui vous permette d'obtenir les feedbacks des personnes intéressées, les gens qui ont un enjeu.<br/>
Ce que vous devez faire, c'est vous assurer que cela s'exprime d'une manière qui vous permette d'obtenir les feedbacks des personnes intéressées, les gens qui ont un enjeu.<br/>
Ligne 99 : Ligne 102 :
|alignment=left
|alignment=left
}}
}}
<br/>