1
Spécification par l'exemple
par l'exemple :
le BDD démystifié
gerald.reinhart@ .com
2
● Introduction
● Constats
● Le BDD, c'est quoi ?
● Exemple complet sur une Bibliothèque
● Conclusion
Spécification par l'exemple
par l'exemple :
le BDD démystifié
gerald.reinhart@ .com
3
But : donner envie d'essayer
ou de réessayer le BDD
Introduction
gerald.reinhart@ .com
4
Un PO lors de la démo du produit
après une itération
Constats
gerald.reinhart@ .com
5
Les tests fonctionnels qui clignotent
Les tests fonctionnels non exhaustifs
Constats
gerald.reinhart@ .com
6
La documentation fonctionnelle
après de nombreuses itérations
et réajustements du besoin
Constats
gerald.reinhart@ .com
7
● Spécification par l'exemple
● Tests fonctionnels
● Documentation exécutable
BDD, c'est quoi ?
gerald.reinhart@ .com
Behavior Driven Development
8
Spécification par l'exemple
  Scenario: les suggestions proposées sont populaires, disponibles
            et adaptées à l'âge de l utilisateur
             
    Etant donné l'utilisateur "Tim"
    Et il a "4" ans
    Et les catégories populaires pour cet âge sont
      | categorieId | nom                    |
      | cat1        | Coloriage              |
      | cat2        | Comptines              |
    Et les livres disponibles pour les catégories "cat1,cat2" sont
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      | lv21    | Comptines de la ferme | cat2        |
    Quand on demande "2" suggestions
    Alors les suggestions sont
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      | lv21    | Comptines de la ferme | cat2        |
BDD, c'est quoi ?
gerald.reinhart@ .com
9
Tests fonctionnels
BDD, c'est quoi ?
gerald.reinhart@ .com
10
Tests fonctionnels
BDD, c'est quoi ?
gerald.reinhart@ .com
11
Documentation exécutable
BDD, c'est quoi ?
gerald.reinhart@ .com
Bibliothèque User Story à implémenter
gerald.reinhart@ .com
DEVPO
Catégorie
Les catégories des
livres, catégories
populaires par âge
Suggestion
Fournit des
suggestions de livres
Utilisateur
Base utilisateurs,
âge, livres lus...
Recherche
Fournit des livres,
recherche textuelle,
recherche multi-critères
(catégorie, popularité, disponibilité…)
Réservation
Réservation de livres,
Livres disponibles
Utilisateur
Bibliothèque User Story à implémenter
gerald.reinhart@ .com
En tant qu'utilisateur de la bibliothèque,
je souhaite des suggestions de livres
afin de faire des découvertes
En tant qu'utilisateur de la bibliothèque,
je souhaite des suggestions de livres
afin de faire des découvertes
Critères d'acceptance
- Livre non lu par l'utilisateur
- Livre disponible
Critères d'acceptance
- Livre non lu par l'utilisateur
- Livre disponible
Bibliothèque User Story à implémenter
gerald.reinhart@ .com
POPO
Les suggestions doivent
être adaptées à l'âge de
l'utilisateur
Pour une meilleur
découverte, les livres
doivent venir de
différentes catégories
En tant qu'utilisateur de la bibliothèque, Je souhaite des suggestions de livres Afin de faire des découvertesEn tant qu'utilisateur de la bibliothèque, Je souhaite des suggestions de livres Afin de faire des découvertes
User Story
Bibliothèque User Story à implémenter
gerald.reinhart@ .com
DEV
Focalisé sur comment
récupérer les livres, oublie
que le livre doit être non lu
par l'utilisateur
Manière la plus simple :
faire une recherche sur
la popularité des livres
En tant qu'utilisateur de la bibliothèque, je souhaite des suggestions de livres afin de faire des découvertesEn tant qu'utilisateur de la bibliothèque, je souhaite des suggestions de livres afin de faire des découvertes
User Story
Bibliothèque User Story à implémenter
gerald.reinhart@ .com
POPO
  Scenario: fournir des suggestions de livres
    Etant donné un utilisateur
    Quand on demande suggestions
    Alors les suggestions proposées sont populaires, disponibles 
          et adaptées à l âge de l utilisateur 
    Et    les suggestions proviennent de catégories différentes
