BDD, Gherkin, Cucumber
and why we need it
7
Impact Mapping
Story Mapping
Establishing a shared understanding
Why?
How?
Code
Epics
Deliverables, Outputs
Impacts, Outcomes
Easier to define upfront Harder to define upfront
User Activities
User Stories
Goals
Acceptance
Criteria
Bug
reports
Isolated,
formalized
examples
Examples
8
Collecting Acceptance Criter
“I would try to put a book into the
shopping cart …”
“I’d check whether the shopping cart
is empty, when I enter the shop …”
As a potential customer
I want to collect books in a shopping cart
So that I can order several books at once.
“Imagine this story is
already implemented:
how would you verify it?”
“I would try to add 1000 books to
the shopping cart …”
8
Collecting Acceptance Criter
“I would try to put a book into the
shopping cart …”
“I would try to remove a book
from the shopping cart…”
“I’d check whether the shopping cart
is empty, when I enter the shop …”
Books can be added to
shopping cart.
Books can be removed from
shopping cart.
Shopping cart should be empty
when entering the shop.
... ? …
As a potential customer
I want to collect books in a shopping cart
So that I can order several books at once.
“Imagine this story is
already implemented:
how would you verify it?”
“I would try to add 1000 books to
the shopping cart …”
9
Using
examples
12
Discussion of acceptance criteria
{
}
We would like to encourage new users to
buy in our shop.
Therefore we offer 10% discount for their
first order.
Original idea for the illustration: George Dinwiddie
http://blog.gdinwiddie.com/
12
Discussion of acceptance criteria
{
}
Register as “bart_bookworm”
Go to “/catalog/search”
Enter “ISBN-0955683610”
Click “Search”
Click “Add to Cart”
Click “View Cart”
Verify “Subtotal” is “$33.75”
We would like to encourage new users to
buy in our shop.
Therefore we offer 10% discount for their
first order.
Original idea for the illustration: George Dinwiddie
http://blog.gdinwiddie.com/
16
Discussion of acceptance criteria
publicvoidTestInitialOrderDiscount()
{
Customer newCustomer= newCustomer();
Order newOrder= newOrder(newCustomer);
newOrder.AddBook(
Catalog.Find(“ISBN-0955683610”)
);
Assert.Equals(33.75,
newOrder.Subtotal);
}
Register as “bart_bookworm”
Go to “/catalog/search”
Enter “ISBN-0955683610”
Click “Search”
Click “Add to Cart”
Click “View Cart”
Verify “Subtotal” is “$33.75”
We would like to encourage new users to
buy in our shop.
Therefore we offer 10% discount for their
first order.
Original idea for the illustration: George Dinwiddie
http://blog.gdinwiddie.com/
13
Specification by Example
Examples …
• make abstract descriptions
better understandable
However …
• examples are usually not formally
exchanged or documented
Examples Tests
Requirements
consist of
describe verify
fulfillment of
16
Discussionofacceptancecrite
publicvoidTestInitialOrderDiscount()
{
Customer newCustomer= newCustomer();
Order newOrder= newOrder(newCustomer);
newOrder.AddBook(
Catalog.Find(“ISBN-0955683610”)
);
Assert.Equals(33.75,
newOrder.Subtotal);
}
Register as “bart_bookworm”
Go to “/catalog/search”
Enter “ISBN-0955683610”
Click “Search”
Click “Add to Cart”
Click “View Cart”
Verify “Subtotal” is “$33.75”
We would like to encourage new users to
buy in our shop.
Therefore we offer 10% discount for their
first order.
Original idea for the illustration: George Dinwiddie
http://blog.gdinwiddie.com/
17
… with formalized examples
Given
When the user adds a book with
the price of EUR 37.5 into the shopping cart
Then the shopping cart sub-total is EUR 33.75.
Original idea for the illustration: George Dinwiddie
http://blog.gdinwidiee.com
the user has not ordered yet
18
Discover hidden assumptions
Actually, this is not quite right:
Books on sale should be excluded.
Original idea for the illustration: George Dinwiddie
http://blog.gdinwidiee.com
19
Collaboration: 3 amigos
“Happy
Path”
Technical
feasability
Exceptions,
border cases
Original idea for the illustration: George Dinwiddie
http://blog.gdinwidiee.com
20
Abstract acceptance criteria
Asa shop visitor
I want to collect books in my shopping basket
so that I can purchase multiple books at once.
Books can be added to the shopping basket
Books can be removed from the shopping basket
Shopping basket is initially empty
The same book can be added multiple times to the shopping
basket
21
Examples in Gherkin
As a shop visitor
I want to collect books in my shopping basket
so that I can purchase multiple books at once.
Books can be added to the shopping basket
Given my shopping basket is empty
When I add the book “Harry Potter” to my shopping basket
Thenmy shopping basket should contain 1 copy of “Harry Potter”
22
Asa shop visitor
I want to collect books in my shopping basket
so that I can purchase multiple books at once.
Examples in Gherkin
Given my shopping basket contains 1 copy of “Harry Potter”
When I add the book “Harry Potter” to my shopping basket
Thenmy shopping basket should contain 2 copies of “Harry Potter”
The same book can be added multiple times to the shopping basket
23
The same book can be added multiple times to the shopping basket
Structure of examples
Given my shopping basket contains 1 copy of “Harry Potter”
When I add the book “Harry Potter” to my shopping basket
Then my shopping basket should contain 2 copies of “Harry Potter”
Title: Describes intention/abstract acceptance criterion
Arrange: Context, initial state of the system
Act: Execution of the feature
Assert: Assertion of observable behaviour
And I should see the warning: “Book already existed in basket”
Triple-A
constraint
“Checks”
Chaining
up steps
25
Purpose of the examples
• Shared understanding of
acceptance criteria
• Documentation:
system details
• Regression-tests:
violated assumptions
26
Continuous validation with automation
Given my shopping basket contains 1 copy of “Harry Potter”
When I add the book “Harry Potter” to my shopping basket
Then my shopping basket should contain 2 copies of “Harry Potter”
System
„Step Definitions“ are binding individual steps
to an automatable interface of the application.
Automatable
interface
UI
Automation
Automation does not necessarily have to bind to the UI.
Automatability of system is supported/evolving with development.
24
Automation
examples
24
NO
https://github.com/radiant/radiant/tree/master/features/
https://github.com/carrierwaveuploader/carrierwave/tree/master/features
https://github.com/webjam/webjam/tree/master/features
Better look at real projects
43
Conclusions
• Examples
• Illustrate abstract requirements
• Trigger new questions: collaborative discovery
• Shared understanding
• Living documentation
• Automatically validated examples
• Business readable regression tests
• Reliable source of truth
• Gherkin based automated examples
• Open source, cross-platform
• Requirement details versioned with source code
44
Gherkin based automationtools
www.cukes.info
www.behat.org
Ruby, Java, JavaScript, C++
www.specflow.org
.NET, Mono, Silverlight, WP7
PHP
45
Books

