SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
Behavior
Driven
Development

Manodnya Lele
Ben Maynard
About Litle & Co.

• Litle & Co. is a leading financial technology company
• One of the largest, private, non-bank proprietary
   processing platforms serving the Card-not-Present
   marketplace
• Specific expertise in Card-not-Present transactions,
   deep knowledge of Best Practices, Card Association
   Regulations, PCI and Data Security requirements
• Litle Vault is the 2011 Stevie Award Winner in New
   Product & Services (Web/IVR) category
Outline

•   What is BDD?
•   History
•   Why not TDD?
•   The Story
•   Tools: Compare and Contrast
•   Comments and Questions
What is BDD?




BDD can turn an idea for a requirement into
  implemented, tested, production-ready code simply
  and effectively, as long as the requirement is specific
  enough that everyone knows what’s going on.
                                     -Dan North
What is BDD?




BDD can turn an idea for a requirement into
  implemented, tested, production-ready code simply
  and effectively, as long as the requirement is specific
  enough that everyone knows what’s going on.
                                     -Dan North
What is BDD?




BDD can turn an idea for a requirement into
  implemented, tested, production-ready code simply
  and effectively, as long as the requirement is specific
  enough that everyone knows what’s going on.
                                     -Dan North
What is BDD?




BDD can turn an idea for a requirement into
  implemented, tested, production-ready code simply
  and effectively, as long as the requirement is specific
  enough that everyone knows what’s going on.
                                     -Dan North
History



1999
   Test First
   Development
                 2003
                    Behavior Driven
                    Development
History



1999
   Test First
   Development
                 2003
                    Behavior Driven
                    Development
    Kent Beck
History




Kent Beck   Dan North
Why not TDD?




BAs / Program Managers   Techies
Why not TDD?




BAs / Program Managers    Techies
• Requirements docs not
  technical enough
Why not TDD?




BAs / Program Managers    Techies
• Requirements docs not   • Test cases and unit tests
  technical enough           too technical
Why not TDD?
Why not TDD?




     BDD
Given… When… Then…
Why not TDD?



TDD


      BDD
Why not TDD?



TDD
Building the thing right


                   BDD
Why not TDD?



TDD
Building the thing right


                   BDD
                   Building the right thing
BDD:
The Story
BDD: The Story
• A way to describe the requirement such that everyone
           the business folks,
           the analyst,
           the developer,
           the tester,
           and others
   has a common understanding of the scope of the work.

• A description of a requirement and its business benefit, and a set of
  criteria by which we all agree that it is “done”.

• Remember:                              Given… When… Then…
BDD: The Story

• The title should describe an activity
     Describes actual behavior by a user of the system.

• The narrative should include a role, a feature and a benefit
     “As a [role] I want [feature] so that [benefit]“

• The scenario should be described in terms of givens, events
  and outcomes

                                     Given… When… Then…
BDD: The Story

Title
        Easier user experience with online site

Narrative
     As a(n) active, participating member of my company
     I want a better online website
     So that users can easily use and purchase on our website

 Scenario 1: Smooth Checkout Process             Scenario 2: Better Site Uptime
      Given our world class web sales app             Given that a potential buyer
        And items in my shopping cart                 When a user enters our URL into a browser
      When a user clicks “checkout”                   Then the site will be available over 99.97%
      Then the user will move through checkout              of the time
          with a maximum of two page clicks
        And maintain an https session with our site
BDD Tool Overview
Motivating Example

FizzBuzz

• Simple program that outputs a number and expects
  the player to guess which word applies:
   – Divisible by 3: “Fizz”
   – Divisible by 5: “Buzz”
   – Divisible by 3 and 5: “FizzBuzz”
jbehave
http://jbehave.org
How to write a BDD test in jbehave

• Write the story in a file with a <story_name>.story
  name
• Create the implementation in Java in a class named
  <StoryName>Steps.java
• Create an Runner, extending JUnitStory to link the
  story to the implementation