Manque : des exemples !
Bibliothèque Écrire les scénarios
gerald.reinhart@ .com
  Scenario: fournir des suggestions de livres
             
    Etant donné l'utilisateur depuis le web service 
               http://my.library.com/user/user1
      | clé    | valeur |
      | userId | user1  |
      | âge    | 4      |
    Et les livres depuis le web service 
          http://my.library.com/search?popular=true&available=true
      | livreId | titre    | categorieId |
      | lv11    | livre11  | cat1        |
      | lv21    | livre21  | cat2        |
      | lv31    | livre31  | cat3        |
    Quand on appelle 
         http://localhost:9998/suggestions?userId=user1&maxResults=2
    Alos le code http retourné est  "200"
    Et les suggestions sont
      | livreId | titre    | categorieId |
      | lv11    | livre11  | cat1        |
      | lv21    | livre21  | cat2        |
    
DEV
Un peu trop technique
limite nombre suggestions
Pas liés à l'utilisateur
Exemple non parlant
Bibliothèque Écrire les scénarios
gerald.reinhart@ .com
  Scenario: fournir des suggestions de livres
             
    Etant donné l'utilisateur "Tim"
    Et il a "4" ans
    Et les catégories populaires pour cet âge sont
      | categorieId | nom                    |
      | cat1        | Coloriage              |
      | cat2        | Comptines              |
      | cat3        | Histoires pour le dodo |
    Et les livres disponibles pour les catégories "cat1,cat2,cat3" sont
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      | lv21    | Comptines de la ferme | cat2        |
      | lv31    | Histoires de la mer   | cat3        |
    Quand on demande "3" suggestions
    Alors les suggestions sont
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      | lv21    | Comptines de la ferme | cat2        |
      | lv31    | Histoires de la mer   | cat3        |
Manque : limite nombre suggestions
Manque : jamais lus
Manque : catégories différentes
DEVPOPO
Bibliothèque Écrire les scénarios
gerald.reinhart@ .com
  Scenario: fournir des suggestions de livres
             
    Etant donné l'utilisateur "Tim"
    Et il a "4" ans
    Et les catégories populaires pour cet âge sont
      | categorieId | nom                    |
      | cat1        | Coloriage              |
      | cat2        | Comptines              |
      | cat3        | Histoires pour le dodo |
    Et les livres disponibles pour les catégories "cat1,cat2,cat3" sont
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      | lv21    | Comptines de la ferme | cat2        |
      | lv31    | Histoires de la mer   | cat3        |
    Quand on demande "2" suggestions
    Alors les suggestions sont
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      | lv21    | Comptines de la ferme | cat2        |
     
DEVPOPO
limite nombre
suggestions
3
2
Bibliothèque Écrire les scénarios
gerald.reinhart@ .com
Manque : jamais lus
Manque : catégories différentes
  Scenario: fournir des suggestions de livres
             
    Etant donné l'utilisateur "Tim"
    Et il a "4" ans
    Et les catégories populaires pour cet âge sont
      | categorieId | nom                    |
      | cat1        | Coloriage              |
      | cat2        | Comptines              |
      | cat3        | Histoires pour le dodo |
    Et les livres disponibles pour les catégories "cat1,cat2,cat3" sont
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      | lv12    | Colorier les vaches   | cat1        |
      | lv21    | Comptines de la ferme | cat2        |
      | lv31    | Histoires de la mer   | cat3        |
    Quand on demande "2" suggestions
    Alors les suggestions sont
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      |         |                       |             |
      | lv21    | Comptines de la ferme | cat2        |
Manque : jamais lus
DEVPOPO
4
2
catégories différentes
Bibliothèque Écrire les scénarios
gerald.reinhart@ .com
  Scenario: fournir des suggestions de livres
             
    Etant donné l'utilisateur "Tim"
    Et il a "4" ans
    Et les catégories populaires pour cet âge sont
      | categorieId | nom                    |
      | cat1        | Coloriage              |
      | cat2        | Comptines              |
      | cat3        | Histoires pour le dodo |
    Et les livres disponibles pour les catégories "cat1,cat2,cat3" sont
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      | lv12    | Colorier les vaches   | cat1        |
      | lv13    | Colorier les chevaux  | cat1        |
      | lv21    | Comptines de la ferme | cat2        |
      | lv31    | Histoires de la mer   | cat3        |
    Et l'utilisateur a déja reservé les livres suivants
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
    When on demande "2" suggestions
    Then les suggestions sont
      | livreId | titre                 | categorieId |
      |         |                       |            |
      | lv12    | Colorier les vaches   | cat1       |
      | lv21    | Comptines de la ferme | cat2       |
