BDD Anti-patterns

83
Stories from the trenches about how not to do BDD Twelve BDD Antipatterns

Transcript of BDD Anti-patterns

Stories from the trenches about how not to do BDD

Twelve BDD Antipatterns

John Ferguson Smart

Introductions“I help teams of smart people

learn to work together more efficiently, to deliver better software faster”

To deliver software that matters

And a common language to build a shared understanding

Using examples at multiple levels

Collaborate to discover requirements and identify uncertainty

The essence of BDD

To deliver software that matters

And a common language to build a shared understanding

Using examples at multiple levels

Collaborate to discover requirements and identify uncertainty

The essence of BDD

To deliver software that matters

And a common language to build a shared understanding

Using examples at multiple levels

Collaborate to discover requirements and identify uncertainty

The essence of BDD

To deliver software that matters

And a common language to build a shared understanding

Using examples at multiple levels

Collaborate to discover requirements and identify uncertainty

The essence of BDD

To deliver software that matters

And a common language to build a shared understanding

Using examples at multiple levels

Collaborate to discover requirements and identify uncertainty

The essence of BDD

The business owner tells the business

analyst what he wants

12 The business

analyst writes a requirements

document

3 The developer translates the requirements into software

4 The tester translates the requirements

into test cases 5 The technical writer translates

the software into functional and technical

documentationA traditional development process

How does it work?

The business owner tells the business

analyst what he wants

12 The business

analyst writes a requirements

document

3 The developer translates the requirements into software

4 The tester translates the requirements

into test cases 5 The technical writer translates

the software into functional and technical

documentationA traditional development process

How does it work?

The business owner tells the business

analyst what he wants

12 The business

analyst writes a requirements

document

3 The developer translates the requirements into software

4 The tester translates the requirements

into test cases 5 The technical writer translates

the software into functional and technical

documentationA traditional development process

How does it work?

The business owner tells the business

analyst what he wants

12 The business

analyst writes a requirements

document

3 The developer translates the requirements into software

4 The tester translates the requirements

into test cases 5 The technical writer translates

the software into functional and technical

documentationA traditional development process

How does it work?

The business owner tells the business

analyst what he wants

12 The business

analyst writes a requirements

document

3 The developer translates the requirements into software

4 The tester translates the requirements

into test cases 5 The technical writer translates

the software into functional and technical

documentationA traditional development process

How does it work?

The business owner tells the business

analyst what he wants

12 The business

analyst writes a requirements

document

3 The developer translates the requirements into software

4 The tester translates the requirements

into test cases 5 The technical writer translates

the software into functional and technical

documentationA traditional development process

How does it work?

The business owner tells the business

analyst what he wants

12 The business

analyst writes a requirements

document

3 The developer translates the requirements into software

4 The tester translates the requirements

into test cases 5 The technical writer translates

the software into functional and technical

documentationA traditional development process

How does it work?

The business owner tells the business

analyst what he wants

12 The business

analyst writes a requirements

document

3 The developer translates the requirements into software

4 The tester translates the requirements

into test cases 5 The technical writer translates

the software into functional and technical

documentationA traditional development process

How does it work?

The business owner tells the business

analyst what he wants

12 The business

analyst writes a requirements

document

3 The developer translates the requirements into software

4 The tester translates the requirements

into test cases 5 The technical writer translates

the software into functional and technical

documentationA traditional development process

How does it work?

The business owner tells the business

analyst what he wants

12 The business

analyst writes a requirements

document

3 The developer translates the requirements into software

4 The tester translates the requirements

into test cases 5 The technical writer translates

the software into functional and technical

documentationA traditional development process

How does it work?

The business owner tells the business

analyst what he wants

12 The business

analyst writes a requirements

document

3 The developer translates the requirements into software

4 The tester translates the requirements

into test cases 5 The technical writer translates

the software into functional and technical

documentationA traditional development process

How does it work?

How does it work?

The business owner and the business

analyst have a conversation about

what he needs.

1

2

3

4 The tester uses these scenarios as the basis for

her tests

5

The automated tests provide feedback on progress and help

document the application

The business analyst, the developer and the tester elaborate the

requirements together.

The scenarios guide the developer and act as

automated tests

They define requirements as

structured, English-language format

"scenarios"

A BDD development process

How does it work?

