BDD (Behavior Driven Development) - Une voie vers l'agilité
CARA_Lyon
2,075 views
53 slides
May 27, 2011
Slide 1 of 53
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
About This Presentation
Mauro Talevi @Mix-IT 2011
Size: 2.35 MB
Language: fr
Added: May 27, 2011
Slides: 53 pages
Slide Content
BDD:
un chemin vers l’Agilité
Mauro Talevi
Comment BDD peut favoriser
l’adoption d’une approche Agile
2011
Plan
“Pain-Driven Development”
Behaviour-Driven Development
BDD en Java: JBehave
Questions
Etude de Cas
Pain-Driven
Development *
*Développement pour les SM
Maux du Développement
Le système ne fait pas ce qu’il devrait
Pas de tests d’acceptation
Fonctionnalité manquante
Le système est développé en “silos”
Le système n’est pas accessible ni
visible par le métier
... et plus encore!
Un Exemple
... c’est familier?
... mais ça prend du temps
BDD propose un nouveau paradigme ...
décrire le
comportement est
un meilleur type
de test
un langage
universel c’est la
clef
les tests
d’acceptation
doivent être
automatisables
toutes requêtes
sont aussi des
comportements
Il y a langage ... et langage
Behaviour-Driven
Development *
*Développement pour les bien élevés
definitions de Dan North:
“BDD essaie d’implémenter une application
en décrivant son comportement
du point de vue des stakeholders”
Parlez le langage du métier
Développement Out-In
(Une des)
Qui sont les “stakeholders”?
Stakeholders
Tous ceux qui ont un intérêt
dans le système:
Métier (bien sûr!)
Sécurité
Production
Audit de Qualité
... et plus encore!
Développement Out-In
Choisissez la bonne frontiere
Parlez le langage du métier
Definissez un langage spécifique pour le
domaine (DSL)
Concentrez-vous sur les concepts du
métier
Evitez les détails techniques
Décrivez les comportements du point de
vue du métier
Quelques definitions
Une Histoire (User Story):
une collection des Scénarios,
chacun étant une collection d’étapes
Les scénarios explorent des
déclinations de l’histoire,
nominales et alternatives
Les histoires décrivent des
comportements, c.a.d. la fonctionalité
attendue par le métier
Etant donné un seuil de 15.0
Grammaire BDD d’Etapes:
Etant donné - contexte
Quand - événement
Alors - résultat
Et - répète étape précédente
Commençons une conversation:
Quand une action est échangée á 5.0
Alors le trader ne doit pas être alerté
La même grammaire BDD
Seules des valeurs ont changé
Explorez d’autres options du métier:
Etant donné un seuil de 15.0
Quand une action est échangée á 16.0
Alors le trader doit être alerté
Etant donné un seuil de 15.0
Quand une action est échangée à 5.0
Alors le trader ne doit pas être alerté
Quand une action est échangée à 16.0
Alors le trader doit être alerté
Combinez les étapes:
Choisissez
le paramétrage d’étapes
Etant donné un seuil de 15.0
Quand une action est échangée á 16.0
Alors le trader doit être alerté
Faites évoluer le langage:
Mêmes paramétres
Langage change
Alias pour
mêmes étapes
Etant donné un seuil de prix de 15.0
Quand un stock est échangé á 16.0
Alors le trader doit être alerté
Et en plus ...
Tabularisation: quand on a des
répétitions d’étapes ou des donné
Histoires comme des pre-requis:
quand on a des répétitions des
histories et des scénarios
BDD vs TDD
TDD parle un langage technique,
écrit en code
BDD parle un langage du métier,
écrit en texte
Ils sont complémentaires,
pas en conflit!
BDD vs ATDD
ATDD est un paradigme générique
d’automatisation des tests, pas
toujours communicative
BDD permet d’automatiser les tests,
en mettant l’accent sur la
communication
BDD en Java
Etapes correspondent aux méthodes Java
@Given(“un seuil de $seuil”)
public void unSeuil(double seuil){
// assignez l’objet pour garder l’état
}
Etant donné un seuil de 15.0
Paramétres auto-convertis
Tous les types Java sont supportés
Nombres
Listes des nombres
Booleans
Enums
Strings
Listes des Strings
Types des paramétres sur-mesure
@Given(“la date de $date”)
public void uneDate(Date date){
// Date est multi-format
}
DateConverter implements ParameterConverter {
public Object convertValue(String value, Type type) {
// DateFormat injectée dans DateConverter
return dateFormat.parse(value);
}
}
Etant donné la date de 01/04/2010
Alias
@Given(“un seuil de $seuil”)
@Alias(“un seuil de prix de $seuil”)
public void unSeuil(double seuil){
// assignez l’objet pour garder l’état
}
Etant donné un seuil de 15.0
Etant donné un seuil de prix de 15.0
Evolution du langage du scénario
Scénario: Un article est ajouté au
panier du site e-commerce
Etant donné le panier est vide
Quand je recherche un article
Et l’article est ajouté au panier
Alors le panier contient cet article
Un scénario Web
On décrit les interactions des utilisateurs
Pas les détails HTTP/HTML
Reporting
StoryReporter observe les
événements (“Observer Pattern”)
En sortie plusieurs formats:
CONSOLE, HTML, XML, TXT, STATS
En entrée texte (peut-être a wiki)
Un Exemple
Un Report HTML
Et en plus ...
Dependency Injection
Multi-Threading
Story Mapping
Web Runner
Web Queue
Etude de Cas
Contexte
Projet stratégique pour
une banque globale
d’investissement
Commencé en Sept 2008 ...
... des temps très
interessants pour le
monde financier!
Technologie
Application Java Enterprise
Focus initial sur le “core back-end”
Architecture basée sur JMS (transactionnelle)
Interfaçant plusieurs systèmes internes
“Web front-end” ajouté plus tard
Méthodologie
Projet Agile Scrum
Sprints de deux semaines
Equipe jusqu’á 10 membres
Auto-organisé: devs, testers, BA, SM
Le SM c’est pas un Chef de Projet!
Les Stakeholders
“No world is an island” ...
Sans expérience d’Agile ni de BDD ...
... plusieurs stakeholders
... mais très investis
Métier
Production
Securité
Infrastructure
& pas juste concernés!
Le Poulet
& Le Cochon
Il faut être tous des cochons!
Cochonnet
Le plus important membre de l’équipe
BDD et l’Agilité
BDD et l’Agilité
BDD ideale pour un projet Agile:
.... “Done Criteria” de Scrum
... la clef pour une meilleure
communication
... mais il peut aussi favoriser
l’adoption de l’Agilité
.... le Contrat de la livration
Web Runner
Le métier voulait plus de visibilité ...
... mais ils n’ont pas acces au
environment technique du build
Utilisé pour le setup des démos
... dans les Sprint Reviews
... dans les démos métier
Cela donne plus de confiance au métier
Deux Ans Apres ...
Most Valuable Agile Project
Cochonnet est très fier
Communication
BDD clef pour la communication en:
... specifiant critères d’acceptance
... détaillant des séquences par étapes
... rendant input/output plus visibles
... aidant l’équipe pour l’estimation
Confiance
BDD relance la confiance:
... du métier, en rendant le
comportement plus visible et detaillé
... de l’équipe, en livrant “what it says
on the tin” et en permettant des
refactoring sans peur
Traitez les tests comme code
Attention au “scenario smells”:
... répétition d’étapes
... répétition des scénarios
Il faut faire du refactoring
Engagez-vous avec le métier
Pairing est de grande valeur
Comportement représente un domaine
partagé:
Devs
Métier
BAs
Testers
Pairing baisse le risque
de malentendu et
favorise la communication
Scénarios par Sprint
En Conclusion ...
BDD représente un nouveau paradigme:
simple ...
mais pas toujours
facile!
BDD a joué un rôle clef en developpant ...
... du code qui est important pour le métier
... la confiance entre équipe et métier
Comme
l’Agilité