DEVPOPO
On teste quoi au juste ?
5
2
jamais lus
Bibliothèque Écrire les scénarios
gerald.reinhart@ .com
  Scenario: les suggestions proposées sont populaires, disponibles
            et adaptées à l'âge de l utilisateur
             
    Etant donné l'utilisateur "Tim"
    Et il a "4" ans
    Et les catégories populaires pour cet âge sont
      | categorieId | nom                    |
      | cat1        | Coloriage              |
      | cat2        | Comptines              |
      | cat3        | Histoires pour le dodo |
    Et les livres disponibles pour les catégories "cat1,cat2,cat3" sont
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      | lv21    | Comptines de la ferme | cat2        |
      | lv31    | Histoires de la mer   | cat3        |
    Quand on demande "3" suggestions
    Alors les suggestions sont
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      | lv21    | Comptines de la ferme | cat2        |
      | lv31    | Histoires de la mer   | cat3        |
DEVPOPO
Scenario 1 : cas nominal
=> minimal
Bibliothèque Écrire les scénarios
gerald.reinhart@ .com
  Scenario: limiter le nombre de suggestions
             
    Etant donné l'utilisateur "Tim"
    Et il a "4" ans
    Et les catégories populaires pour cet âge sont
      | categorieId | nom                    |
      | cat1        | Coloriage              |
      | cat2        | Comptines              |
      | cat3        | Histoires pour le dodo |
         Et les livres disponibles pour les catégories "cat1,cat2,cat3" sont
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      | lv21    | Comptines de la ferme | cat2        |
      | lv31    | Histoires de la mer   | cat3        |
    When on demande "2" suggestions
         Then les suggestions sont
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      | lv21    | Comptines de la ferme | cat2        |
DEVPOPO
Scenario 2 : cas nominal
2
3
Bibliothèque Écrire les scénarios
Simplifions encore le scenario
gerald.reinhart@ .com
  Scenario: limiter le nombre de suggestions
             
    Etant donné un utilisateur
    Et "3" livres  sont disponibles pour 
           les catégories populaires pour cet âge
  
    When on demande "2" suggestions
    Then "2" suggestions sont proposées 
             parmi les livres précédents
      
DEVPOPO
Scenario 2 : cas nominal
Bibliothèque Écrire les scénarios
gerald.reinhart@ .com
  Scenario: l'utilisateur n'a jamais réservé les livres 
              qu'on lui suggère
             
    Etant donné l'utilisateur "Tim"
    Et il a "4" ans
    Et les catégories populaires pour cet âge sont
      | categorieId | nom                    |
      | cat1        | Coloriage              |
      | cat2        | Comptines              |
    Et les livres disponibles pour les catégories "cat1,cat2" sont
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      | lv21    | Comptines de la ferme | cat2        |
    Et l'utilisateur a déja reservé les livres suivants
      | livreId | titre               | categorieId |
      | lv11    | Colorier les poules | cat1        |
    Quand on demande "1" suggestions
    Alors les suggestions sont
      | livreId | titre                 | categorieId |
      |         |                       |             |
      | lv21    | Comptines de la ferme | cat2        |