The business owner and the business

analyst have a conversation about

what he needs.

1

2

3

4 The tester uses these scenarios as the basis for

her tests

5

The automated tests provide feedback on progress and help

document the application

The business analyst, the developer and the tester elaborate the

requirements together.

The scenarios guide the developer and act as

automated tests

They define requirements as

structured, English-language format

"scenarios"

A BDD development process

How does it work?

The business owner and the business

analyst have a conversation about

what he needs.

1

2

3

4 The tester uses these scenarios as the basis for

her tests

5

The automated tests provide feedback on progress and help

document the application

The business analyst, the developer and the tester elaborate the

requirements together.

The scenarios guide the developer and act as

automated tests

They define requirements as

structured, English-language format

"scenarios"

A BDD development process

How does it work?

The business owner and the business

analyst have a conversation about

what he needs.

1

2

3

4 The tester uses these scenarios as the basis for

her tests

5

The automated tests provide feedback on progress and help

document the application

The business analyst, the developer and the tester elaborate the

requirements together.

The scenarios guide the developer and act as

automated tests

They define requirements as

structured, English-language format

"scenarios"

A BDD development process

How does it work?

The business owner and the business

analyst have a conversation about

what he needs.

1

2

3

4 The tester uses these scenarios as the basis for

her tests

5

The automated tests provide feedback on progress and help

document the application

The business analyst, the developer and the tester elaborate the

requirements together.

The scenarios guide the developer and act as

automated tests

They define requirements as

structured, English-language format

"scenarios"

A BDD development process

How does it work?

The business owner and the business

analyst have a conversation about

what he needs.

1

2

3

4 The tester uses these scenarios as the basis for

her tests

5

The automated tests provide feedback on progress and help

document the application

The business analyst, the developer and the tester elaborate the

requirements together.

The scenarios guide the developer and act as

automated tests

They define requirements as

structured, English-language format

"scenarios"

A BDD development process

FeedbackPitch

The three forms of balance

Timing

FeedbackPitch

The three forms of balance

Timing

FeedbackPitch

The three forms of balance

Timing

FeedbackPitch

The three forms of balance

Timing

FeedbackPitch

The three forms of balance

Timing

Timing

“Out to lunch”Antipattern #1

“The Cucumber Salad”Antipattern #2

“The Cucumber Salad”Feature: Display customer details As an 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 returnedScenario: Customer Profile 'Marital Status' fieldScenario: Customer Profile 'Dependents' field

“Cucumber as a Test Tool”Antipattern #3

Pitch

“Aimless requirements”Antipattern #4

“Aimless requirements”Feature: Display customer details As a user I want to view the customer's profile details So that I can see the personal information on the customer

“Aimless requirements”Feature: Display customer details As a user I want to view the customer's profile details So that I can see the personal information on the customer

“Aimless requirements”Feature: Display customer details As a user I want to view the customer's profile details So that I can see the personal information on the customer

Feature: Locate a customerIn order to propose more relevant services to my customersAs a financial adviserI want to view a customer's profile details

“Aimless requirements”Feature: Display customer details As a user I want to view the customer's profile details So that I can see the personal information on the customer

Feature: Locate a customerIn order to propose more relevant services to my customersAs a financial adviserI want to view a customer's profile details

In order to propose more relevant services to my customers

What is the real business goal?

“Aimless requirements”Feature: Display customer details As a user I want to view the customer's profile details So that I can see the personal information on the customer

Feature: Locate a customerIn order to propose more relevant services to my customersAs a financial adviserI want to view a customer's profile detailsAs a financial adviser

What is the real business goal?

What is the context of the user who needs this feature?

“Aimless requirements”Feature: Display customer details As a user I want to view the customer's profile details So that I can see the personal information on the customer

Feature: Locate a customerIn order to propose more relevant services to my customersAs a financial adviserI want to view a customer's profile details

What is the real business goal?

What is the context of the user who needs this feature?

“Aimless requirements”Feature: Authenticate using social media In order to access the application more easily As a new user I want to authenticate using social media instead of having to provide a username and password

“Aimless requirements”Feature: Authenticate using social media In order to access the application more easily As a new user I want to authenticate using social media instead of having to provide a username and password

Feature: Authenticate using social media In order to access the application more easily As a new user I want to authenticate using social media instead of having to provide a username and password

