BDD:
un chemin vers l’Agilité
 Comment BDD peut favoriser
l’adoption d’une approche Agile
      Mauro Talevi
                  2011
Plan
 “Pain-Driven Development”
Behaviour-Driven Development
   BDD en Java: JBehave
       Etude de Cas
         Questions
Pain-Driven
Development *

*Développement pour les SM
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!
Un Exemple




... c’est familier?
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
Il y a langage ... et langage
Behaviour-Driven
     Development *
*Développement pour les bien élevés
(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
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
Décrivez les comportements du point de
             vue du métier
     Evitez les détails techniques
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
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
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é
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
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é
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

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!
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
BDD en Java
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
Tous les types Java sont supportés
Strings
             Booleans
     Enums
                 Nombres

Listes des Strings

                 Listes des nombres
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);
   }
}
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
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
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 entrée texte (peut-être a wiki)

En sortie plusieurs formats:
CONSOLE, HTML, XML, TXT, STATS
Un Exemple
Un Report HTML
Et en plus ...

Dependency Injection

  Multi-Threading

   Story Mapping
   Web Queue
    Web Runner
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

Architecture basée sur JMS (transactionnelle)

Interfaçant plusieurs systèmes internes

Focus initial sur le “core back-end”

“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” ...
                ... plusieurs stakeholders
  Métier          Securité
         Production      Infrastructure

Sans expérience d’Agile ni de BDD ...
       ... mais très investis
              & 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
 .... le Contrat de la livration
 ... la clef pour une meilleure
 communication
 ... mais il peut aussi favoriser
 l’adoption de l’Agilité
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
... aidant l’équipe pour l’estimation
... détaillant des séquences par étapes
... rendant input/output plus visibles
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é:
              Métier

   Testers                 BAs

                Devs
       Pairing baisse le risque
          de malentendu et
      favorise la communication
Scénarios par Sprint
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
Contact
     Mauro Talevi
mauro.talevi@agilesque.com

            http://jbehave.org
Questions
    ... et Démo
(pour les intéressés)

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

  • 1.
    BDD: un chemin versl’Agilité Comment BDD peut favoriser l’adoption d’une approche Agile Mauro Talevi 2011
  • 2.
    Plan “Pain-Driven Development” Behaviour-DrivenDevelopment BDD en Java: JBehave Etude de Cas Questions
  • 3.
  • 4.
    Maux du Développement Lesystè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!
  • 5.
  • 6.
    BDD propose unnouveau 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
  • 7.
    Il y alangage ... et langage
  • 8.
    Behaviour-Driven Development * *Développement pour les bien élevés
  • 9.
    (Une des) definitionsde 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 quiont un intérêt dans le système: Métier (bien sûr!) Sécurité Production Audit de Qualité ... et plus encore!
  • 11.
  • 12.
    Parlez le langagedu 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: Etantdonné 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 optionsdu 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: Etantdonné 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 lelangage: 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 BDDparle 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 BDDpermet 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
  • 21.
  • 23.
    Etapes correspondent auxmé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 typesJava sont supportés Strings Booleans Enums Nombres Listes des Strings Listes des nombres
  • 25.
    Types des paramétressur-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é unseuil 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 Homeextends 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
  • 29.
  • 30.
    Reporting StoryReporter observe les événements(“Observer Pattern”) En entrée texte (peut-être a wiki) En sortie plusieurs formats: CONSOLE, HTML, XML, TXT, STATS
  • 31.
  • 32.
  • 33.
    Et en plus... Dependency Injection Multi-Threading Story Mapping Web Queue Web Runner
  • 34.
  • 35.
    Contexte Projet stratégique pour unebanque globale d’investissement Commencé en Sept 2008 ... ... des temps très interessants pour le monde financier!
  • 36.
    Technologie Application Java Enterprise Architecturebasée sur JMS (transactionnelle) Interfaçant plusieurs systèmes internes Focus initial sur le “core back-end” “Web front-end” ajouté plus tard
  • 37.
    Méthodologie Projet Agile Scrum Sprintsde deux semaines Equipe jusqu’á 10 membres Auto-organisé: devs, testers, BA, SM Le SM c’est pas un Chef de Projet!
  • 38.
    Les Stakeholders “No worldis 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!
  • 40.
    Cochonnet Le plus importantmembre de l’équipe
  • 41.
  • 42.
    BDD et l’Agilité BDDideale 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étiervoulait 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
  • 44.
    Deux Ans Apres... Most Valuable Agile Project
  • 45.
  • 46.
    Communication BDD clef pourla 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 laconfiance: ... 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 testscomme 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 degrande valeur Comportement représente un domaine partagé: Métier Testers BAs Devs Pairing baisse le risque de malentendu et favorise la communication
  • 50.
  • 51.
    En Conclusion ... BDDrepré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
  • 52.
    Contact Mauro Talevi mauro.talevi@agilesque.com http://jbehave.org
  • 53.
    Questions ... et Démo (pour les intéressés)