DEVPOPO
Scenario 3 : cas nominal
Déroulons l'algo
Bibliothèque Écrire les scénarios
gerald.reinhart@ .com
  Scenario: les livres suggérés proviennent de catégories différentes
             
    Etant donné l'utilisateur "Tim"
    Et il a "4" ans
    Et les catégories populaires pour cet âge sont
      | categorieId | nom                    |
      | cat1        | Coloriage              |
      | cat2        | Comptines              |
    Et les livres disponibles pour les catégories "cat1,cat2" sont
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      | lv12    | Colorier les vaches   | cat1        |
      | lv21    | Comptines de la ferme | cat2        |
    Quand on demande "2" suggestions
    Alors les suggestions sont
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      | lv21    | Comptines de la ferme | cat2        |
DEVPOPO
Scenario 4 : cas nominal
Déroulons l'algo
Bibliothèque Écrire les scénarios
  Scenario: s'il n y a pas assez de suggestions, 
             on propose des livres de mêmes catégories
        Etant donné l'utilisateur "Tim"
    Et il a "4" ans
    Et les catégories populaires pour cet âge sont
      | categorieId | nom                    |
      | cat1        | Coloriage              |
      | cat2        | Comptines              |
    Et les livres disponibles pour les catégories "cat1,cat2" sont
      | livreId | titre                 | categoryId |
      | lv11    | Colorier les poules   | cat1       |
      | lv12    | Colorier les vaches   | cat1       |
      | lv21    | Comptines de la ferme | cat2       |
    Quand on demande "3" suggestions
    Alors les suggestions sont
      | livreId | titre                 | categoryId |
      | lv11    | Colorier les poules   | cat1       |
      | lv21    | Comptines de la ferme | cat2       |
      | lv12    | Colorier les vaches   | cat1       |
DEVPOPO
Scenario 5 : cas limite
Déroulons l'algo
Bibliothèque Écrire les scénarios
gerald.reinhart@ .com
  Scenario: pas de suggestion pour 
             les utilisateurs inconnus
             
    Etant donné l'utilisateur "Lise"
    Et l'utilisateur est inconnu
    Quand on demande "3" suggestions
    Alors aucune suggestion est proposée
DEVPOPO
Scenario 6 : cas limite
Bibliothèque Écrire les scénarios
gerald.reinhart@ .com
  Scenario: un service pour lequel le système dépend est indisponible
             
    Etant donné l'utilisateur "Tim"
    Et impossible de récupérer les informations de l utilisateur
    Quand on demande "3" suggestions
    Alors le système est temporairement indisponible
DEVPOPO
Scenario 7 : cas d'erreur
Bibliothèque Écrire les scénarios
gerald.reinhart@ .com
  Scenario: les suggestions proposées sont populaires, disponibles
            et adaptées à l'âge de l utilisateur  
    Etant donné l'utilisateur depuis le web service http://my.library.com/user/Tim
      | clé    | valeur |
      | userId | Tim    |
      | âge    | 4      |
    Et les catégories depuis le web service 
                      http://my.library.com/category?popular=true&age=4
      | categorieId | nom                    |
      | cat1        | Coloriage              |
      | cat2        | Comptines              |
      | cat3        | Histoires pour le dodo |
    Et les livres depuis le web service 
             http://my.library.com/search?categories=cat1,cat2,cat3&available=true
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      | lv21    | Comptines de la ferme | cat2        |
      | lv31    | Histoires de la mer   | cat3        |
    Et les livres depuis le web service http://my.library.com/user/Tim/books
      | livreId | titre               | categorieId |
      | lv11    | Colorier les poules | cat1        |
    Quand on appelle http://localhost:9998/suggestions?userId=Tim&maxResults=3
    Alors le code http retourné est "200"
    Et les suggestions sont
      | livreId | titre                 | categorieId |
      | lv11    | Colorier les poules   | cat1        |
      | lv21    | Comptines de la ferme | cat2        |
      | lv31    | Histoires de la mer   | cat3        |     
