BDD (Behavior Driven Development) - Une voie vers l'agilité
-
Upload
caralyon -
Category
Technology
-
view
1.771 -
download
0
description
Transcript of BDD (Behavior Driven Development) - Une voie vers l'agilité
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-DrivenDevelopment *
*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 typede 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-DrivenDevelopment *
*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”?
StakeholdersTous 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étierDefinissez 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 definitionsUne 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é - contexteQuand - événementAlors - résultatEt - répète étape précédente
Commençons une conversation:
Quand une action est échangée á 5.0Alors le trader ne doit pas être alerté
La même grammaire BDDSeules des valeurs ont changé
Explorez d’autres options du métier:
Etant donné un seuil de 15.0Quand une action est échangée á 16.0Alors le trader doit être alerté
Etant donné un seuil de 15.0Quand une action est échangée à 5.0Alors le trader ne doit pas être alerté Quand une action est échangée à 16.0Alors le trader doit être alerté
Combinez les étapes:
Choisissez le paramétrage d’étapes
Etant donné un seuil de 15.0Quand une action est échangée á 16.0Alors le trader doit être alerté
Faites évoluer le langage:
Mêmes paramétresLangage change
Alias pour mêmes étapes
Etant donné un seuil de prix de 15.0Quand un stock est échangé á 16.0Alors 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.0Etant 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 videQuand je recherche un articleEt l’article est ajouté au panierAlors le panier contient cet article
Un scénario Web
On décrit les interactions des utilisateurs
Pas les détails HTTP/HTML
Groovy WebDriverclass 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’investissementCommencé en Sept 2008 ...... des temps très interessants pour le monde financier!
TechnologieApplication 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éthodologieProjet 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étierProduction
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 RunnerLe 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
CommunicationBDD 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
ConfianceBDD 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
BAsTesters
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
http://jbehave.org
Questions
... et Démo(pour les intéressés)