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...
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
Be...
8
Spécification par l'exemple
  Scenario: les suggestions proposées sont populaires, disponibles
            et adaptées à...
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
Utilisateu...
En tant qu'utilisateur de la bibliothèque,
je souhaite des suggestions de livres
afin de faire des découvertes
En tant qu'...
POPO
Les suggestions doivent
être adaptées à l'âge de
l'utilisateur
Pour une meilleur
découverte, les livres
doivent venir...
DEV
Focalisé sur comment
récupérer les livres, oublie
que le livre doit être non lu
par l'utilisateur
Manière la plus simp...
POPO
  Scenario: fournir des suggestions de livres
    Etant donné un utilisateur
    Quand on demande suggestions
    Alo...
  Scenario: fournir des suggestions de livres
             
    Etant donné l'utilisateur depuis le web service 
         ...
  Scenario: fournir des suggestions de livres
             
    Etant donné l'utilisateur "Tim"
    Et il a "4" ans
    Et...
  Scenario: fournir des suggestions de livres
             
    Etant donné l'utilisateur "Tim"
    Et il a "4" ans
    Et...
  Scenario: fournir des suggestions de livres
             
    Etant donné l'utilisateur "Tim"
    Et il a "4" ans
    Et...
  Scenario: fournir des suggestions de livres
             
    Etant donné l'utilisateur "Tim"
    Et il a "4" ans
    Et...
  Scenario: les suggestions proposées sont populaires, disponibles
            et adaptées à l'âge de l utilisateur
      ...
  Scenario: limiter le nombre de suggestions
             
    Etant donné l'utilisateur "Tim"
    Et il a "4" ans
    Et ...
  Scenario: limiter le nombre de suggestions
             
    Etant donné un utilisateur
    Et "3" livres  sont disponib...
  Scenario: l'utilisateur n'a jamais réservé les livres 
              qu'on lui suggère
             
    Etant donné l'u...
  Scenario: les livres suggérés proviennent de catégories différentes
             
    Etant donné l'utilisateur "Tim"
  ...
  Scenario: s'il n y a pas assez de suggestions, 
             on propose des livres de mêmes catégories
        Etant don...
  Scenario: pas de suggestion pour 
             les utilisateurs inconnus
             
    Etant donné l'utilisateur "Li...
  Scenario: un service pour lequel le système dépend est indisponible
             
    Etant donné l'utilisateur "Tim"
  ...
  Scenario: les suggestions proposées sont populaires, disponibles
            et adaptées à l'âge de l utilisateur  
    ...
DEVPOPO
Scenario 7
En tant qu'utilisateur de la bibliothèque,
je souhaite des suggestions de livres
afin de faire des déco...
DEVPOPO
Scenario 7
En tant qu'utilisateur de la bibliothèque,
Je souhaite des suggestions de livres
Afin de faire des déco...
User Story Critères
acceptances
Implémentation
Démonstration
Implémentation
Implémentation
Les suggestions
doivent être
li...
DEV
User Story
Démonstration
2 ou 3 semaines
@limit @error@nominal
@level_0
@level_1
@level_2
Scenario
Scenario
Scenario
S...
36
Rendre exécutable
le scenario
Scenario
validé
BDD
Modifier
le code
principal
TDD
Écrire un test
Réusinage
du code
TDD
T...
Catégorie
Suggestion
Utilisateur
Réservation
Utilisateur
Catégories
populaire
pour un âge
Livres disponibles
pour des caté...
Exécuter
Variables
de contexte
Etant donné
Catégorie
Suggestion
Code de production
Code permettant le BDD
Utilisateur
Rech...
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...
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.reinh...
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 prod...
46
DEV
Bibliothèque Implémenter les scénarios
gerald.reinhart@ .com
BDD
BDD
Réutilisation de phrase exécutable d'un
niveau...
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@ .c...
49
DEV
Bibliothèque Implémenter les scénarios
gerald.reinhart@ .com
Implémenter un scénario de
haut niveau d'abstraction
B...
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
Sc...
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é
...
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
– utilis...
55
Conclusion
gerald.reinhart@ .com
● Équipe plus soudée autour du projet
– même niveau de compréhension pour tout le mond...
56
Conclusion
gerald.reinhart@ .com
● Facteur d'échec
– DEV ou PO non impliqués
– BDD appliqué en cours de projet,
doit êt...
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écessair...
Prochain SlideShare
Chargement dans…5
×

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

687 vues

Publié le