DEVPOPO
Scenario 1 version technique
Bibliothèque Écrire les scénarios
gerald.reinhart@ .com
DEVPOPO
Scenario 7
En tant qu'utilisateur de la bibliothèque,
je souhaite des suggestions de livres
afin de faire des découvertes
En tant qu'utilisateur de la bibliothèque,
je souhaite des suggestions de livres
afin de faire des découvertes
Scenario 1 Scenario 2
Scenario 3
Scenario 4
Scenario 5
Scenario 6
Scenario 1 Scenario 6
Scenario 7
Scenario 0
Bibliothèque Organiser les scénarios
gerald.reinhart@ .com
DEVPOPO
Scenario 7
En tant qu'utilisateur de la bibliothèque,
Je souhaite des suggestions de livres
Afin de faire des découvertes
En tant qu'utilisateur de la bibliothèque,
Je souhaite des suggestions de livres
Afin de faire des découvertes
Scenario 1
Scenario 2
Scenario 3
Scenario 4
Scenario 5
Scenario 6
@limit_case @error_case@nominal_case
@level_0_
high_level
@level_1_
specification
@level_2_
technical Scenario 1 Scenario 6 Scenario 7
Scenario 0
Bibliothèque Organiser les scénarios
gerald.reinhart@ .com
User Story Critères
acceptances
Implémentation
Démonstration
Implémentation
Implémentation
Les suggestions
doivent être
liées à
l'utilisateur !
2 ou 3 semaines
POPO
DEVDEV
Bibliothèque Sans spécification par l'exemple
gerald.reinhart@ .com
DEV
User Story
Démonstration
2 ou 3 semaines
@limit @error@nominal
@level_0
@level_1
@level_2
Scenario
Scenario
Scenario
Scenario Scenario
Scenario Scenario
Écriture
Scénario2 ou 3
heures
BDD
Critères
acceptances
BDD
BDD
POPO
@level_2
@level_1 DEVDEV
DEV
POPO
Bibliothèque Feuille de route
gerald.reinhart@ .comgerald.reinhart@ .com
36
Rendre exécutable
le scenario
Scenario
validé
BDD
Modifier
le code
principal
TDD
Écrire un test
Réusinage
du code
TDD
TDD
DEV
TDD
Bibliothèque Rendre exécutable les scénarios
gerald.reinhart@ .com
Catégorie
Suggestion
Utilisateur
Réservation
Utilisateur
Catégories
populaire
pour un âge
Livres disponibles
pour des catégories
DEV
nom
suggestions
Recherche
Bibliothèque Rendre exécutable les scénarios
gerald.reinhart@ .com
Age et
Réservations
déjà effectuées
Exécuter
Variables
de contexte
Etant donné
Catégorie
Suggestion
Code de production
Code permettant le BDD
Utilisateur
Recherche
Réservation
DEV
Bibliothèque Rendre exécutable les scénarios
gerald.reinhart@ .com
Avoir un code flexible
pour simuler les
comportements
Mocker
Mocker
Mocker
Vérifier
Alors
Appel
Quand
39
DEV
Bibliothèque Rendre exécutable les scénarios
Le développeur est
complétement guidé
gerald.reinhart@ .com
BDD
40
DEV
Pont entre l'étape du
scénario et le code
Bibliothèque Rendre exécutable les scénarios
Variables de contexte
gerald.reinhart@ .com
BDD
41
DEV
Bibliothèque Rendre exécutable les scénarios
Définition du comportement des mocks
gerald.reinhart@ .com
BDD
42
DEV
Bibliothèque Rendre exécutable les scénarios
Activation du code réel
gerald.reinhart@ .comgerald.reinhart@ .com
BDD
43
DEV
Bibliothèque Rendre exécutable les scénarios
Le code principal
n'existe pas….
Vérification du résultat
gerald.reinhart@ .com
BDD
44
DEV
Bibliothèque Implémenter les scénarios
Écrivons réellement le code
gerald.reinhart@ .com
BDD
45
DEV
Bibliothèque Implémenter les scénarios
Premier scénario
implémenté !
Le code est activé dans les
conditions de production
gerald.reinhart@ .com
BDD
46
DEV
Bibliothèque Implémenter les scénarios
gerald.reinhart@ .com
BDD
BDD
Réutilisation de phrase exécutable d'un
niveau d'abstraction inférieur
47
Bibliothèque Implémenter les scénarios
Réutilisation de phrase exécutable
DEV
gerald.reinhart@ .com
BDD
BDDBDD
48
DEV
Bibliothèque Implémenter les scénarios
Générer des données
pour rendre le scenario
plus lisible
gerald.reinhart@ .com
BDD
BDDBDD
49
DEV
Bibliothèque Implémenter les scénarios
gerald.reinhart@ .com
Implémenter un scénario de
haut niveau d'abstraction
BDD
BDDBDD
50
DEV
Bibliothèque Implémenter les scénarios
Fin du cycle d'implémentation
gerald.reinhart@ .com
BDD
BDDBDD
51
Bibliothèque Tests de non régression
DEV
@limit @error@nominal
@level_0
@level_1
@level_2
Scenario
Scenario
Scenario
Scenario Scenario
Scenario Scenario
Code versionné
Intégration
continue
Non régression régulière
Scenarios BBD
gerald.reinhart@ .com
52
Bibliothèque Exposer la documentation générée
DEV
@limi @erro@nomin
al@level_0
@level_
@lev
Sc
en
ari
o
Code
versionné
Intégration
continue
Scenarios
BBD
POPO
@level_0
@level_2
@level_1
Génère
Import
Import
Documentation
projet
@level_0
@nominal
@limit
@error
Inclusion de la documentation générée dans la
documentation projet en fonction du niveau
d'abstraction et du type de scenario gerald.reinhart@ .com
53
Bibliothèque Exposer la documentation générée
gerald.reinhart@ .com
54
Conclusion
gerald.reinhart@ .com
● Spécification par l'exemple
– collaboration étroite DEV / PO est nécessaire
– utiliser des exemples permet d'ouvrir la discussion et de trouver de
nombreux cas
– permet une boucle de rétroaction très rapide
● Tests fonctionnels
– tests stables et rapides
– le développeur est guidé, le code est tiré par les tests
– le code doit être flexible pour mocker les interactions extérieures
● Documentation exécutable
– issue du code, la documentation est à jour toujours
– documentation exhaustive
55
Conclusion
gerald.reinhart@ .com
● Équipe plus soudée autour du projet
– même niveau de compréhension pour tout le monde
– les scenarios constituent un contrat clair
● Confiance
● Vélocité
– Boucle de rétroaction très courte pour le PO
– En cas de changement d'orientation produit la
modification des tests et du code est plus rapide
56
Conclusion
gerald.reinhart@ .com
● Facteur d'échec
– DEV ou PO non impliqués
– BDD appliqué en cours de projet,
doit être fait en premier
57
Conclusion
gerald.reinhart@ .com
Essayez !
(ou réessayez !)
Questions ?
58
Conclusion (détails)
gerald.reinhart@ .com
● Spécification par l'exemple
– collaboration étroite DEV / PO est nécessaire
– utiliser des exemples permet d'ouvrir la discussion et de trouver de nombreux cas
– permet une boucle de rétroaction très rapide
– définition au plus tôt de toutes les entrées sorties nécessaires
– une User Story est déclinée en nombreux scénarios
– les phrases exécutables sont réutilisables
– découper les scénarios
– garder uniquement le nécessaire
– garder en tête la lisibilité
– les données non nécessaires à la lisibilité peuvent être définies dans le code de test
– ne pas hésiter à dérouler l'algorithme à partir des exemples du scénario
– envisager différents cas : cas nominal, cas limite, cas d'erreur
– organiser les scénarios : niveau d'abstraction, différents cas
● Tests fonctionnels
– le développeur est guidé, le code est tiré par les tests
– on écrit uniquement le code nécessaire ni plus ni moins
– tests exhaustifs
– le code doit être flexible pour mocker les interactions extérieures
– une boucle BDD induit plusieurs boucles TDD
– tests stables : les interactions extérieures sont mockées
● Documentation exécutable
– issue du code, la documentation est à jour toujours
– les niveaux d'abstraction permettent d'inclure une documentation adaptée au contexte de la documentation projet