• Runner also can specify other details such as output
  formats
jbehave Story

• Story: Play fizz-buzz                      • Examples:
    As a math game player                       |value|display|
    I would like to play fizz-buzz              |1|1|
    So that I can learn how to calculate
                                                |2|2|
        multiples
                                                |3|fizz|
    Scenario: When to fizz                      |4|4|
       Given a fizz-buzz player                 |5|buzz|
       When I ask to fizz-buzz for 3            |6|fizz|
       Then I should get a fizz                 |7|7|
                                                |8|8|
    Scenario: When to fizz-buzz
                                                |9|fizz|
       Given a fizz-buzz player
                                                |10|buzz|
       When I ask to fizz-buzz for <value>
       Then I should get a <display>
                                                |15|fizz-buzz|
                                                |30|fizz-buzz|
jbehave Test Code

public class PlayFizzBuzzSteps            @Then("I should get a <display>")
{                                         @Alias("I should get a $display")
  private FizzBuzzer fb;                  public void isBuzz(@Named("display") final
  private String answer;                      String display)
                                          {
@Given("a fizz-buzz player")                assertThat(answer, is(display));
public void givenAFizzBuzzPlayer()        }
{ fb = new FizzBuzzer(3, 5);
}
@When("I ask to fizz-buzz for <value>")
@Alias("I ask to fizz-buzz for $value")
public void answer(@Named("value")
  final int value)
{ answer = fb.answer(value);
 }
jbehave Runner

public class PlayFizzBuzz extends JUnitStory {

