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
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));
}
}
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