BDD Antipatterns Stories from the trenches about how not to do BDD - - PowerPoint PPT Presentation

bdd antipatterns
SMART_READER_LITE
LIVE PREVIEW

BDD Antipatterns Stories from the trenches about how not to do BDD - - PowerPoint PPT Presentation

BDD Antipatterns Stories from the trenches about how not to do BDD Introductions I help teams of smart people learn to work together more efficiently, to deliver better software faster John Ferguson Smart The essence of BDD


slide-1
SLIDE 1

Stories from the trenches about how not to do BDD

BDD Antipatterns

slide-2
SLIDE 2

John Ferguson Smart

Introductions

“I help teams of smart people 
 learn to work together more efficiently, 
 to deliver better software faster”

slide-3
SLIDE 3

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

slide-4
SLIDE 4

The business owner tells the business analyst what he wants 1 2 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 documentation

A traditional development process

How does it work?

slide-5
SLIDE 5

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

slide-6
SLIDE 6

Feedback Pitch

The three forms of balance

Timing

slide-7
SLIDE 7

Timing

slide-8
SLIDE 8

“Out to lunch”

Antipattern #1

slide-9
SLIDE 9

“The Cucumber Salad”

Antipattern #2

slide-10
SLIDE 10

“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 returned
 
 Scenario: Customer Profile 'Marital Status' field
 Scenario: Customer Profile 'Dependents' field

slide-11
SLIDE 11

“Cucumber as a Test Tool”

Antipattern #3

slide-12
SLIDE 12

Pitch

slide-13
SLIDE 13

“Aimless requirements”

Antipattern #4

slide-14
SLIDE 14

“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 customer
 In order to propose more relevant services to my customers
 As a financial adviser
 I want to view a customer's profile details In order to propose more relevant services to my customers As a financial adviser


What is the real business goal? What is the context of the user who needs this feature?

slide-15
SLIDE 15

“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

slide-16
SLIDE 16

“Boring requirements”

Antipattern #5

slide-17
SLIDE 17

“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?

slide-18
SLIDE 18

“Eyes on the screen”

Antipattern #6

slide-19
SLIDE 19

“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 application
 Given I am an authorised user When I login with a valid username and password Then I should be provided access to my accounts When I login with a valid username and password Then I should be provided access to my accounts

slide-20
SLIDE 20

“Top-heavy scenarios”

Antipattern #7

slide-21
SLIDE 21

“Not having all the cards”

Antipattern #8

slide-22
SLIDE 22

“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

slide-23
SLIDE 23

“Scenario overload”

Antipattern #9

slide-24
SLIDE 24

“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 40
 
 Scenario: 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 15
 
 Scenario: 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 40
 
 Scenario: 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

slide-25
SLIDE 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%

slide-26
SLIDE 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 |

slide-27
SLIDE 27

“Cucumber test scripts”

Antipattern #10

slide-28
SLIDE 28

“Cucumber test scripts”

28

slide-29
SLIDE 29

“Cucumber test scripts”

29

slide-30
SLIDE 30

“Tech-speak Scenarios”

Antipattern #11

slide-31
SLIDE 31

“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 |

slide-32
SLIDE 32

Feedback

slide-33
SLIDE 33

“Incommunicado scenarios”

Antipattern #12

slide-34
SLIDE 34

“Incommunicado scenarios”

34

slide-35
SLIDE 35

“Incommunicado scenarios”

35

slide-36
SLIDE 36

“Incommunicado scenarios”

36

slide-37
SLIDE 37

Feedback Pitch

So keep your balance!

Timing

slide-38
SLIDE 38

Questions?

John Ferguson Smart john.smart@wakaleo.com wakaleo http://www.wakaleo.com