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

53
BDD: un chemin vers l’Agilité Mauro Talevi Comment BDD peut favoriser l’adoption d’une approche Agile 2011

description

Mauro Talevi @Mix-IT 2011

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

Page 1: 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

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

Plan“Pain-Driven Development”

Behaviour-Driven Development

BDD en Java: JBehave

Questions

Etude de Cas

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

Pain-DrivenDevelopment *

*Développement pour les SM

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

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!

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

Un Exemple

... c’est familier?

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

... 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

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

Il y a langage ... et langage

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

Behaviour-DrivenDevelopment *

*Développement pour les bien élevés

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

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”?

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

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!

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

Développement Out-In

Choisissez la bonne frontiere

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

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

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

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

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

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é

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

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é

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

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

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

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é

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

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

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

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!

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

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

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

BDD en Java

Page 22: BDD (Behavior Driven Development) - Une voie vers l'agilité
Page 23: BDD (Behavior Driven Development) - Une voie vers l'agilité

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

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

Tous les types Java sont supportés

Nombres

Listes des nombres

Booleans

Enums

Strings

Listes des Strings

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

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

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

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

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

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

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

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

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

Exécutions

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

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)

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

Un Exemple

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

Un Report HTML

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

Et en plus ...

Dependency Injection

Multi-Threading

Story Mapping

Web Runner

Web Queue

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

Etude de Cas

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

Contexte

Projet stratégique pour une banque globale d’investissementCommencé en Sept 2008 ...... des temps très interessants pour le monde financier!

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

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

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

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!

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

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!

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

Le Poulet & Le Cochon

Il faut être tous des cochons!

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

Cochonnet

Le plus important membre de l’équipe

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

BDD et l’Agilité

Page 42: BDD (Behavior Driven Development) - Une voie vers 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

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

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

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

Deux Ans Apres ...

Most Valuable Agile Project

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

Cochonnet est très fier

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

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

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

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

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

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

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

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

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

Scénarios par Sprint

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

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é

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

Questions

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