• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Behavior Driven Development:  An Overview
 

Behavior Driven Development: An Overview

on

  • 2,159 views

 

Statistics

Views

Total Views
2,159
Views on SlideShare
2,159
Embed Views
0

Actions

Likes
2
Downloads
86
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Behavior Driven Development:  An Overview Behavior Driven Development: An Overview Presentation Transcript

    • BehaviorDrivenDevelopmentManodnya LeleBen 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
    • History1999 Test First Development 2003 Behavior Driven Development
    • History1999 Test First Development 2003 Behavior Driven Development Kent Beck
    • HistoryKent 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? BDDGiven… When… Then…
    • Why not TDD?TDD BDD
    • Why not TDD?TDDBuilding the thing right BDD
    • Why not TDD?TDDBuilding 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 StoryTitle Easier user experience with online siteNarrative 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 ExampleFizzBuzz• 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”
    • jbehavehttp://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 Codepublic 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 Runnerpublic 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)); }}
    • easybhttp://easyb.org
    • FizzBuzz with easybnarrative "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" }}
    • Cucumberhttp://cukes.info
    • Cucumber FeatureFeature: Play Fizz Buzz As a math game player I would like to play fizz-buzz So that I can learn how to calculate multiplesScenario: When to fizz Given a fizz-buzz player When I ask to fizz-buzz for 3 Then I should get a fizz
    • Cucumber Test CodeGiven /a fizz-buzz player/ do |n| @fb = FizzerBuzzer.newendWhen /I ask to fizz-buzz for 3/ do |op| @result = @fb.answer opendThen /I should get a fizz/ do |result| @result.should == result.to_fend
    • Compare and ContrastCriteria jbehave easyb CucumberLanguage written Java Groovy RubyinLanguages Any language on Any language on Ruby or (withsupported the JVM the JVM Cuke4Duke) JavaWriting the story Separate files Single file Separate filesand testRunning 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 CucumberPending tests Supported Supported SupportedfeatureRunning multiple Supported Supported SupportedtestsAssertion feature Can use Hamcrest Uses ‘ensure’ Uses Ruby matchers for syntax, similar to framework assertion assertInstallation Easy Easy FairDocumentation Good Extremely good No documentationsupport but good community supportYear of inception 2003 2009 2008Author Dan North Andy Glover Aslak Hellesøy
    • SummaryGiven that you have heard this presentation And discovered that BDD is really funWhen you are thinking about testing strategiesThen you should give BDD a chance!• Questions /Comments are welcome….• Contacts – Ben Maynard: bmaynard@litle.com – Manodnya Lele: mlele@litle.com
    • MaterialsReady-made BDD project (Sualeh Fatehi) http://code.google.com/p/test-fizzbuzz/