Contenu connexe

PPTX
Fun Activity Quiz
PPTX
FinalQUiz new (1).pptx
DOCX
A COMPARATIVE BRAND ANALYSIS OF BISLERI AND ITS COMPETITORS
PDF
Jens Happe - Write tests you love, not hate.pdf
DOCX
Behaviour towards products of hindustan unilever ltd (hul)
PDF
BDD (Behavior Driven Development) - Une voie vers l'agilité
PDF
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
PDF
Pizza party 30-09-2011 bdd-cucumber
Fun Activity Quiz
FinalQUiz new (1).pptx
A COMPARATIVE BRAND ANALYSIS OF BISLERI AND ITS COMPETITORS
Jens Happe - Write tests you love, not hate.pdf
Behaviour towards products of hindustan unilever ltd (hul)
BDD (Behavior Driven Development) - Une voie vers l'agilité
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
Pizza party 30-09-2011 bdd-cucumber

En vedette (20)

PDF
Test acceptance
ODP
Spécification par l'exemple & Tests d'Acceptance Agile avec cucumber
PDF
Réaliser une bonne recette au concombre - Agile Testing Paris
PPTX
C# Async, un an après
PPTX
Mode offline et Synchronisation avec Windows Phone et Windows 8.1
PDF
Softfluent speig mdday2010
PPTX
Keynote "PME & Startups : concurrents ou exemples à suivre ?"
PPTX
Les nouveautés du Framework .NET 4.5
PPTX
LMB Entrepreneurs' Boot Camp Handbook 16 May 2011
ODP
Test du futur avec Spock
PDF
Abes Adbs2411
PDF
Iut agile lyon 20 nov. 2013 - bdd
PDF
Dot Net Core
ODP
Le WEB 2.0 en bibliothèque
PPTX
Aumentando reaproveitamento de código com MvvmCross
PPTX
.NET 2015, ASP.NET 5, C# 6 e tudo mais
PDF
Decouvrir CQRS (sans Event sourcing) par la pratique
PPTX
Introduction à ASP.NET Core
PPTX
Les nouveautés de C# 7
PDF
Ajax (Asynchronous JavaScript and XML)
Test acceptance
Spécification par l'exemple & Tests d'Acceptance Agile avec cucumber
Réaliser une bonne recette au concombre - Agile Testing Paris
C# Async, un an après
Mode offline et Synchronisation avec Windows Phone et Windows 8.1
Softfluent speig mdday2010
Keynote "PME & Startups : concurrents ou exemples à suivre ?"
Les nouveautés du Framework .NET 4.5
LMB Entrepreneurs' Boot Camp Handbook 16 May 2011
Test du futur avec Spock
Abes Adbs2411
Iut agile lyon 20 nov. 2013 - bdd
Dot Net Core
Le WEB 2.0 en bibliothèque
Aumentando reaproveitamento de código com MvvmCross
.NET 2015, ASP.NET 5, C# 6 e tudo mais
Decouvrir CQRS (sans Event sourcing) par la pratique
Introduction à ASP.NET Core
Les nouveautés de C# 7
Ajax (Asynchronous JavaScript and XML)
Publicité

