33
RÉALISER UNE BONNE RECETTE AU CONCOMBRE #bdd [email protected] Shoun ICHIDA @ishoun #AgileFrance2016

Réaliser une bonne recette au concombre - Agile France 2016

Embed Size (px)

Citation preview

Page 1: Réaliser une bonne recette au concombre  - Agile France 2016

RÉALISER UNE BONNE RECETTE AU CONCOMBRE

#bdd

[email protected] ICHIDA

@ishoun

#AgileFrance2016

Page 2: Réaliser une bonne recette au concombre  - Agile France 2016

BEHAVIOR DRIVEN DEVELOPMENT?

Page 3: Réaliser une bonne recette au concombre  - Agile France 2016

QU’EST-CE QUE C’EST ?

➡ Une méthodologie de développement

3

Page 4: Réaliser une bonne recette au concombre  - Agile France 2016

QU’APPORTE-T-ELLE ?

➡ Une meilleure compréhension du besoin

4

BESOIN CRITÈRES D’ACCEPTATION

TESTS D’ACCEPTATIONDÉVELOPPEMENT

Equipe métier

Equipe projet

Page 5: Réaliser une bonne recette au concombre  - Agile France 2016

QU’APPORTE-T-ELLE ?

➡ Un complément au Test Driven Development (TDD)

5

TEST QUI RÉUSSITTESTQUI ÉCHOUE

Refactoring

TDDTest

d’Acceptation

Page 6: Réaliser une bonne recette au concombre  - Agile France 2016

SOLUTIONS

Page 7: Réaliser une bonne recette au concombre  - Agile France 2016

CAS PRATIQUE

En tant que cuisinier, je souhaite noter une liste de recette La liste des recettes disponibles est représentée sur une page Lorsque je sélectionne une recette, je peux lui attribuer une note comprise entre 0 et 10

Page 8: Réaliser une bonne recette au concombre  - Agile France 2016

LE GHERKIN

8

Given

When

Then

Scenario:List all existing recipes

"shoun" is authenticated

He requests a list of all recipes

He should have a list of recipes

Feature: List recipes

Page 9: Réaliser une bonne recette au concombre  - Agile France 2016

He should be able to select oneAnd

LE GHERKIN

8

Given

When

Then

Scenario:List all existing recipes

"shoun" is authenticated

He requests a list of all recipes

He should have a list of recipes

And There is an existing list of recipes

Feature: List recipes

Page 10: Réaliser une bonne recette au concombre  - Agile France 2016

