beyond given/when/then - why diving into cucumber is the wrong approach to adopting bdd
TRANSCRIPT
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
BEYOND GIVEN/WHEN/THEN Why diving into Cucumber is the wrong approach to adopting BDD
@wakaleo
www.johnfergusonsmart.com
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
“You do BDD? Cool, I love test automation!”
“We couldn’t do BDD this sprint because we didn’t have any UI stories”
“Yes, we do BDD here, the tester uses Cucumber for all his tests”
“We're dev complete so let's write some Bee-Dee-Dees”
“The Jira story is not complete until the BA defines their given-when-thens”
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
BDD is NOT
Using “Given-When-Then” in your stories
Though you may find the Given/When/Then structure useful at certain stages when you practice BDD
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
BDD is NOT
Using Cucumber to write automated web tests
Though you may find Cucumber useful at certain stages when you practice BDD
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
BDD ISA way of collaborating
using conversations about examples and business rules to deliver better software
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
To deliver software that matters
And a common language to build a shared understanding
Using rules and examples at multiple levels
Collaborate to discover requirements and identify uncertainty
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Business
BA
Developers
Testers
As a corporate frequent flyer I want to earn points on my business flights So that I can get discounts on my holiday flights
Examples
Rules
Acceptance Criteria
SHARED UNDERSTANDING
Executable Specifications
Scenario: First class earns double points Given I fly from London to Paris When I am in First Class Then I should earn twice as many points
Scenario: First class earns double points Given I fly from London to Paris When I am in First Class Then I should earn twice as many points
Development and exploratory testing
Software that matters
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Discover
Define
Formalise
Automate
Gherkin
Cucumber
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Gherkins get people together
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Scenario: Applying for a joint credit card with insufficient combined income The combined income must be over £10,000
Given Susan has an income of £3000 And Jim has an income of £2500 When Susan and Jim apply for a joint credit card online Then the application should be refused
What rule are we illustrating
Preconditions
Action
Expected outcome
Gherkin: a simple but flexible format
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Feature: Credit card financial checks In order to avoid bad debts As a financial institution I want to ensure that a customer’s credit limit is in line with the their earnings
Scenario Outline: The maximum credit card limit depends on the customer's salary
A customer needs a salary of at least £10,000. There are two types of card, one with a limit of £2500, and another with a limit of £5000
Given an individual customer with an annual salary of <Salary> When the customer applies for a credit card Then the credit card application should be <Approved or Refused> And if approved, the maximum credit limit should be <Max Limit> Examples:
| Salary | Approved or Refused | Max Limit | Notes | | £5000 | Refused | 0 | must be over £10,000 | | £15,000 | Approved | £2500 | Up to £15,000 | | £25,000 | Approved | £5000 | Over £15,000 | | £100,000 | Approved | £5000 | Max limit £5000 |
Gherkin: a simple but flexible formatWhy
What
How
Examples
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
“I wrote you a long letter because I didn’t have time to write a short one”
- Mark Twain
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Feature: Display customer details As a user I want to view the customer's personal profile In order to access the personal information on the customer
Scenario: Customer Profile field 'Gender' Given I am logged into the application And I have displayed the customer When I view the customer profile on the summary screen Then I should see the Gender field (field type: Dropdown - read only information) Scenario: Customer Profile ‘DOB/Age' field Given I am logged into the application And I have displayed the customer When I view the Personal Profile on the Summary screen Then I should see the DOB/Age field (DOB field type: Date, format: dd mmm yyyy - read only) (Age field type:read only - numeric) under Personal Profile And it should be blank if no value returned
Scenario: Customer Profile 'Marital Status' field Scenario: Customer Profile 'Dependents' field
The Gherkin notation is not a guarantee of quality
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
When G/W/T happens too early
“The Jira story is not complete until the BA defines their given-when-thens”
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Scenario Outline: User tries to log on to application with invalid credentials Given I am a registered user When I login as <username> with password <password> Then I should not be allowed to logon And I should see the error message <error-message> Examples: | username | password | message | | scott | | Please enter a password | | | tiger | Please enter a username | | scott | wrong | Invalid username or password |
Sure, but what else?
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
When G/W/T happens too late
“Yes, we do BDD here, the tester uses Cucumber for all his tests”
“We're dev complete so let's write some Bee-Dee-Dees”
“You do BDD? Cool, I love test automation!”
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
A better approach?
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
establishes validatesShared Understanding
Collaboration Formalisation
Sprint Planning Sprint Delivery
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Advocate
Sceptic Cross-Examiner
What should it do?
How can it work?What can go wrong? How can we prove it works?
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Discover
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Framing the question
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
✓Impact Mapping ✓Story Mapping ✓Event Storming
The Bigger Picture
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Define
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Identify the outputs
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Find Key Rules and Examples
Rich guy Joe successfully
orders a card
Student Billy can’t order a card because his income is too low
Salary must be sufficient
✓Example Mapping
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Explore flows
Rich guy Joe successfully
orders a card
Applies for card
His credit rating is OK
His salary is sufficient
An account is created
The credit card is posted
✓Feature Mapping
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Explore variations
Rich guy Joe successfully
orders a card
Applies for card
His credit rating is OK
His salary is sufficient
An account is created
The credit card is posted
Student Billy can’t order a
card
Applies for card
His credit rating is OK
His salary is not sufficient
His application is rejected
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Formalise
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Write executable specifications
Feature: Credit card financial checks In order to avoid bad debts As a financial institution I want to ensure that a customer’s credit limit is in line with the their earnings
Scenario Outline: The maximum credit card limit depends on the customer's salary
A customer needs a salary of at least £10,000. There are two types of card, one with a limit of £2500, and another with a limit of £5000
Given an individual customer with an annual salary of <Salary> When the customer applies for a credit card Then the credit card application should be <Approved or Refused> And if approved, the maximum credit limit should be <Max Limit> Examples:
| Salary | Approved or Refused | Max Limit | Notes | | £5000 | Refused | 0 | must be over £10,000 | | £15,000 | Approved | £2500 | Up to £15,000 | | £25,000 | Approved | £5000 | Over £15,000 | | £100,000 | Approved | £5000 | Max limit £5000 |
#DevoxxPL#DevoxxPL @wakaleo #beyondgwtAutomate
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Automate
Feature: Credit card financial checks In order to avoid bad debts As a financial institution I want to ensure that a customer’s credit limit is in line with the their earnings
Scenario Outline: The maximum credit card limit depends on the customer's salary
A customer needs a salary of at least £10,000. There are two types of card, one with a limit of £2500, and another with a limit of £5000
Given an individual customer with an annual salary of <Salary> When the customer applies for a credit card Then the credit card application should be <Approved or Refused> And if approved, the maximum credit limit should be <Max Limit> Examples:
| Salary | Approved or Refused | Max Limit | Notes | | £5000 | Refused | 0 | must be over £10,000 | | £15,000 | Approved | £2500 | Up to £15,000 | | £25,000 | Approved | £5000 | Over £15,000 | | £100,000 | Approved | £5000 | Max limit £5000 |
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Example Mapping
Examples and Rules
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Example Mapping
Story
Rules
Examples
Questions
Examples and Rules
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Feature Mapping
Exploring the flow
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Feature Mapping
Exploring the flow
Story
A rule
An Example
Steps
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Feature Mapping
Exploring the flow
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Feature Mapping
Exploring the flow
“Poi
nts
per
dest
inat
ion”
sto
ry“D
iffer
ent t
rave
l cl
asse
s” s
tory
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
The six stages of BDD Maturity
Name Focus Benefits
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
The six stages of BDD Maturity
Name Focus Benefits
Siloed
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
The six stages of BDD Maturity
Name Focus Benefits
Colocated Breaking down the silos Reduce delivery bottlenecks
Siloed
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
The six stages of BDD Maturity
Name Focus Benefits
Engaged Improving collaboration Prevent bugs and deliver the right product
Colocated Breaking down the silos Reduce delivery bottlenecks
Siloed
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
The six stages of BDD Maturity
Name Focus Benefits
Mechanised Effective automation Deliver the right product faster
Engaged Improving collaboration Prevent bugs and deliver the right product
Colocated Breaking down the silos Reduce delivery bottlenecks
Siloed
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
The six stages of BDD Maturity
Name Focus Benefits
Pioneering Leverage Delight the customer
Mechanised Effective automation Deliver the right product faster
Engaged Improving collaboration Prevent bugs and deliver the right product
Colocated Breaking down the silos Reduce delivery bottlenecks
Siloed
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
The six stages of BDD Maturity
Name Focus Benefits
Projecting Experimentation Deliver value faster, and learning from it
Pioneering Leverage Delight the customer
Mechanised Effective automation Deliver the right product faster
Engaged Improving collaboration Prevent bugs and deliver the right product
Colocated Breaking down the silos Reduce delivery bottlenecks
Siloed
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
Would you like to know more?
Subscribe to the newsletter
https://www.johnfergusonsmart.com
Read the book!
#DevoxxPL#DevoxxPL @wakaleo #beyondgwt
QUESTIONS?
www.johnfergusonsmart.com
@wakaleo