bdd (behavior driven development) - une voie vers l'agilité

Post on 11-Nov-2014

1.773 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Mauro Talevi @Mix-IT 2011

TRANSCRIPT

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

mauro.talevi@agilesque.com

http://jbehave.org

Questions

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

top related