«BDD, Gherkin, Cucumber and why we need it for successful product development»

  • 1.
  • 2.
    7 Impact Mapping Story Mapping Establishinga shared understanding Why? How? Code Epics Deliverables, Outputs Impacts, Outcomes Easier to define upfront Harder to define upfront User Activities User Stories Goals Acceptance Criteria Bug reports Isolated, formalized examples Examples
  • 3.
    8 Collecting Acceptance Criter “Iwould try to put a book into the shopping cart …” “I’d check whether the shopping cart is empty, when I enter the shop …” As a potential customer I want to collect books in a shopping cart So that I can order several books at once. “Imagine this story is already implemented: how would you verify it?” “I would try to add 1000 books to the shopping cart …”
  • 4.
    8 Collecting Acceptance Criter “Iwould try to put a book into the shopping cart …” “I would try to remove a book from the shopping cart…” “I’d check whether the shopping cart is empty, when I enter the shop …” Books can be added to shopping cart. Books can be removed from shopping cart. Shopping cart should be empty when entering the shop. ... ? … As a potential customer I want to collect books in a shopping cart So that I can order several books at once. “Imagine this story is already implemented: how would you verify it?” “I would try to add 1000 books to the shopping cart …”
  • 5.
  • 6.
    12 Discussion of acceptancecriteria { } We would like to encourage new users to buy in our shop. Therefore we offer 10% discount for their first order. Original idea for the illustration: George Dinwiddie http://blog.gdinwiddie.com/
  • 7.
    12 Discussion of acceptancecriteria { } Register as “bart_bookworm” Go to “/catalog/search” Enter “ISBN-0955683610” Click “Search” Click “Add to Cart” Click “View Cart” Verify “Subtotal” is “$33.75” We would like to encourage new users to buy in our shop. Therefore we offer 10% discount for their first order. Original idea for the illustration: George Dinwiddie http://blog.gdinwiddie.com/
  • 8.
    16 Discussion of acceptancecriteria publicvoidTestInitialOrderDiscount() { Customer newCustomer= newCustomer(); Order newOrder= newOrder(newCustomer); newOrder.AddBook( Catalog.Find(“ISBN-0955683610”) ); Assert.Equals(33.75, newOrder.Subtotal); } Register as “bart_bookworm” Go to “/catalog/search” Enter “ISBN-0955683610” Click “Search” Click “Add to Cart” Click “View Cart” Verify “Subtotal” is “$33.75” We would like to encourage new users to buy in our shop. Therefore we offer 10% discount for their first order. Original idea for the illustration: George Dinwiddie http://blog.gdinwiddie.com/
  • 9.
    13 Specification by Example Examples… • make abstract descriptions better understandable However … • examples are usually not formally exchanged or documented Examples Tests Requirements consist of describe verify fulfillment of
  • 10.
    16 Discussionofacceptancecrite publicvoidTestInitialOrderDiscount() { Customer newCustomer= newCustomer(); OrdernewOrder= newOrder(newCustomer); newOrder.AddBook( Catalog.Find(“ISBN-0955683610”) ); Assert.Equals(33.75, newOrder.Subtotal); } Register as “bart_bookworm” Go to “/catalog/search” Enter “ISBN-0955683610” Click “Search” Click “Add to Cart” Click “View Cart” Verify “Subtotal” is “$33.75” We would like to encourage new users to buy in our shop. Therefore we offer 10% discount for their first order. Original idea for the illustration: George Dinwiddie http://blog.gdinwiddie.com/
  • 11.
    17 … with formalizedexamples Given When the user adds a book with the price of EUR 37.5 into the shopping cart Then the shopping cart sub-total is EUR 33.75. Original idea for the illustration: George Dinwiddie http://blog.gdinwidiee.com the user has not ordered yet
  • 12.
    18 Discover hidden assumptions Actually,this is not quite right: Books on sale should be excluded. Original idea for the illustration: George Dinwiddie http://blog.gdinwidiee.com
  • 13.
    19 Collaboration: 3 amigos “Happy Path” Technical feasability Exceptions, bordercases Original idea for the illustration: George Dinwiddie http://blog.gdinwidiee.com
  • 14.
    20 Abstract acceptance criteria Asashop visitor I want to collect books in my shopping basket so that I can purchase multiple books at once. Books can be added to the shopping basket Books can be removed from the shopping basket Shopping basket is initially empty The same book can be added multiple times to the shopping basket
  • 15.
    21 Examples in Gherkin Asa shop visitor I want to collect books in my shopping basket so that I can purchase multiple books at once. Books can be added to the shopping basket Given my shopping basket is empty When I add the book “Harry Potter” to my shopping basket Thenmy shopping basket should contain 1 copy of “Harry Potter”
  • 16.
    22 Asa shop visitor Iwant to collect books in my shopping basket so that I can purchase multiple books at once. Examples in Gherkin Given my shopping basket contains 1 copy of “Harry Potter” When I add the book “Harry Potter” to my shopping basket Thenmy shopping basket should contain 2 copies of “Harry Potter” The same book can be added multiple times to the shopping basket
  • 17.
    23 The same bookcan be added multiple times to the shopping basket Structure of examples Given my shopping basket contains 1 copy of “Harry Potter” When I add the book “Harry Potter” to my shopping basket Then my shopping basket should contain 2 copies of “Harry Potter” Title: Describes intention/abstract acceptance criterion Arrange: Context, initial state of the system Act: Execution of the feature Assert: Assertion of observable behaviour And I should see the warning: “Book already existed in basket” Triple-A constraint “Checks” Chaining up steps
  • 18.
    25 Purpose of theexamples • Shared understanding of acceptance criteria • Documentation: system details • Regression-tests: violated assumptions
  • 19.
    26 Continuous validation withautomation Given my shopping basket contains 1 copy of “Harry Potter” When I add the book “Harry Potter” to my shopping basket Then my shopping basket should contain 2 copies of “Harry Potter” System „Step Definitions“ are binding individual steps to an automatable interface of the application. Automatable interface UI Automation Automation does not necessarily have to bind to the UI. Automatability of system is supported/evolving with development.
  • 20.
  • 21.
  • 22.
  • 23.
    43 Conclusions • Examples • Illustrateabstract requirements • Trigger new questions: collaborative discovery • Shared understanding • Living documentation • Automatically validated examples • Business readable regression tests • Reliable source of truth • Gherkin based automated examples • Open source, cross-platform • Requirement details versioned with source code
  • 24.
    44 Gherkin based automationtools www.cukes.info www.behat.org Ruby,Java, JavaScript, C++ www.specflow.org .NET, Mono, Silverlight, WP7 PHP
  • 25.