"Spécification par l'exemple" par l'exemple : le BDD démystifié

Notes de l'éditeur

  • #4: Qui suis je : développeur décomplexé ayant eu des expériences diverses avec le BDD (échecs et succès) But: donner envie d'essayer ou de réessayer le BDD Spécification par l'exemple par l'exemple Retirer la magie Trucs et astuces issu de la pratique Pour ceux qui l'on pratiquer : une approche différente
  • #5: L'expression des besoins est difficile : Des éléments sous entendu peuvent être oublié lors du développement Des cas d'erreur ou cas limites peuvent être géré que lors du développement Sans cas précis, l'interprétation du besoin exprimé peut divergé du besoin réel La boucle de rétro action est trop longue entre l'expression du besoin et la démonstration du produit
  • #6: Lors que les tests fonctionnels sont écrit après : Ne sont pas exhaustifs Sont difficiles à écrire Peuvent clignoter s'ils sont basés sur les données vivantes
  • #7: Documentation fonctionnelle : peu de confiance Dans un cycle itératif de développement la documentation suit difficilement l'état réel du produit. On ne peut jamais savoir si la documentation est juste, même si elle l'est.
  • #55: Spécification par l'exemple collaboration étroite DEV / PO est nécessaire utiliser des exemples permet d'ouvrir la discussion et de trouver de nombreux cas permet une boucle de rétroaction très rapide définition au plus tôt de toutes les entrées sorties nécessaires une User Story est déclinée en nombreux scénarios les phrases exécutables sont réutilisables découper les scénarios garder uniquement le nécessaire garder en tête la lisibilité les données non nécessaires à la lisibilité peuvent être définies dans le code de test ne pas hésiter à dérouler l'algorithme à partir des exemples du scénario envisager différents cas : cas nominal, cas limite, cas d'erreur organiser les scénarios : niveau d'abstraction, différents cas Tests fonctionnels le développeur est guidé, le code est tiré par les tests on écrit uniquement le code nécessaire ni plus ni moins tests exhaustifs le code doit être flexible pour mocker les interactions extérieures une boucle BDD induit plusieurs boucles TDD tests stables : les interactions extérieures sont mockées Documentation exécutable issue du code, la documentation est à jour toujours les niveaux d'abstraction permettent d'inclure une documentation adaptée au contexte de la documentation projet