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

Réaliser une bonne recette au concombre - Agile Testing Paris

Embed Size (px)

Citation preview

Page 1: Réaliser une bonne recette au concombre - Agile Testing Paris

RÉALISER UNE BONNE RECETTE AU CONCOMBRE

#bdd

[email protected] ICHIDA

@ishoun

Page 2: Réaliser une bonne recette au concombre - Agile Testing Paris

BEHAVIOR DRIVEN DEVELOPMENT?

Page 3: Réaliser une bonne recette au concombre - Agile Testing Paris

QU’EST-CE QUE C’EST ?

➡ Une méthodologie de développement

3

Page 4: Réaliser une bonne recette au concombre - Agile Testing Paris

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 Testing Paris

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 Testing Paris

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 7: Réaliser une bonne recette au concombre - Agile Testing Paris

He should be able to select oneAnd

LE GHERKIN

7

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 8: Réaliser une bonne recette au concombre - Agile Testing Paris

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

CUCUMBER-JVM

8

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 9: Réaliser une bonne recette au concombre - Agile Testing Paris

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

CUCUMBER-JVM

8

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 10: Réaliser une bonne recette au concombre - Agile Testing Paris

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

CUCUMBER-JVM

8

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 11: Réaliser une bonne recette au concombre - Agile Testing Paris

CUCUMBER-JVM - JAVA 8

9

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 12: Réaliser une bonne recette au concombre - Agile Testing Paris

I18N ?

Page 13: Réaliser une bonne recette au concombre - Agile Testing Paris

# language: fr

11

# 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 14: Réaliser une bonne recette au concombre - Agile Testing Paris

IMPLÉMENTATION

12

@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 15: Réaliser une bonne recette au concombre - Agile Testing Paris

SOLUTIONS

Page 16: Réaliser une bonne recette au concombre - Agile Testing Paris

Retour d’expérience

Page 17: Réaliser une bonne recette au concombre - Agile Testing Paris

Mais le BDD, ça fonctionne vraiment ?

Page 18: Réaliser une bonne recette au concombre - Agile Testing Paris

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

Contexte

16

Page 19: Réaliser une bonne recette au concombre - Agile Testing Paris

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 20: Réaliser une bonne recette au concombre - Agile Testing Paris

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 21: Réaliser une bonne recette au concombre - Agile Testing Paris

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 22: Réaliser une bonne recette au concombre - Agile Testing Paris

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 23: Réaliser une bonne recette au concombre - Agile Testing Paris

Quelles en sont les causes ? É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

Pas d’amélioration de la productivité

20

Page 24: Réaliser une bonne recette au concombre - Agile Testing Paris

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 25: Réaliser une bonne recette au concombre - Agile Testing Paris

JGiven ATDD

Alternatives à cucumber ?

22

Page 26: Réaliser une bonne recette au concombre - Agile Testing Paris

Pour aller plus loin…

Page 27: Réaliser une bonne recette au concombre - Agile Testing Paris

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

Page 28: Réaliser une bonne recette au concombre - Agile Testing Paris

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

Page 29: Réaliser une bonne recette au concombre - Agile Testing Paris

Avez-vous des questions ?

?