4. Maux du Développement
Le système ne fait pas ce qu’il devrait
Fonctionnalité manquante
Le système est développé en “silos”
Le système n’est pas accessible ni
visible par le métier
Pas de tests d’acceptation
... et plus encore!
6. BDD propose un nouveau paradigme ...
décrire le un langage
comportement est universel c’est la
un meilleur type clef
de test
les tests
d’acceptation
doivent être
automatisables
toutes requêtes
sont aussi des
comportements
... mais ça prend du temps
8. Behaviour-Driven
Development *
*Développement pour les bien élevés
9. (Une des) definitions de Dan North:
“BDD essaie d’implémenter une application
en décrivant son comportement
du point de vue des stakeholders”
Qui sont les “stakeholders”?
Développement Out-In
Parlez le langage du métier
10. 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!
12. Parlez le langage du métier
Definissez un langage spécifique pour le
domaine (DSL)
Concentrez-vous sur les concepts du
métier
Décrivez les comportements du point de
vue du métier
Evitez les détails techniques
13. Quelques definitions
Une Histoire (User Story):
une collection des Scénarios,
chacun étant une collection d’étapes
Les histoires décrivent des
comportements, c.a.d. la fonctionalité
attendue par le métier
Les scénarios explorent des
déclinations de l’histoire,
nominales et alternatives
14. Commençons une conversation:
Etant donné un seuil de 15.0
Quand une action est échangée á 5.0
Alors le trader ne doit pas être alerté
Grammaire BDD d’Etapes:
Etant donné - contexte
Quand - événement
Alors - résultat
Et - répète étape précédente
15. 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é
La même grammaire BDD
Seules des valeurs ont changé
16. Combinez les étapes:
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é
Choisissez
le paramétrage d’étapes
17. Faites évoluer le langage:
Etant donné un seuil de 15.0
Quand une action est échangée á 16.0
Alors le trader doit être alerté
Alias pour Mêmes paramétres
mêmes étapes Langage change
Etant donné un seuil de prix de 15.0
Quand un stock est échangé á 16.0
Alors le trader doit être alerté
18. 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
19. BDD vs TDD
BDD parle un langage du métier,
écrit en texte
TDD parle un langage technique,
écrit en code
Ils sont complémentaires,
pas en conflit!
20. BDD vs ATDD
BDD permet d’automatiser les tests,
en mettant l’accent sur la
communication
ATDD est un paradigme générique
d’automatisation des tests, pas
toujours communicative
23. Etapes correspondent aux méthodes Java
Etant donné un seuil de 15.0
@Given(“un seuil de $seuil”)
public void unSeuil(double seuil){
/ assignez l’objet pour garder l’état
/
}
Paramétres auto-convertis
24. Tous les types Java sont supportés
Strings
Booleans
Enums
Nombres
Listes des Strings
Listes des nombres
25. Types des paramétres sur-mesure
@Given(“la date de $date”)
public void uneDate(Date date){
/ Date est multi-format
/
} Etant donné la date de 01/04/2010
DateConverter implements ParameterConverter {
public Object convertValue(String value, Type type) {
/ DateFormat injectée dans DateConverter
/
return dateFormat.parse(value);
}
}
26. Alias
Etant donné un seuil de 15.0
Etant donné un seuil de prix de 15.0
@Given(“un seuil de $seuil”)
@Alias(“un seuil de prix de $seuil”)
public void unSeuil(double seuil){
/ assignez l’objet pour garder l’état
/
}
Evolution du langage du scénario
27. Un scénario Web
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
On décrit les interactions des utilisateurs
Pas les détails HTTP/HTML
28. 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
35. Contexte
Projet stratégique pour
une banque globale
d’investissement
Commencé en Sept 2008 ...
... des temps très
interessants pour le
monde financier!
38. Les Stakeholders
“No world is an island” ...
... plusieurs stakeholders
Métier Securité
Production Infrastructure
Sans expérience d’Agile ni de BDD ...
... mais très investis
& pas juste concernés!
39. Le Poulet
& Le Cochon
Il faut être tous des cochons!
42. BDD et l’Agilité
BDD ideale pour un projet Agile:
.... “Done Criteria” de Scrum
.... le Contrat de la livration
... la clef pour une meilleure
communication
... mais il peut aussi favoriser
l’adoption de l’Agilité
43. 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
46. Communication
BDD clef pour la communication en:
... specifiant critères d’acceptance
... aidant l’équipe pour l’estimation
... détaillant des séquences par étapes
... rendant input/output plus visibles
47. 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
48. 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
49. Pairing est de grande valeur
Comportement représente un domaine
partagé:
Métier
Testers BAs
Devs
Pairing baisse le risque
de malentendu et
favorise la communication
51. En Conclusion ...
BDD représente un nouveau paradigme:
mais pas toujours Comme
simple ...
facile! l’Agilité
BDD a joué un rôle clef en developpant ...
... la confiance entre équipe et métier
... du code qui est important pour le métier