BDD (Behavior Driven Development) - Une voie vers l'agilité

CARA_Lyon 2,075 views 53 slides May 27, 2011
Slide 1
Slide 1 of 53
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53

About This Presentation

Mauro Talevi @Mix-IT 2011


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

Groovy WebDriver
class Home extends BasePage {
def Home(WebDriverProvider webDriverProvider) {
super(webDriverProvider)
}
def go() {
get("http://www.etsy.com")
}
def go(String section) {
go()
findElement(By.xpath( "//a[@title = '$section']" )).click()
}
def search(String thing) {
findElement(By.id( "search-facet")).click()
findElement(By.className( "all")).click()
findElement(By.id( "search-query")).sendKeys(thing)
findElement(By.id( "search_submit")).click()
}
def goToBuySection() {
findElement(By.linkText( "Buy")).click()
}
}
WebDriver agit comme une API

Exécutions

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é

Contact
Mauro Talevi
http://jbehave.org
[email protected]
http://jbehave.org

Questions
... et Démo
(pour les intéressés)