[Agile Testing Day] Behavior Driven Development (BDD)
date post
12-Apr-2017Category
Technology
view
234download
0
Embed Size (px)
Transcript of [Agile Testing Day] Behavior Driven Development (BDD)
{{ Nom du cercle }}
Behavior Driven DevelopmentAgile testing Day - Janvier 2016
Who am i ?
Consultant .NET/WEB@Georges_Damienwww.georgesdamien.com
Georges DAMIEN
Pourquoi le BDD ?
Ce quon entend souvent en entrepriseTrop de politiques internes (processus lourds)Les besoins ne sont pas clairsLe client ne sait pas ce quil veutOn fait beaucoup de runions mais on discute dans le videLe client (ou PO) nest jamais disponibleLa doc nest pas jourLa doc nest pas claire
a vous rappelle quelque chose ?
Et a ?
Je veux un IPhoneMais non ! Un tlphone Iphone de la marque AppleOui mais non ! Je veux le dernier modle, la version 6
Ce quon voit trs souvent
Le dveloppeur
Le client
Le testeur
Je veux a !
Le POLe client dit quil veut a !
Voici les specs !
Voil lboulot !
Ces good ! On peut pousser en PROD
Ce que a donne comme rsultat
Le dveloppeur
Le client
Le testeur
Je veux a !
Le POLe client dit quil veut a !
Voici les specs !
Voil lboulot !
Cest good ! On peut pousser en PROD
Le besoin initialCe qui a t fait et qui a de la valeur (correspondant au besoin, test, valid).
8
Pourquoi le BDD ?National Institute of Standards and Technology estime environ 70% le pourcentage derreurs introduites par projet lors de la phase dtude de besoins.Rponse au TDD qui est mal compris
Ce que certains pensent du BDDCest juste une truc la modeCest un truc pour faire des tests (automatiss)Cest juste du Gerkins (Given When then)a resemble au TDD
La philosophie du BDD
BDD : objectifsBuilding de software rightBuilding de right softwareSoftware that matters
De lide limplmentation
Je veux a !Voil a !Comment on fait a ?Comment on fait a bien ?Comment on fait bien a ?Avec du BDD par exemple
Georges Damien (GD) - Quelques mots
BDD in action
Le besoin mtier
On commence par dfinir lobjectif mtier (business)Je veux proposer aux clients une assurance maison par dfaut
Les featuresOn rpond ensuite la question :Quelles sont les lments (features) qui vont me permettre de rpondre cet objectif ?
Tu veux donc une page web?Oui.Tu veux que ton offre dassurance saffiche ds la premire page ?Oui, faut que ce soit simpleOk, mais on affiche quoi ? Le prix de lassurance ? des images ?Le prix hors taxe et le prix TTC, dailleurs il faudrait que se soit automatiquement appliqu si on change de prixOk, il y aura des options que lutilisateur pourra choisir ?Oui mais dans un premier temps pas doption, il faut que je dmarre rapidement mon activit.Ok, a parait clair. Il faudra nous donner un exemple avec les tarifs, a nous aiderait.
Discussion autours des featuresOn discute des fonctionnalits partir dexemples concrets.On discute tous ensemble
Ubiquitous language (langage omniprsent)En tant que Je souhaite Pour
Utilisation dexemplesFeature: StringToSimpleNameDans le but d'uniformiser les noms de personnesJe voudrais que les noms de famille commencent par des majusculeset le reste des lettres en minusculesScenario Outline: Formater les nomsGiven Je saisi un When j'appelle la methode de formatageThen Mon devrait me retourner un nom commencant par une majusculeExamples:| nom | resultat || duPont | Dupont || Dupuis | Dupuis |
Comprhension partage
The three amigos
BDD : les phases
BDD : Feature
BDD : scnarii
BDD : Step definition [Binding] public class DisplayInsurancesSteps { [When(@"I open insurance page")] public void WhenIOpenInsurancePage() {} [Then(@"the result should show the home insurance")] public void ThenTheResultShouldShowTheHomeInsurance() {} [Then(@"the base price is (.*)")] public void ThenTheBasePriceIs(float basePriceExpected) {} [Then(@"the sales price is (.*)")] public void ThenTheSalesPriceIs(float salesPriceExpected) {} }
BDD : unit test (TDD) [When(@"I open insurance page")] public void WhenIOpenInsurancePage() { var homeController = new HomeController(); this.actionResult = homeController.Index() as ViewResult; } [Then(@"the result should show the home insurance")] public void ThenTheResultShouldShowTheHomeInsurance() { var viewResult = this.actionResult as ViewResult; Assert.IsInstanceOf(viewResult.Model); this.insurance = viewResult.Model as InsuranceViewModel; }
BDD : unit test (TDD) [Then(@"the base price is (.*)")] public void ThenTheBasePriceIs(float basePriceExpected) { Assert.AreEqual(basePriceExpected, this.insurance.BasePrice); } [Then(@"the sales price is (.*)")] public void ThenTheSalesPriceIs(float salesPriceExpected) { Assert.AreEqual(salesPriceExpected, this.insurance.SalesPrice); }
BDD : codage
BDD : unit test result
BDD & agilit
Les 4 valeurs de lagilitLes individus et leurs interactionsplus que les processus et les outils.Du logiciel qui fonctionneplus quune documentation exhaustive.La collaboration avec les clientsplus que la ngociation contractuelle.Ladaptation au changementplus que le suivi dun plan.
BDD
BDD : avantages
Le bon rsultatOn dveloppe le bon produitOn le dveloppe de la meilleur faon
Tests automatissLes critres dacceptances sont automatissLes tests sont automatiss
Documentation vivante et jourLa documentation est jourLes scenarii/features refltent le besoin rel du clientLe code correspondant aux tests qui drivent des features implmentes
36
BDD : inconvnients
Difficults/challengeFaire participer tout le mondeMontrer aux chefs que a marcheFaire adopter la pratique par les participantsFaire accepter de changer de mthode de travailFaire preuve dempathiePratique teste mais pas adopte
DmoDmo
https://github.com/Djdodjes/InsuranceDream
Merci de votre attentionQuestions ?
@Georges_Damien