But : Donner envie d'essayer ou de réessayer le BDD Public : Product Owner ET Développeurs Constats que l'on peut faire dans de nombreux projets : - les fonctionnalités développées ne correspondent pas à ce qu'avait le Product Owner en tête - les tests fonctionnels sont instables, on n'a pas vraiment confiance en eux - la documentation fonctionnelle n'est pas à jour La pratique de la spécification par l'exemple (~= BDD) peut améliorer tout ça ! On va s'affranchir de la théorie : on va appliquer le principe de la spécification par l'exemple à la présentation elle même : on va dérouler un exemple complet. Dans le contexte d'une bibliothèque, on va dérouler le BDD sur une User Story : - écrire les scénarios - organiser les scénarios - rendre exécutable les scénarios - implémenter les scénarios - rendre les tests fonctionnels automatiques - exposer la documentation générée Les différents étapes, trucs et astuces seront synthétisés en conclusion. (c'est une présentation classique, pas un atelier)


Code disponible : https://github.com/GeReinhart/dojo-bdd-library-ws-java

Publié dans : Logiciels
2 commentaires
3 j’aime
Statistiques
Remarques
Aucun téléchargement
Vues
Nombre de vues
687
Sur SlideShare
0
Issues des intégrations
0
Intégrations
21
Actions
Partages
0
Téléchargements
20
Commentaires
2
J’aime
3
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • 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
  • 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
  • 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
  • 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.
  • 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
  • "Spécification par l'exemple" par l'exemple : le BDD démystifié

    1. 1. 1 Spécification par l'exemple par l'exemple : le BDD démystifié gerald.reinhart@ .com
    2. 2. 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. 3. 3 But : donner envie d'essayer ou de réessayer le BDD Introduction gerald.reinhart@ .com
    4. 4. 4 Un PO lors de la démo du produit après une itération Constats gerald.reinhart@ .com
    5. 5. 5 Les tests fonctionnels qui clignotent Les tests fonctionnels non exhaustifs Constats gerald.reinhart@ .com
    6. 6. 6 La documentation fonctionnelle après de nombreuses itérations et réajustements du besoin Constats gerald.reinhart@ .com
    7. 7. 7 ● Spécification par l'exemple ● Tests fonctionnels ● Documentation exécutable BDD, c'est quoi ? gerald.reinhart@ .com Behavior Driven Development
    8. 8. 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. 9. 9 Tests fonctionnels BDD, c'est quoi ? gerald.reinhart@ .com
    10. 10. 10 Tests fonctionnels BDD, c'est quoi ? gerald.reinhart@ .com
    11. 11. 11 Documentation exécutable BDD, c'est quoi ? gerald.reinhart@ .com
    12. 12. Bibliothèque User Story à implémenter gerald.reinhart@ .com DEVPO
    13. 13. 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
    14. 14. 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
    15. 15. 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
    16. 16. 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
    17. 17. 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
    18. 18.   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
    19. 19.   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
    20. 20.   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
    21. 21.   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
    22. 22.   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
    23. 23.   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
    24. 24.   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
    25. 25.   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
    26. 26.   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
    27. 27.   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
    28. 28.   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
    29. 29.   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
    30. 30.   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
    31. 31.   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
    32. 32. 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
    33. 33. 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
    34. 34. 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
    35. 35. 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. 36. 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
    37. 37. 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
    38. 38. 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. 39. 39 DEV Bibliothèque Rendre exécutable les scénarios Le développeur est complétement guidé gerald.reinhart@ .com BDD
    40. 40. 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. 41. 41 DEV Bibliothèque Rendre exécutable les scénarios Définition du comportement des mocks gerald.reinhart@ .com BDD
    42. 42. 42 DEV Bibliothèque Rendre exécutable les scénarios Activation du code réel gerald.reinhart@ .comgerald.reinhart@ .com BDD
    43. 43. 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. 44. 44 DEV Bibliothèque Implémenter les scénarios Écrivons réellement le code gerald.reinhart@ .com BDD
    45. 45. 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. 46. 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. 47. 47 Bibliothèque Implémenter les scénarios Réutilisation de phrase exécutable DEV gerald.reinhart@ .com BDD BDDBDD
    48. 48. 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. 49. 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. 50. 50 DEV Bibliothèque Implémenter les scénarios Fin du cycle d'implémentation gerald.reinhart@ .com BDD BDDBDD
    51. 51. 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. 52. 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. 53. 53 Bibliothèque Exposer la documentation générée gerald.reinhart@ .com
    54. 54. 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. 55. 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. 56. 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. 57. 57 Conclusion gerald.reinhart@ .com Essayez ! (ou réessayez !) Questions ?
    58. 58. 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

    ×