{"id":375,"date":"2015-09-17T14:47:39","date_gmt":"2015-09-17T13:47:39","guid":{"rendered":"http:\/\/lalloue.fr\/blog\/?p=375"},"modified":"2015-09-17T14:47:39","modified_gmt":"2015-09-17T13:47:39","slug":"les-methodologies-de-tests-appliquees-a-votre-projet-tdd-bdd-atdd","status":"publish","type":"post","link":"http:\/\/lalloue.fr\/blog\/les-methodologies-de-tests-appliquees-a-votre-projet-tdd-bdd-atdd\/","title":{"rendered":"Les m\u00e9thodologies de tests appliqu\u00e9es \u00e0 votre projet : TDD, BDD, ATDD"},"content":{"rendered":"<p><a href=\"http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2015\/09\/apps_unified_functional_testing_882x235_tcm113_1641269_tcm113_1641255_tcm113-1641269.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-376 size-medium\" src=\"http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2015\/09\/apps_unified_functional_testing_882x235_tcm113_1641269_tcm113_1641255_tcm113-1641269-300x80.jpg\" alt=\"apps_unified_functional_testing_882x235_tcm113_1641269_tcm113_1641255_tcm113-1641269\" width=\"300\" height=\"80\" srcset=\"http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2015\/09\/apps_unified_functional_testing_882x235_tcm113_1641269_tcm113_1641255_tcm113-1641269-300x80.jpg 300w, http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2015\/09\/apps_unified_functional_testing_882x235_tcm113_1641269_tcm113_1641255_tcm113-1641269.jpg 882w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Avant de commencer un nouveau projet il est bon de se poser la question suivante\u00a0:<br \/>\n<strong>\u00ab\u00a0Comment je souhaite mettre en place les tests dans mon application\u00a0?\u00a0\u00bb<\/strong><\/p>\n<p>Cette question doit obligatoirement se poser d\u00e8s le d\u00e9but du projet pour pouvoir en b\u00e9n\u00e9ficier pleinement mais surtout pour ne pas perdre de temps, la mise en place des tests pendant le d\u00e9veloppement du projet pouvant \u00eatre tr\u00e8s chronophage pour les adapter au code d\u00e9j\u00e0 existant.<\/p>\n<p>Pour normaliser la mise en place de ces tests, plusieurs m\u00e9thodes ont \u00e9t\u00e9 cr\u00e9es et sont maintenant devenues des standards. Parmi celles-ci,\u00a0 3 m\u00e9thodologies ressortent\u00a0: TDD, BDD et ATDD.<\/p>\n<p><!--more--><\/p>\n<h3>Test Driven Development (TDD)<\/h3>\n<p>Le <strong>\u201ctest driven development\u201d<\/strong>, ou en fran\u00e7ais, d\u00e9veloppement pilot\u00e9 par les tests est une technique de d\u00e9veloppement logiciel qui pr\u00e9conise les tests unitaires avant d\u2019\u00e9crire le code source du projet.<\/p>\n<p>Cette m\u00e9thodologie propose de suivre les r\u00e8gles suivantes\u00a0:<\/p>\n<ul>\n<li>Cr\u00e9er <strong>un seul test unitaire<\/strong> d\u00e9crivant un aspect du programme<\/li>\n<li>S\u2019assurer, en l\u2019ex\u00e9cutant, que ce <strong>test \u00e9choue<\/strong> pour les bonnes raisons<\/li>\n<li>Ecrire <strong>juste assez<\/strong> de code, le plus simple possible, pour que ce test passe<\/li>\n<li><strong>Remanier<\/strong> le code autant que n\u00e9cessaire pour se conformer aux crit\u00e8res de simplicit\u00e9<\/li>\n<li>Recommencer, en <strong>accumulant les tests<\/strong> au fur et \u00e0 mesure<\/li>\n<\/ul>\n<p>Cette pratique peut se sch\u00e9matiser de la fa\u00e7on suivante\u00a0:<\/p>\n<p><a href=\"http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2015\/09\/TDD.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-378\" src=\"http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2015\/09\/TDD.png\" alt=\"TDD\" width=\"500\" height=\"290\" srcset=\"http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2015\/09\/TDD.png 667w, http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2015\/09\/TDD-300x174.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p>La mise en place de la m\u00e9thode TDD offre de nombreux avantages au sein du d\u00e9veloppement d\u2019un logiciel\u00a0:<\/p>\n<ul>\n<li>Les tests unitaires sont r\u00e9ellement \u00e9crits\n<ul>\n<li>En g\u00e9n\u00e9ral, quand les tests unitaires sont \u00e9cris \u00e0 la fin d\u2019un d\u00e9veloppement, ils sont souvent remis \u00e0 plus tard (ou oubli\u00e9s)<\/li>\n<\/ul>\n<\/li>\n<li>Clarification des d\u00e9tails de l\u2019interface et du comportement\n<ul>\n<li>En se penchant sur les tests \u00e0 impl\u00e9menter en premier, cela oblige le d\u00e9veloppeur \u00e0 r\u00e9fl\u00e9chir \u00e0 la m\u00e9thode qu\u2019il mettra en place par la suite et \u00e0 son impl\u00e9mentation.<\/li>\n<\/ul>\n<\/li>\n<li>V\u00e9rification d\u00e9montrable, r\u00e9p\u00e9table et automatis\u00e9\n<ul>\n<li>Le fait de disposer d\u2019un grand nombre de tests permet de s\u2019assurer de la solidit\u00e9 et garantie du code.<\/li>\n<\/ul>\n<\/li>\n<li>Non pr\u00e9sence de r\u00e9gression\n<ul>\n<li>La modification d\u2019une m\u00e9thode existante lancera automatiquement le test unitaire associ\u00e9 et permettra donc ainsi de s\u2019assurer de la non r\u00e9gression de cette-ci.<\/li>\n<\/ul>\n<\/li>\n<li>Un surcout mod\u00e9r\u00e9 mais compens\u00e9\n<ul>\n<li>La mise en place de ces tests implique un surcout mod\u00e9r\u00e9 du d\u00e9veloppement initial. Mais celui-ci est en g\u00e9n\u00e9ral rattrap\u00e9 par la r\u00e9duction significative du nombre de d\u00e9fauts.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3>Behavior Driven Development (BDD)<\/h3>\n<p><strong>\u201cBehavior driven development\u201d<\/strong> ou BDD est une m\u00e9thode agile qui encourage la collaboration entre les d\u00e9veloppeurs, responsables qualit\u00e9s et intervenants non-techniques participant \u00e0 un projet logiciel.<\/p>\n<p>Cette technique va permettre de <strong>lier<\/strong>, dans un projet de d\u00e9veloppement, des <strong>demandes de l\u2019\u00e9quipe fonctionnelle<\/strong>.<\/p>\n<p>Cette m\u00e9thodologie a \u00e9t\u00e9 con\u00e7ue pour palier \u00e0 la probl\u00e9matique suivante\u00a0:<\/p>\n<p><span style=\"color: #2db3e7;\"><em>\u00ab<br \/>\n<\/em><\/span><span style=\"color: #2db3e7;\"><em>Un projet de d\u00e9veloppement passe d\u2019abord par une phase de sp\u00e9cifications r\u00e9dig\u00e9es pendant des semaines\/mois\/ann\u00e9es par des experts du m\u00e9tier et\/ou consultants fonctionnels.<br \/>\n<\/em><em>Ces sp\u00e9cifications sont ensuite transmises \u00e0 l\u2019\u00e9quipe de d\u00e9veloppement.<br \/>\n<\/em><em>Cette interaction passe en grande partie par une transmission de documents, une lecture du d\u00e9veloppeur et donc n\u00e9cessairement une partie <strong>d\u2019interpr\u00e9tation<\/strong>.<br \/>\n<\/em><em>Cette interpr\u00e9tation conduit souvent \u00e0 un d\u00e9veloppement inadapt\u00e9 \u00e0 la demande, voir inutile.<br \/>\n\u00bb<\/em><\/span><\/p>\n<p>Pour solutionner cette probl\u00e9matique, la m\u00e9thode BDD pr\u00e9conise de r\u00e9unir dans un m\u00eame document des exigences (User Stories) exprim\u00e9es selon le formalisme <strong>\u00ab\u00a0r\u00f4le-fonction-b\u00e9n\u00e9fice\u00a0\u00bb<\/strong>, et des sc\u00e9narios ou exemples exprim\u00e9s selon le canevas <strong>\u00ab\u00a0given-when-then\u00a0\u00bb<\/strong>.<\/p>\n<p>La r\u00e9daction de ce document va permettre \u00e0 l\u2019expert m\u00e9tier, au consultant fonctionnel et au d\u00e9veloppeur de se comprendre, via un langage naturel :<\/p>\n<ul>\n<li>On utilise des phrases, dans la langue du projet.<\/li>\n<li>On parle de besoin et non de solution, dans un langage non technique.<\/li>\n<li>On utilise des termes provenant du langage omnipr\u00e9sent partag\u00e9 par tous<\/li>\n<\/ul>\n<p>La finalit\u00e9 du point de vue logiciel est multiple :<\/p>\n<ul>\n<li>Le code cr\u00e9\u00e9 est \u00e0 l\u2019image de la demande de l\u2019utilisateur.<\/li>\n<li>La fonctionnalit\u00e9 est \u00e0 l\u2019image de la demande de l\u2019utilisateur (On ne code que la fonctionnalit\u00e9 et rien de plus).<\/li>\n<li>L\u2019implication et la r\u00e9flexion des experts m\u00e9tier avec les d\u00e9veloppeurs permet de d\u00e9bloquer un grand nombre de probl\u00e8me non couvert et assurent une grande qualit\u00e9 de production.<\/li>\n<\/ul>\n<p>BDD est, dans ce sens, fortement li\u00e9 au fonctionnement de TDD\u00a0 ou l\u2019on ne code que le minimum pour que le code de production fonctionne (Le refactoring permet d\u2019\u00eatre clair et d\u2019obtenir le meilleur design,\u00a0 il n\u2019y a pas de redondance, \u2026). <strong>Le BDD est la couche \u201cfonctionnelle\u201d, allant de pair avec le TDD.<\/strong><\/p>\n<p>Pour plus d\u2019informations sur la m\u00e9thode BDD\u00a0: <a href=\"http:\/\/coding-in.net\/tout-savoir-ou-presque-sur-le-behaviour-driven-development-bdd-2\/\">http:\/\/coding-in.net\/tout-savoir-ou-presque-sur-le-behaviour-driven-development-bdd-2\/<\/a><\/p>\n<p>&nbsp;<\/p>\n<h3>Acceptance Test-Driven Development (ATDD)<\/h3>\n<p>L\u2019ATDD correspond \u00e0 la contraction de <strong>\u201cAcceptance Test Driven Development\u201d<\/strong>, ou en fran\u00e7ais, Pilotage par les tests m\u00e9tiers.<\/p>\n<p>Cette m\u00e9thode est une approche de d\u00e9veloppement logiciel it\u00e9rative et incr\u00e9mentale bas\u00e9e sur un principe fondamental\u00a0: <strong>les tests sont au c\u0153ur du projet<\/strong>.<\/p>\n<p>Cette m\u00e9thodologie propose de suivre les r\u00e8gles suivantes\u00a0:<\/p>\n<ul>\n<li><strong>Les tests servent aux sp\u00e9cifications<\/strong> g\u00e9n\u00e9rales du logiciel<\/li>\n<li>Les tests sont donc cr\u00e9\u00e9s et automatis\u00e9s en <strong>amont<\/strong> du d\u00e9veloppement<\/li>\n<li>Le d\u00e9veloppement est ensuite <strong>r\u00e9alis\u00e9 en fonction des tests<\/strong><\/li>\n<li>Les tests sont <strong>ex\u00e9cut\u00e9s automatiquement<\/strong> et permettent de d\u00e9finir lorsque le code est termin\u00e9 (lorsque tous les tests sont au vert).<\/li>\n<\/ul>\n<p>C\u2019est un proc\u00e9d\u00e9 <strong>it\u00e9ratif<\/strong> pour impulser de la r\u00e9activit\u00e9 et du dynamisme aux \u00e9quipes (comme initi\u00e9 dans l\u2019Agile) et <strong>incr\u00e9mental<\/strong> car il y a une capitalisation sur les tests cr\u00e9\u00e9s dans les it\u00e9rations (les tests automatis\u00e9s de l\u2019it\u00e9ration 1 serviront aux tests de non r\u00e9gression des it\u00e9rations suivantes).<\/p>\n<p>Cette pratique peut se sch\u00e9matiser de la fa\u00e7on suivante\u00a0:<\/p>\n<p><a href=\"http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2015\/09\/ATDD.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-379\" src=\"http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2015\/09\/ATDD.png\" alt=\"ATDD\" width=\"800\" height=\"246\" srcset=\"http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2015\/09\/ATDD.png 1039w, http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2015\/09\/ATDD-300x92.png 300w, http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2015\/09\/ATDD-1024x314.png 1024w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>Plus d\u2019informations sur la m\u00e9thodologie ATDD dans un projet JavaScript\u00a0: <a href=\"http:\/\/www.codeproject.com\/Articles\/659570\/Acceptance-Test-Driven-Development-for-JavaScript\">http:\/\/www.codeproject.com\/Articles\/659570\/Acceptance-Test-Driven-Development-for-JavaScript<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Avant de commencer un nouveau projet il est bon de se poser la question suivante\u00a0: \u00ab\u00a0Comment je souhaite mettre en place les tests dans mon application\u00a0?\u00a0\u00bb Cette question doit obligatoirement se poser d\u00e8s le d\u00e9but du projet pour pouvoir en b\u00e9n\u00e9ficier pleinement mais surtout pour ne pas perdre de temps, la mise en place des &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/lalloue.fr\/blog\/les-methodologies-de-tests-appliquees-a-votre-projet-tdd-bdd-atdd\/\" class=\"more-link\">Continuer la lecture <span class=\"screen-reader-text\"> \u00ab\u00a0Les m\u00e9thodologies de tests appliqu\u00e9es \u00e0 votre projet : TDD, BDD, ATDD\u00a0\u00bb<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[12,40,41],"tags":[44,43,42],"_links":{"self":[{"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/posts\/375"}],"collection":[{"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/comments?post=375"}],"version-history":[{"count":7,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/posts\/375\/revisions"}],"predecessor-version":[{"id":385,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/posts\/375\/revisions\/385"}],"wp:attachment":[{"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/media?parent=375"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/categories?post=375"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/tags?post=375"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}