    public PlayFizzBuzz()
    {
      addSteps(new InstanceStepsFactory(configuration(), new PlayFizzBuzzSteps())
       .createCandidateSteps());
    }
    @Override
    public Configuration configuration()
    {
      return super.configuration()
       .useStoryReporterBuilder(new StoryReporterBuilder().withFormats(Format.CONSOLE,
                                         Format.TXT,
                                         Format.HTML));
    }
}
easyb
http://easyb.org
FizzBuzz with easyb

narrative "while playing fizz-buzz", {
    as_a "fizz-buzz player"
    i_want "to automate my responses"
    so_that "i always win"
}
 scenario "fizzing", {
    given "a fizz-buzz player", {
      fb = new sf.projects.fizzbuzz.FizzBuzzer(3, 5)
    }
    when "3", {
      display = fb.answer(3);
    }
    then "should fizz", { display.shouldBe "fizz" }
}
Cucumber
http://cukes.info
Cucumber Feature

Feature: Play Fizz Buzz
  As a math game player
  I would like to play fizz-buzz
  So that I can learn how to calculate multiples

Scenario: When to fizz
  Given a fizz-buzz player
  When I ask to fizz-buzz for 3
  Then I should get a fizz
Cucumber Test Code

Given /a fizz-buzz player/ do |n|
  @fb = FizzerBuzzer.new
end

When /I ask to fizz-buzz for 3/ do |op|
 @result = @fb.answer op
end

Then /I should get a fizz/ do |result|
 @result.should == result.to_f
end
Compare and Contrast

Criteria            jbehave           easyb             Cucumber
Language written    Java              Groovy            Ruby
in
Languages           Any language on   Any language on   Ruby or (with
supported           the JVM           the JVM           Cuke4Duke) Java

Writing the story   Separate files    Single file       Separate files
and test



Running tests       Commandline, Ant, Commandline, Ant, Commandline or
                    Maven, IDEs like  Maven, IDEs like  (with Cuke4Duke)
                    Eclipse, JUnit    Eclipse, JUnit    Ant, Maven, IDEs
                                                        like Eclipse
Criteria            jbehave            easyb                Cucumber
Pending tests       Supported          Supported            Supported
feature
Running multiple    Supported          Supported            Supported
tests
Assertion feature   Can use Hamcrest   Uses ‘ensure’        Uses Ruby
                    matchers for       syntax, similar to   framework
                    assertion          assert
Installation        Easy               Easy                 Fair
Documentation       Good               Extremely good       No documentation
support                                                     but good
                                                            community
                                                            support
Year of inception   2003               2009                 2008
Author              Dan North          Andy Glover          Aslak Hellesøy
Summary

Given that you have heard this presentation
 And discovered that BDD is really fun
When you are thinking about testing strategies
Then you should give BDD a chance!

• Questions /Comments are welcome….

• Contacts
   – Ben Maynard: bmaynard@litle.com
   – Manodnya Lele: mlele@litle.com
Materials

Ready-made BDD project (Sualeh Fatehi)
   http://code.google.com/p/test-fizzbuzz/

Mais conteúdo relacionado

Semelhante a Behavior Driven Development: An Overview

BDD testing with cucumber
BDD testing with cucumberBDD testing with cucumber
BDD testing with cucumberDaniel Kummer
 
Behavior Driven Development
Behavior Driven DevelopmentBehavior Driven Development
Behavior Driven DevelopmentNETUserGroupBern
 
Effective Testing using Behavior-Driven Development
Effective Testing using Behavior-Driven DevelopmentEffective Testing using Behavior-Driven Development
Effective Testing using Behavior-Driven DevelopmentAlexander Kress
 
BDD - Keep love alive
BDD - Keep love aliveBDD - Keep love alive
BDD - Keep love aliveRory Preddy
 
ITB2017 - Intro to Behavior Driven Development
ITB2017 - Intro to Behavior Driven DevelopmentITB2017 - Intro to Behavior Driven Development
ITB2017 - Intro to Behavior Driven DevelopmentOrtus Solutions, Corp
 
German Testing Day 2015 - How behavior-driven development fuses developers an...
German Testing Day 2015 - How behavior-driven development fuses developers an...German Testing Day 2015 - How behavior-driven development fuses developers an...
German Testing Day 2015 - How behavior-driven development fuses developers an...Bastian Seehaus
 
Is Your API Misbehaving (workshop)
Is Your API Misbehaving (workshop)Is Your API Misbehaving (workshop)
Is Your API Misbehaving (workshop)Keith Casey
 
Bridging the gap between business and technology - Behaviour Driven Developme...
Bridging the gap between business and technology - Behaviour Driven Developme...Bridging the gap between business and technology - Behaviour Driven Developme...
Bridging the gap between business and technology - Behaviour Driven Developme...marcin_pajdzik
 
Myths and Challenges of Behaviour Driven Development
Myths and Challenges of Behaviour Driven DevelopmentMyths and Challenges of Behaviour Driven Development
Myths and Challenges of Behaviour Driven DevelopmentPankaj Nakhat
 
Building In Quality: The Beauty Of Behavior Driven Development (BDD)
Building In Quality: The Beauty Of Behavior Driven Development (BDD)Building In Quality: The Beauty Of Behavior Driven Development (BDD)
Building In Quality: The Beauty Of Behavior Driven Development (BDD)Synerzip
 
Behavior-Driven-Development (BDD) for Conversational Applications
Behavior-Driven-Development (BDD) for Conversational ApplicationsBehavior-Driven-Development (BDD) for Conversational Applications
Behavior-Driven-Development (BDD) for Conversational ApplicationsFlorian Georg
 
Behavior Driven Development - WPC 2011
Behavior Driven Development - WPC 2011Behavior Driven Development - WPC 2011
Behavior Driven Development - WPC 2011Fabio Armani
 
TDD & BDD in F# at Progressive F# Tutorials 2011
TDD & BDD in F# at Progressive F# Tutorials 2011TDD & BDD in F# at Progressive F# Tutorials 2011
TDD & BDD in F# at Progressive F# Tutorials 2011Phillip Trelford
 
Prashant technical practices-tdd for xebia event
Prashant   technical practices-tdd for xebia eventPrashant   technical practices-tdd for xebia event
Prashant technical practices-tdd for xebia eventXebia India
 
Moving away from legacy code with BDD
Moving away from legacy code with BDDMoving away from legacy code with BDD
Moving away from legacy code with BDDKonstantin Kudryashov
 
Building Your App SDK with Swift
Building Your App SDK with SwiftBuilding Your App SDK with Swift
Building Your App SDK with SwiftJordan Yaker
 
Why BaaS is crucial to early stage startups
Why BaaS is crucial to early stage startupsWhy BaaS is crucial to early stage startups
Why BaaS is crucial to early stage startupsJane Chung
 

Semelhante a Behavior Driven Development: An Overview (20)

BDD testing with cucumber
BDD testing with cucumberBDD testing with cucumber
BDD testing with cucumber
 
Behavior Driven Development
Behavior Driven DevelopmentBehavior Driven Development
Behavior Driven Development
 
Effective Testing using Behavior-Driven Development
Effective Testing using Behavior-Driven DevelopmentEffective Testing using Behavior-Driven Development
Effective Testing using Behavior-Driven Development
 
BDD - Keep love alive
BDD - Keep love aliveBDD - Keep love alive
BDD - Keep love alive
 
ITB2017 - Intro to Behavior Driven Development
ITB2017 - Intro to Behavior Driven DevelopmentITB2017 - Intro to Behavior Driven Development
ITB2017 - Intro to Behavior Driven Development
 
BDD & Cucumber
BDD & CucumberBDD & Cucumber
BDD & Cucumber
 
German Testing Day 2015 - How behavior-driven development fuses developers an...
German Testing Day 2015 - How behavior-driven development fuses developers an...German Testing Day 2015 - How behavior-driven development fuses developers an...
German Testing Day 2015 - How behavior-driven development fuses developers an...
 
Is Your API Misbehaving (workshop)
Is Your API Misbehaving (workshop)Is Your API Misbehaving (workshop)
Is Your API Misbehaving (workshop)
 
Automation in Drupal
Automation in DrupalAutomation in Drupal
Automation in Drupal
 
Bridging the gap between business and technology - Behaviour Driven Developme...
Bridging the gap between business and technology - Behaviour Driven Developme...Bridging the gap between business and technology - Behaviour Driven Developme...
Bridging the gap between business and technology - Behaviour Driven Developme...
 
Myths and Challenges of Behaviour Driven Development
Myths and Challenges of Behaviour Driven DevelopmentMyths and Challenges of Behaviour Driven Development
Myths and Challenges of Behaviour Driven Development
 
Building In Quality: The Beauty Of Behavior Driven Development (BDD)
Building In Quality: The Beauty Of Behavior Driven Development (BDD)Building In Quality: The Beauty Of Behavior Driven Development (BDD)
Building In Quality: The Beauty Of Behavior Driven Development (BDD)
 
BDD, Behat & Drupal
BDD, Behat & DrupalBDD, Behat & Drupal
BDD, Behat & Drupal
 
Behavior-Driven-Development (BDD) for Conversational Applications
Behavior-Driven-Development (BDD) for Conversational ApplicationsBehavior-Driven-Development (BDD) for Conversational Applications
Behavior-Driven-Development (BDD) for Conversational Applications
 
Behavior Driven Development - WPC 2011
Behavior Driven Development - WPC 2011Behavior Driven Development - WPC 2011
Behavior Driven Development - WPC 2011
 
TDD & BDD in F# at Progressive F# Tutorials 2011
TDD & BDD in F# at Progressive F# Tutorials 2011TDD & BDD in F# at Progressive F# Tutorials 2011
TDD & BDD in F# at Progressive F# Tutorials 2011
 
Prashant technical practices-tdd for xebia event
Prashant   technical practices-tdd for xebia eventPrashant   technical practices-tdd for xebia event
Prashant technical practices-tdd for xebia event
 
Moving away from legacy code with BDD
Moving away from legacy code with BDDMoving away from legacy code with BDD
Moving away from legacy code with BDD
 
Building Your App SDK with Swift
Building Your App SDK with SwiftBuilding Your App SDK with Swift
Building Your App SDK with Swift
 
Why BaaS is crucial to early stage startups
Why BaaS is crucial to early stage startupsWhy BaaS is crucial to early stage startups
Why BaaS is crucial to early stage startups
 

Último

Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 

Último (20)

Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 

Behavior Driven Development: An Overview