public class RecipeStepdefs { @Given("^\"([^\"]*)\" is authenticated$") public void userIsAuthenticated(String user) throws Throwable { // Your test goes here }

CUCUMBER-JVM

9

public class RecipeStepdefs { @Given("^\"([^\"]*)\" is authenticated$") public void userIsAuthenticated(String user) throws Throwable { // Your test goes here } @When("^He requests a list of all recipes$") public void heRequestsAListOfAllRecipes() throws Throwable { // Your test goes here } @Then("^He should have a list of recipes$") public void heShouldHaveAListOfRecipes() throws Throwable { // Your test goes here }}

Page 11: Réaliser une bonne recette au concombre  - Agile France 2016

public class RecipeStepdefs { @Given("^\"([^\"]*)\" is authenticated$") public void userIsAuthenticated(String user) throws Throwable { // Your test goes here }

CUCUMBER-JVM

9

Expression régulièrepublic class RecipeStepdefs {

@Given("^\"([^\"]*)\" is authenticated$") public void userIsAuthenticated(String user) throws Throwable { // Your test goes here } @When("^He requests a list of all recipes$") public void heRequestsAListOfAllRecipes() throws Throwable { // Your test goes here } @Then("^He should have a list of recipes$") public void heShouldHaveAListOfRecipes() throws Throwable { // Your test goes here }}

Page 12: Réaliser une bonne recette au concombre  - Agile France 2016

public class RecipeStepdefs { @Given("^\"([^\"]*)\" is authenticated$") public void userIsAuthenticated(String user) throws Throwable { // Your test goes here }

CUCUMBER-JVM

9

Expression régulière

Given "shoun" is authenticated

public class RecipeStepdefs { @Given("^\"([^\"]*)\" is authenticated$") public void userIsAuthenticated(String user) throws Throwable { // Your test goes here } @When("^He requests a list of all recipes$") public void heRequestsAListOfAllRecipes() throws Throwable { // Your test goes here } @Then("^He should have a list of recipes$") public void heShouldHaveAListOfRecipes() throws Throwable { // Your test goes here }}

Page 13: Réaliser une bonne recette au concombre  - Agile France 2016

CUCUMBER-JVM - JAVA 8

10

public class RecipeJava8Stepdefs implements En { public RecipeJava8Stepdefs() { Given("^\"([^\"]*)\" is authenticated$", () -> { // Your test goes here }); When("^He requests a list of all recipes$", () -> { // Your test goes here }); Then("^He should have of list of recipes$", () -> { // Your test goes here }); }}

Page 14: Réaliser une bonne recette au concombre  - Agile France 2016

I18N ?

Page 15: Réaliser une bonne recette au concombre  - Agile France 2016

# language: fr

12

# language: frFonctionnalité: noter une recette En tant que cuisinier Je souhaite noter mes recettes Afin de les évaluerScénario: Je peux noter la recette "Salade de concombre" Etant donné que "Shoun" est authentifié Et que les recettes suivantes existent: | Name | Description | | Salade de concombre | Salade à base de concombre | | Salade de crudité | Mélange de salade, tomate et crevettes | Lorsqu' il attribue la note de 8 la recette "Salade de concombre" Alors la recette "Salade de concombre" devrait avoir la note de 8

Page 16: Réaliser une bonne recette au concombre  - Agile France 2016

IMPLÉMENTATION

13

@Etantdonné("^que \"([^\"]*)\" est authentifié$") public void queEstAuthentifié() throws Throwable { // TODO } @Et("^que les recettes suivantes existent:$") public void queLesRecettesSuivantesExistent(List<Recipe> recipes) throws Throwable { // TODO} @Lorsqu("^il attribue la note de (\\d+) la recette \"([^\"]*)\"$") public void ilAttribueLaNoteDeLaRecette(int mark, String recipe) throws Throwable { // TODO} @Alors("^la recette \"([^\"]*)\" devrait avoir la note de (\\d+)$") public void laRecetteDevraitAvoirLaNote(String recipe, int mark) throws Throwable { // TODO}

Page 17: Réaliser une bonne recette au concombre  - Agile France 2016

Retour d’expérience

Page 18: Réaliser une bonne recette au concombre  - Agile France 2016

Mais le BDD, ça fonctionne vraiment ?

Page 19: Réaliser une bonne recette au concombre  - Agile France 2016

Projet existant Java & AngularJS 4 Développeurs 1 Business Analyst 1 Scrum Master

24 Sprints 40% de couverture de tests Client insatisfait Produit jamais utilisé en production 17 025 lignes de code, 285 classes, 1196 fonctions

Contexte

16

Page 20: Réaliser une bonne recette au concombre  - Agile France 2016

ContexteÉquipe hétérogène

17

Je connais le produit…

J’ai lu des trucs sur le BDD

C’est vrai? Moi pas du tout..

J’ai un peu d’expérience en

BDD

Mais qu’est-ce que c’est que cette

@&%#$ ??!

… et je suis un super Scrum

Master

Page 21: Réaliser une bonne recette au concombre  - Agile France 2016

DéroulementCérémonie BDD

18

Que pensez-vous

de…Je pense que cette fonctionnalité…

Pourquoi ne faisons-nous

pas…

Si on parlait de…

Page 22: Réaliser une bonne recette au concombre  - Agile France 2016

Meilleure compréhension du besoin Moins de retours client Meilleure couverture des tests Meilleure implication de l’équipe de développement Moins de bugs Meilleure productivité

Bénéfices attendus

19

Page 23: Réaliser une bonne recette au concombre  - Agile France 2016

Bénéfices attendus

19

Meilleure compréhension du besoin Moins de retours client Meilleure couverture des tests Meilleure implication de l’équipe de développement Moins de bugs Meilleure productivité

Page 24: Réaliser une bonne recette au concombre  - Agile France 2016

Cumulative Flow diagram

20

Page 25: Réaliser une bonne recette au concombre  - Agile France 2016

Mesure de la qualité du code (1/2)

21

Page 26: Réaliser une bonne recette au concombre  - Agile France 2016

Mesure de la qualité du code (2/2)

22

Page 27: Réaliser une bonne recette au concombre  - Agile France 2016

Meilleure mais… Écriture des Gherkin Sous-évaluation des tâches Refactoring coûteux sur les anciennes fonctionnalités Coupler BDD et TDD Réticence à l’écriture de scénarios

Et la productivité dans tout ça ?

23

Page 28: Réaliser une bonne recette au concombre  - Agile France 2016

Retour d’expérienceTous les membres de l’équipe doivent s’impliquer Le Product Owner / Business Analyst doit être rigoureux Le temps passé sur les scénarios est utile mais coûteux Si les besoins évoluent le risque de régression est maîtrisé Une nette amélioration qualitative a été remarquée

Page 29: Réaliser une bonne recette au concombre  - Agile France 2016

JGiven ATDD

Alternatives à cucumber ?

25

Page 30: Réaliser une bonne recette au concombre  - Agile France 2016

Pour aller plus loin…

Page 31: Réaliser une bonne recette au concombre  - Agile France 2016

RÉFÉRENCES

http://dannorth.net/introducing-bdd/ http://blog.viseo-bt.com/as-viseo-we-went-to-cukeup-so-we-can-improve-our-bdd/ https://cucumber.io https://github.com/sichida/BDD-examples/tree/agile_france/cucumber-example https://github.com/cucumber/cucumber/wiki/Spoken-languages http://fr.slideshare.net/ichidashoun/

Page 32: Réaliser une bonne recette au concombre  - Agile France 2016

Retrouvez-moià Culture Kanban le 29 juin à Agile Laval le 30 juin sur le blog Viseo http://blog.viseo-bt.com/author/s-ichida/ sur Twitter @ishoun

Page 33: Réaliser une bonne recette au concombre  - Agile France 2016

Avez-vous des questions ?

?