Scenario: Login via LinkedIn Scenario: Login via Twitter

“Aimless requirements”Feature: Authenticate using social media In order to access the application more easily As a new user I want to authenticate using social media instead of having to provide a username and password

Feature: Authenticate using social media In order to access the application more easily As a new user I want to authenticate using social media instead of having to provide a username and password

Scenario: Login via LinkedIn Scenario: Login via Twitter

“Aimless requirements”Feature: Authenticate using social media In order to access the application more easily As a new user I want to authenticate using social media instead of having to provide a username and password

Feature: Authenticate using social media In order to access the application more easily As a new user I want to authenticate using social media instead of having to provide a username and password

Scenario: Login via LinkedIn Scenario: Login via Twitter

“Aimless requirements”Feature: Authenticate using social media In order to access the application more easily As a new user I want to authenticate using social media instead of having to provide a username and password

Feature: Authenticate using social media In order to access the application more easily As a new user I want to authenticate using social media instead of having to provide a username and password

Scenario: Login via LinkedIn Scenario: Login via Twitter Scenario: Login via Facebook

“Aimless requirements”Feature: Authenticate using social media In order to access the application more easily As a new user I want to authenticate using social media instead of having to provide a username and password

Feature: Authenticate using social media In order to access the application more easily As a new user I want to authenticate using social media instead of having to provide a username and password

Scenario: Login via LinkedIn Scenario: Login via Twitter Scenario: Login via Facebook

“Boring requirements”Antipattern #5

“Boring scenarios”

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 |

“Boring scenarios”

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 |

UX concerns

“Boring scenarios”

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 |

UX concerns

OK, but what else?

“Eyes on the screen”Antipattern #6

“Eyes on the screen”

19

Scenario: User logs on to application Given I am an authorised user When I enter ‘scott’ into the username field And I enter ‘tiger’ into the password field And I click on ‘login’ Then the application home page should open

“Eyes on the screen”

19

Scenario: User logs on to application Given I am an authorised user When I enter ‘scott’ into the username field And I enter ‘tiger’ into the password field And I click on ‘login’ Then the application home page should open

Scenario: User logs on to applicationGiven I am an authorised user When I login with a valid username and password Then I should be provided access to my accounts

“Eyes on the screen”

19

Scenario: User logs on to application Given I am an authorised user When I enter ‘scott’ into the username field And I enter ‘tiger’ into the password field And I click on ‘login’ Then the application home page should open

Scenario: User logs on to applicationGiven I am an authorised user When I login with a valid username and password Then I should be provided access to my accountsWhen I login with a valid username and password

“Eyes on the screen”

19

Scenario: User logs on to application Given I am an authorised user When I enter ‘scott’ into the username field And I enter ‘tiger’ into the password field And I click on ‘login’ Then the application home page should open

Scenario: User logs on to applicationGiven I am an authorised user When I login with a valid username and password Then I should be provided access to my accountsThen I should be provided access to my accounts

“Eyes on the screen”

19

Scenario: User logs on to application Given I am an authorised user When I enter ‘scott’ into the username field And I enter ‘tiger’ into the password field And I click on ‘login’ Then the application home page should open

Scenario: User logs on to applicationGiven I am an authorised user When I login with a valid username and password Then I should be provided access to my accounts

“Top-heavy scenarios”Antipattern #7

“Not having all the cards”Antipattern #8

“Not having all the cards”

22

Scenario: Find a customer by various criteria Given I am logged into the application When I click Search Then I will see search criteria options to search for the customer by customer name, date of birth, and account number

“Not having all the cards”

22

Scenario: Find a customer by various criteria Given I am logged into the application When I click Search Then I will see search criteria options to search for the customer by customer name, date of birth, and account number

“Not having all the cards”

22

Scenario: Find a customer by various criteria Given I am logged into the application When I click Search Then I will see search criteria options to search for the customer by customer name, date of birth, and account number

Scenario: Find a customer by name Given the following customers exist: | id | first name | last name | | 100 | Sarah-Jane | Smith | | 101 | Sarah | Smith | When I search for a customer using the following search criteria: | name | Sarah-Jane Smith | Then I should display the following customer: | id | first name | last name | | 100 | Sarah-Jane | Smith |

“Not having all the cards”

22

