Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

BDD Anti-patterns

3,367 views

Published on

Behaviour Driven Development is a powerful collaboration technique that can empower teams to deliver higher value features to the business faster and more effectively. But although Behaviour Driven Development is based on a number of simple principles, it can go dramatically wrong in a myriad of different ways.

In this talk we discuss twelve BDD anti-patterns we frequently encounter in real-world BDD projects, anti-patterns that can dramatically reduce the effectiveness of BDD as a practice, and that can even cause BDD adoption to fail entirely. Looking at everything from insufficient collaboration practices to poor use of test automation tooling, from teams that test too much to teams that forget the most important scenarios, we will look at the many different ways that BDD can go wrong, and how it should be done.

We will use real-world examples to illustrate each of these anti-patterns. You will learn how to spot these issues in your own projects, and more importantly how to avoid them in the first place.

Published in: Software

BDD Anti-patterns

  1. 1. bit.ly/bdd-antipatterns-draw @wakaleo 1 BDD Anti-patterns Stories from the trenches about how not to do BDD
  2. 2. John Ferguson Smart “I help teams of smart people 
 learn to work together more efficiently, 
 to deliver better software faster” wakaleo john@johnfergusonsmart.com
  3. 3. bit.ly/bdd-antipatterns-draw @wakaleo 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
  4. 4. bit.ly/bdd-antipatterns-draw @wakaleo 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
  5. 5. bit.ly/bdd-antipatterns-draw @wakaleo 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
  6. 6. bit.ly/bdd-antipatterns-draw @wakaleo 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
  7. 7. bit.ly/bdd-antipatterns-draw @wakaleo 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
  8. 8. bit.ly/bdd-antipatterns-draw @wakaleo 4
  9. 9. bit.ly/bdd-antipatterns-draw @wakaleo 5
  10. 10. bit.ly/bdd-antipatterns-draw @wakaleo 6
  11. 11. bit.ly/bdd-antipatterns-draw @wakaleo 7
  12. 12. bit.ly/bdd-antipatterns-draw @wakaleo 8 Too holey. Too feathery. Too scratchy. Too straight.Too crooked. Too pointed… Too patchy.
  13. 13. bit.ly/bdd-antipatterns-draw @wakaleo 9 Just right!
  14. 14. bit.ly/bdd-antipatterns-draw @wakaleo 10 Getting the balance “just right”
  15. 15. bit.ly/bdd-antipatterns-draw @wakaleo 10 Getting the balance “just right” Who and When
  16. 16. bit.ly/bdd-antipatterns-draw @wakaleo 10 Getting the balance “just right” Who and When What
  17. 17. bit.ly/bdd-antipatterns-draw @wakaleo 10 Getting the balance “just right” Who and When What How
  18. 18. bit.ly/bdd-antipatterns-draw @wakaleo 11 Getting the balance “just right” Who and When What How
  19. 19. bit.ly/bdd-antipatterns-draw @wakaleo “Out to lunch” Antipattern #1
  20. 20. bit.ly/bdd-antipatterns-draw @wakaleo “The case of the disengaged stakeholder” 13
  21. 21. bit.ly/bdd-antipatterns-draw @wakaleo “The case of the disengaged stakeholder” 13 Feedback Infrequent Often
  22. 22. bit.ly/bdd-antipatterns-draw @wakaleo “The case of the disengaged stakeholder” 13 Communicationfocus TechnicalBusiness Feedback Infrequent Often
  23. 23. bit.ly/bdd-antipatterns-draw @wakaleo “The case of the disengaged stakeholder” 14 Communicationfocus TechnicalBusiness Feedback Infrequent Often
  24. 24. bit.ly/bdd-antipatterns-draw @wakaleo “The case of the disengaged stakeholder” 14 Communicationfocus TechnicalBusiness Feedback Infrequent Often Disengaged
  25. 25. bit.ly/bdd-antipatterns-draw @wakaleo “The case of the disengaged stakeholder” 14 Communicationfocus TechnicalBusiness Feedback Infrequent Often Disengaged Frazzled
  26. 26. bit.ly/bdd-antipatterns-draw @wakaleo “The case of the disengaged stakeholder” 14 Communicationfocus TechnicalBusiness Feedback Infrequent Often Disengaged Frazzled Jaded
  27. 27. bit.ly/bdd-antipatterns-draw @wakaleo “The case of the disengaged stakeholder” 14 Communicationfocus TechnicalBusiness Feedback Infrequent Often Disengaged Frazzled Jaded Engaged
  28. 28. bit.ly/bdd-antipatterns-draw @wakaleo 15
  29. 29. bit.ly/bdd-antipatterns-draw @wakaleo “The Cucumber Salad” Antipattern #2
  30. 30. “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
  31. 31. “In preparing for battle I have always found that plans are useless, but planning is indispensable.” - Dwight D. Eisenhower 18
  32. 32. 19 Planning and Requirements discovery - it’s a team sport
  33. 33. 19 Planning and Requirements discovery - it’s a team sport Feature Mapping
  34. 34. 19 Planning and Requirements discovery - it’s a team sport Feature Mapping Story Mapping
  35. 35. 19 Planning and Requirements discovery - it’s a team sport Feature Mapping Story Mapping Example Mapping
  36. 36. 19 Planning and Requirements discovery - it’s a team sport Feature Mapping Story Mapping Example Mapping Pairing…
  37. 37. bit.ly/bdd-antipatterns-draw @wakaleo 20
  38. 38. bit.ly/bdd-antipatterns-draw @wakaleo “BDD Test Scripts” Antipattern #3
  39. 39. bit.ly/bdd-antipatterns-draw @wakaleo “BDD test scripts” 22
  40. 40. bit.ly/bdd-antipatterns-draw @wakaleo “Cucumber test scripts” 23
  41. 41. bit.ly/bdd-antipatterns-draw @wakaleo 24 Getting the balance “just right” Who and When What How
  42. 42. bit.ly/bdd-antipatterns-draw @wakaleo “Aimless requirements” Antipattern #4
  43. 43. “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
  44. 44. “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
  45. 45. “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 access relevant customer's profile details
  46. 46. “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 access relevant customer's profile details In order to propose more relevant services to my customers What is the real business goal?
  47. 47. “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 access relevant customer's profile details As a financial adviser
 What is the real business goal? What is the context of the user who needs this feature?
  48. 48. “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 access relevant customer's profile details What is the real business goal? What is the context of the user who needs this feature?
  49. 49. “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 access relevant customer's profile details What is the real business goal? What capability will help me achieve this? I want to access relevant customer's profile details What is the context of the user who needs this feature?
  50. 50. bit.ly/bdd-antipatterns-draw @wakaleo “No shit Sherlock” Antipattern #5
  51. 51. bit.ly/bdd-antipatterns-draw @wakaleo “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 |
  52. 52. bit.ly/bdd-antipatterns-draw @wakaleo “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
  53. 53. bit.ly/bdd-antipatterns-draw @wakaleo “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?
  54. 54. bit.ly/bdd-antipatterns-draw @wakaleo “Scenario overload” Antipattern #6
  55. 55. bit.ly/bdd-antipatterns-draw @wakaleo “Scenario overload” 30
  56. 56. bit.ly/bdd-antipatterns-draw @wakaleo “Scenario overload” 30 Lots of UI steps obscure the intent
  57. 57. bit.ly/bdd-antipatterns-draw @wakaleo “Scenario overload” 30 Lots of UI steps obscure the intent And I update the billing code from ‘misc’ to ‘sadfsc’ Capture the business intent of the action
  58. 58. bit.ly/bdd-antipatterns-draw @wakaleo “Scenario overload” 31 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
  59. 59. bit.ly/bdd-antipatterns-draw @wakaleo “Scenario overload” 31 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 Scattered data hides the information
  60. 60. bit.ly/bdd-antipatterns-draw @wakaleo “Scenario overload” 32
  61. 61. bit.ly/bdd-antipatterns-draw @wakaleo “Scenario overload” 32 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%
  62. 62. bit.ly/bdd-antipatterns-draw @wakaleo “Scenario overload” 32 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% Sometimes tables are more expressive
  63. 63. bit.ly/bdd-antipatterns-draw @wakaleo “Scenario overload” 33
  64. 64. bit.ly/bdd-antipatterns-draw @wakaleo “Scenario overload” 33 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 |
  65. 65. bit.ly/bdd-antipatterns-draw @wakaleo “Scenario overload” 33 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 | And sometimes they aren’t
  66. 66. “Scenario overload” 34 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
  67. 67. “Scenario overload” 34 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 This is not a business outcome
  68. 68. “Scenario overload” 34 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 | This is not a business outcome
  69. 69. “Scenario overload” 34 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 This is not a business outcome
  70. 70. “Scenario overload” 34 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 This is not a business outcome
  71. 71. bit.ly/bdd-antipatterns-draw @wakaleo 35 Getting the balance “just right” Who and When What How
  72. 72. bit.ly/bdd-antipatterns-draw @wakaleo “Eyes on the screen” Antipattern #7
  73. 73. bit.ly/bdd-antipatterns-draw @wakaleo “Eyes on the screen” 37 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
  74. 74. bit.ly/bdd-antipatterns-draw @wakaleo “Eyes on the screen” 37 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
  75. 75. bit.ly/bdd-antipatterns-draw @wakaleo “Eyes on the screen” 37 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
  76. 76. bit.ly/bdd-antipatterns-draw @wakaleo “Eyes on the screen” 37 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 accountsThen I should be provided access to my accounts
  77. 77. bit.ly/bdd-antipatterns-draw @wakaleo “Eyes on the screen” 37 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
  78. 78. bit.ly/bdd-antipatterns-draw @wakaleo “Top-heavy scenarios” Antipattern #8
  79. 79. bit.ly/bdd-antipatterns-draw @wakaleo “Know your audience” Antipattern #9
  80. 80. “Know your audience” 40 Scenario: Propose user branch when user logs in
 Given I am an authorised 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 |
  81. 81. “Know your audience” 41
  82. 82. bit.ly/bdd-antipatterns-draw @wakaleo “Incommunicado scenarios” Antipattern #10
  83. 83. bit.ly/bdd-antipatterns-draw @wakaleo 43 Communicate in business terms
  84. 84. bit.ly/bdd-antipatterns-draw @wakaleo 43 Communicate in business terms …at a high level
  85. 85. bit.ly/bdd-antipatterns-draw @wakaleo 44 Communicate in business terms
  86. 86. bit.ly/bdd-antipatterns-draw @wakaleo 44 Communicate in business terms …and at a detailed level
  87. 87. bit.ly/bdd-antipatterns-draw @wakaleo 45 So strive to get your balance “just right” Questions? John Ferguson Smart john@johnfergusonsmart.com http://www.wakaleo.com

×