  • 2. About Litle & Co. • Litle & Co. is a leading financial technology company • One of the largest, private, non-bank proprietary processing platforms serving the Card-not-Present marketplace • Specific expertise in Card-not-Present transactions, deep knowledge of Best Practices, Card Association Regulations, PCI and Data Security requirements • Litle Vault is the 2011 Stevie Award Winner in New Product & Services (Web/IVR) category
  • 3. Outline • What is BDD? • History • Why not TDD? • The Story • Tools: Compare and Contrast • Comments and Questions
  • 4. What is BDD? BDD can turn an idea for a requirement into implemented, tested, production-ready code simply and effectively, as long as the requirement is specific enough that everyone knows what’s going on. -Dan North
  • 5. What is BDD? BDD can turn an idea for a requirement into implemented, tested, production-ready code simply and effectively, as long as the requirement is specific enough that everyone knows what’s going on. -Dan North
  • 6. What is BDD? BDD can turn an idea for a requirement into implemented, tested, production-ready code simply and effectively, as long as the requirement is specific enough that everyone knows what’s going on. -Dan North
  • 7. What is BDD? BDD can turn an idea for a requirement into implemented, tested, production-ready code simply and effectively, as long as the requirement is specific enough that everyone knows what’s going on. -Dan North
  • 8. History 1999 Test First Development 2003 Behavior Driven Development
  • 9. History 1999 Test First Development 2003 Behavior Driven Development Kent Beck
  • 10. History Kent Beck Dan North
  • 11. Why not TDD? BAs / Program Managers Techies
  • 12. Why not TDD? BAs / Program Managers Techies • Requirements docs not technical enough
  • 13. Why not TDD? BAs / Program Managers Techies • Requirements docs not • Test cases and unit tests technical enough too technical
  • 15. Why not TDD? BDD Given… When… Then…
  • 17. Why not TDD? TDD Building the thing right BDD
  • 18. Why not TDD? TDD Building the thing right BDD Building the right thing
  • 20. BDD: The Story • A way to describe the requirement such that everyone the business folks, the analyst, the developer, the tester, and others has a common understanding of the scope of the work. • A description of a requirement and its business benefit, and a set of criteria by which we all agree that it is “done”. • Remember: Given… When… Then…
  • 21. BDD: The Story • The title should describe an activity Describes actual behavior by a user of the system. • The narrative should include a role, a feature and a benefit “As a [role] I want [feature] so that [benefit]“ • The scenario should be described in terms of givens, events and outcomes Given… When… Then…
  • 22. BDD: The Story Title Easier user experience with online site Narrative As a(n) active, participating member of my company I want a better online website So that users can easily use and purchase on our website Scenario 1: Smooth Checkout Process Scenario 2: Better Site Uptime Given our world class web sales app Given that a potential buyer And items in my shopping cart When a user enters our URL into a browser When a user clicks “checkout” Then the site will be available over 99.97% Then the user will move through checkout of the time with a maximum of two page clicks And maintain an https session with our site
  • 24. Motivating Example FizzBuzz • Simple program that outputs a number and expects the player to guess which word applies: – Divisible by 3: “Fizz” – Divisible by 5: “Buzz” – Divisible by 3 and 5: “FizzBuzz”
  • 26. How to write a BDD test in jbehave • Write the story in a file with a <story_name>.story name • Create the implementation in Java in a class named <StoryName>Steps.java • Create an Runner, extending JUnitStory to link the story to the implementation • Runner also can specify other details such as output formats
  • 27. jbehave Story • Story: Play fizz-buzz • Examples: As a math game player |value|display| I would like to play fizz-buzz |1|1| So that I can learn how to calculate |2|2| multiples |3|fizz| Scenario: When to fizz |4|4| Given a fizz-buzz player |5|buzz| When I ask to fizz-buzz for 3 |6|fizz| Then I should get a fizz |7|7| |8|8| Scenario: When to fizz-buzz |9|fizz| Given a fizz-buzz player |10|buzz| When I ask to fizz-buzz for <value> Then I should get a <display> |15|fizz-buzz| |30|fizz-buzz|
  • 28. jbehave Test Code public class PlayFizzBuzzSteps @Then("I should get a <display>") { @Alias("I should get a $display") private FizzBuzzer fb; public void isBuzz(@Named("display") final private String answer; String display) { @Given("a fizz-buzz player") assertThat(answer, is(display)); public void givenAFizzBuzzPlayer() } { fb = new FizzBuzzer(3, 5); } @When("I ask to fizz-buzz for <value>") @Alias("I ask to fizz-buzz for $value") public void answer(@Named("value") final int value) { answer = fb.answer(value); }
  • 29. jbehave Runner public class PlayFizzBuzz extends JUnitStory { public PlayFizzBuzz() { addSteps(new InstanceStepsFactory(configuration(), new PlayFizzBuzzSteps()) .createCandidateSteps()); } @Override public Configuration configuration() { return super.configuration() .useStoryReporterBuilder(new StoryReporterBuilder().withFormats(Format.CONSOLE, Format.TXT, Format.HTML)); } }
  • 31. FizzBuzz with easyb narrative "while playing fizz-buzz", { as_a "fizz-buzz player" i_want "to automate my responses" so_that "i always win" } scenario "fizzing", { given "a fizz-buzz player", { fb = new sf.projects.fizzbuzz.FizzBuzzer(3, 5) } when "3", { display = fb.answer(3); } then "should fizz", { display.shouldBe "fizz" } }
  • 33. Cucumber Feature Feature: Play Fizz Buzz As a math game player I would like to play fizz-buzz So that I can learn how to calculate multiples Scenario: When to fizz Given a fizz-buzz player When I ask to fizz-buzz for 3 Then I should get a fizz
  • 34. Cucumber Test Code Given /a fizz-buzz player/ do |n| @fb = FizzerBuzzer.new end When /I ask to fizz-buzz for 3/ do |op| @result = @fb.answer op end Then /I should get a fizz/ do |result| @result.should == result.to_f end
  • 35. Compare and Contrast Criteria jbehave easyb Cucumber Language written Java Groovy Ruby in Languages Any language on Any language on Ruby or (with supported the JVM the JVM Cuke4Duke) Java Writing the story Separate files Single file Separate files and test Running tests Commandline, Ant, Commandline, Ant, Commandline or Maven, IDEs like Maven, IDEs like (with Cuke4Duke) Eclipse, JUnit Eclipse, JUnit Ant, Maven, IDEs like Eclipse
  • 36. Criteria jbehave easyb Cucumber Pending tests Supported Supported Supported feature Running multiple Supported Supported Supported tests Assertion feature Can use Hamcrest Uses ‘ensure’ Uses Ruby matchers for syntax, similar to framework assertion assert Installation Easy Easy Fair Documentation Good Extremely good No documentation support but good community support Year of inception 2003 2009 2008 Author Dan North Andy Glover Aslak Hellesøy
  • 37. Summary Given that you have heard this presentation And discovered that BDD is really fun When you are thinking about testing strategies Then you should give BDD a chance! • Questions /Comments are welcome…. • Contacts – Ben Maynard: bmaynard@litle.com – Manodnya Lele: mlele@litle.com
  • 38. Materials Ready-made BDD project (Sualeh Fatehi) http://code.google.com/p/test-fizzbuzz/