Scenario: Find a customer by various criteria Given I am logged into the application When I click Search Then I will see search criteria options to search for the customer by customer name, date of birth, and account number

Scenario: Find a customer by name Given the following customers exist: | id | first name | last name | | 100 | Sarah-Jane | Smith | | 101 | Sarah | Smith | When I search for a customer using the following search criteria: | name | Sarah-Jane Smith | Then I should display the following customer: | id | first name | last name | | 100 | Sarah-Jane | Smith |

Well-defined inputs

“Not having all the cards”

22

Scenario: Find a customer by various criteria Given I am logged into the application When I click Search Then I will see search criteria options to search for the customer by customer name, date of birth, and account number

Scenario: Find a customer by name Given the following customers exist: | id | first name | last name | | 100 | Sarah-Jane | Smith | | 101 | Sarah | Smith | When I search for a customer using the following search criteria: | name | Sarah-Jane Smith | Then I should display the following customer: | id | first name | last name | | 100 | Sarah-Jane | Smith |

Well-defined inputs

Well-defined outcomes

“Scenario overload”Antipattern #9

“Scenario overload”

24

Scenario: The account earns 4% interest when the balance is over $10000 Given a bonus saver account with a end-of-month balance of 12000 When interest is calculated Then the monthly interest earned should be 40Scenario: The account earns 2% interest when the balance is less than $10000 Given a bonus saver account with a end-of-month balance of 9000 When interest is calculated Then the monthly interest earned should be 15Scenario: The account earns 4% interest when the balance is over $10000 and no more than $300 has been withdrawn Given a bonus saver account with a end-of-month balance of 12000 And a previous end-of-month balance of $12300 When interest is calculated Then the monthly interest earned should be 40Scenario: The account earns 2% interest when the balance is over $10000 and more than $300 has been withdrawn Given a bonus saver account with a end-of-month balance of 12000 And a previous end-of-month balance of $12400 When interest is calculated Then the monthly interest earned should be 15

“Scenario overload”

25

“Scenario overload”

25

Scenario Outline: Bonus saver account Given a bonus saver account with an end-of-month balance of <balance> And a previous end-of-month balance of <previous> When the interest is calculated Then the applicable interest rate should be <rate> And <interest-earned> should be deposited into the account

Examples: balance | previous | rate| earned| rule 10000 | 10000 | 4 | 33.33 | 9000 | 9000 | 2 | 15.00 | Under 10000 earns 2% 10000 | 10300 | 4 | 33.33 | Over 10000 earns 4% 9000 | 9301 | 1 | 7.5 | Under $10000 with over 300 withdrawn earns 1% 10000 | 10301 | 2 | 16.67 | Over $10000 with over $300 withdraw earns 2%

“Scenario overload”

26

“Scenario overload”

26

Scenario Outline: Bonus saver account Given a bonus saver account with an end-of-month balance of <balance> And a previous end-of-month balance of <previous-balance> When the interest is calculated Then the applicable interest rate should be <percentage-interest> And <interest-earned> should be deposited into the account Examples: balance | previous-balance | percentage | earned | 10000 | 10000 | 4 | 33.33 | 10001 | 10000 | 4 | 33.34 | 1000 | 1000 | 2 | 1.67 | 9000 | 9000 | 2 | 15.00 | 10000 | 10300 | 4 | 33.33 | 20000 | 20000 | 4 | 100 | 10000 | 10301 | 2 | 16.67 | 9000 | 9301 | 1 | 7.5 | 20000 | 20301 | 1 | 50 | 100000 | 100301 | 1 | 250 |

“Cucumber test scripts”Antipattern #10

“Cucumber test scripts”

28

“Cucumber test scripts”

29

“Tech-speak Scenarios”Antipattern #11

“Techie Scenarios”

31

Scenario: Propose user branch when user logs in Given I am an authorized staff member When I log on using my valid credentials Then the following branches should be available in the branch drop-down | Branch name | | George Street | | Market Street | | Liverpool Street |

Feedback

“Incommunicado scenarios”Antipattern #12

“Incommunicado scenarios”

34

“Incommunicado scenarios”

35

“Incommunicado scenarios”

36

FeedbackPitch

So keep your balance!

Timing

Questions?

John Ferguson [email protected]

wakaleohttp://www.wakaleo.com