More Than Automation - How Good Acceptance Tests Can Make Your Team Happier

2,185 views
2,103 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,185
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
48
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

More Than Automation - How Good Acceptance Tests Can Make Your Team Happier

  1. 1. More than automation How good acceptance tests can make your team happier @mattwynne Freelance Programmer & CoachWednesday, 18 April 12
  2. 2. Refuctoring your Cucumber tests Protecting your job with Mortgage Driven Development @mattwynne Freelance Programmer & CoachWednesday, 18 April 12
  3. 3. What is MDD?Wednesday, 18 April 12
  4. 4. MDD Core Principles Maintainable code offers no job security Programming should be a solitary activityWednesday, 18 April 12
  5. 5. Wednesday, 18 April 12
  6. 6. MD D F AI L http://www.flickr.com/photos/downtree/1666035170/Wednesday, 18 April 12
  7. 7. N ✔ W I D D M http://www.flickr.com/photos/chokingsun/3535556349/Wednesday, 18 April 12
  8. 8. Maintainable code offers no job security therefore As a mortgage-driven developer, I try to make my code seem as weird and mysterious as possibleWednesday, 18 April 12
  9. 9. Programming should be a solitary activity therefore As a mortgage-driven developer, I make the experience of collaborating with me as awkward and unpleasant as I can* * without actually getting firedWednesday, 18 April 12
  10. 10. Cucumber is a threatWednesday, 18 April 12
  11. 11. Cucumber Could lead to YOUR house being repossessedWednesday, 18 April 12
  12. 12. Cucumber is a threat • Promotes collaboration between stakeholders and developers • Transparency of how the system actually behaves • Aims to develop a shared understanding or ubiquitous language within the teamWednesday, 18 April 12
  13. 13. MDD Core Practice uc to ri ng R efWednesday, 18 April 12
  14. 14. What is Refuctoring? "Refuctoring is the process of taking a well-designed piece of code and, through a series of small, reversible changes, making it completely unmaintainable by anybody except yourself." http://www.waterfall2006.com/gorman.htmlWednesday, 18 April 12
  15. 15. Feature: Sign Up Sign up works in three stages: 1. Apply for an account via a form on the website. Applicant gets an email. 2. Follow the confirmation in the email to activate the account. 3. Fill out profile information. By this stage the user has an account but we try to collect more information about them. Scenario: Apply for an account Given I do not have an account When I follow the sign up link from the homepage And I fill out the form with valid details and submit it Then I should see a confirmation message telling me to check my email Scenario: Confirm account Given I have applied for an account And I have confirmed my application When I log in Then I should not see a message telling me to confirm my account But I should see a welcome message And I should see a form asking me to fill out my account profile Scenario: Fill out account profile Given I have logged in to a brand new account When I fill out my profile details And I log out and log in again Then I should not see the form asking me to fill out my account profileWednesday, 18 April 12
  16. 16. Step 1: Remove Spurious DocumentationWednesday, 18 April 12
  17. 17. Feature: Sign Up Sign up works in three stages: 1. Apply for an account via a form on the website. Applicant gets an email. 2. Follow the confirmation in the email to activate the account. 3. Fill out profile information. By this stage the user has an account but we try to collect more information about them. Scenario: Apply for an account Given I do not have an account When I follow the sign up link from the homepage And I fill out the form with valid details and submit it Then I should see a confirmation message telling me to check my email Scenario: Confirm account Given I have applied for an account And I have confirmed my application When I log in Then I should not see a message telling me to confirm my account But I should see a welcome message And I should see a form asking me to fill out my account profile Scenario: Fill out account profile Given I have logged in to a brand new account When I fill out my profile details And I log out and log in again Then I should not see the form asking me to fill out my account profileWednesday, 18 April 12
  18. 18. Feature: Sign Up Scenario: Apply for an account Given I do not have an account When I follow the sign up link from the homepage And I fill out the form with valid details and submit it Then I should see a confirmation message telling me to check my email Scenario: Confirm account Given I have applied for an account And I have confirmed my application When I log in Then I should not see a message telling me to confirm my account But I should see a welcome message And I should see a form asking me to fill out my account profile Scenario: Fill out account profile Given I have logged in to a brand new account When I fill out my profile details And I log out and log in again Then I should not see the form asking me to fill out my account profileWednesday, 18 April 12
  19. 19. Step 2: Conflate ScenariosWednesday, 18 April 12
  20. 20. Feature: Sign Up Scenario: Apply for an account Given I do not have an account When I follow the sign up link from the homepage And I fill out the form with valid details and submit it Then I should see a confirmation message telling me to check my email Scenario: Confirm account Given I have applied for an account And I have confirmed my application When I log in Then I should not see a message telling me to confirm my account But I should see a welcome message And I should see a form asking me to fill out my account profile Scenario: Fill out account profile Given I have logged in to a brand new account When I fill out my profile details And I log out and log in again Then I should not see the form asking me to fill out my account profileWednesday, 18 April 12
  21. 21. Feature: Sign Up Scenario: Apply for an account Given I do not have an account When I follow the sign up link from the homepage And I fill out the form with valid details and submit it Then I should see a confirmation message telling me to check my email When I have confirmed my application And I log in Then I should not see a message telling me to confirm my account But I should see a welcome message And I should see a form asking me to fill out my account profile When I fill out my profile details And I log out and log in again Then I should not see the form asking me to fill out my account profileWednesday, 18 April 12
  22. 22. Step 3: Insert Incidental DetailWednesday, 18 April 12
  23. 23. Feature: Sign Up Scenario: Apply for an account Given I do not have an account When I follow the sign up link from the homepage And I fill out the form with valid details and submit it Then I should see a confirmation message telling me to check my email And I have confirmed my application When I log in Then I should not see a message telling me to confirm my account But I should see a welcome message And I should see a form asking me to fill out my account profile When I fill out my profile details And I log out and log in again Then I should not see the form asking me to fill out my account profileWednesday, 18 April 12
  24. 24. Feature: Sign Up Scenario: Apply for an account Given I do not have an account And I am on the home page And I follow "Join" Then I should see "we need some information from you." And I should see "Home / Join" And I fill out the form with valid details and submit it Then I should see a confirmation message telling me to check my email And I have confirmed my application When I log in Then I should not see a message telling me to confirm my account But I should see a welcome message And I should see a form asking me to fill out my account profile When I fill out my profile details And I log out and log in again Then I should not see the form asking me to fill out my account profileWednesday, 18 April 12
  25. 25. Feature: Sign Up Scenario: Apply for an account Given I do not have an account And I am on the home page And I follow "Join" Then I should see "we need some information from you." And I should see "Home / Join" When I fill in "user_email" with "dave123@hotmail.com" And I fill in "user_password" with "passw0rd" And I fill in "user_password_confirmation" with "passw0rd" And I fill in "user_title" with "Mr" And I fill in "user_firstname" with "Dave" And I fill in "user_surname" with "Smith" And I fill in "user_display_name" with "Dave Smith" And I fill in "user_organisation_name" with "Big Corp" And I fill in "user_city" with "London" And I select "United Kingdom" from "user_country_id" And I fill in "user_phone_number" with "1234 5678" And I press "Sign up" Then I should see a confirmation message telling me to check my email And I have confirmed my application When I log in Then I should not see a message telling me to confirm my account But I should see a welcome message And I should see a form asking me to fill out my account profile When I fill out my profile details And I log out and log in again Then I should not see the form asking me to fill out my account profileWednesday, 18 April 12
  26. 26. Feature: Sign Up Scenario: Apply for an account Given I do not have an account And I am on the home page And I follow "Join" Then I should see "we need some information from you." And I should see "Home / Join" When I fill in "user_email" with "dave123@hotmail.com" And I fill in "user_password" with "passw0rd" And I fill in "user_password_confirmation" with "passw0rd" And I fill in "user_title" with "Mr" And I fill in "user_firstname" with "Dave" And I fill in "user_surname" with "Smith" And I fill in "user_display_name" with "Dave Smith" And I fill in "user_organisation_name" with "Big Corp" And I fill in "user_city" with "London" And I select "United Kingdom" from "user_country_id" And I fill in "user_phone_number" with "1234 5678" And I press "Sign up" Then I should see "You have signed up successfully" Given I have confirmed my signup for "dave123@hotmail.com" And I login as "dave123@hotmail.com" Then I should not see a message telling me to confirm my account But I should see a welcome message And I should see a form asking me to fill out my account profile When I fill out my profile details And I log out and log in again Then I should not see the form asking me to fill out my account profileWednesday, 18 April 12
  27. 27. Feature: Sign Up Scenario: Apply for an account Given I do not have an account And I am on the home page And I follow "Join" Then I should see "we need some information from you." And I should see "Home / Join" When I fill in "user_email" with "dave123@hotmail.com" And I fill in "user_password" with "passw0rd" And I fill in "user_password_confirmation" with "passw0rd" And I fill in "user_title" with "Mr" And I fill in "user_firstname" with "Dave" And I fill in "user_surname" with "Smith" And I fill in "user_display_name" with "Dave Smith" And I fill in "user_organisation_name" with "Big Corp" And I fill in "user_city" with "London" And I select "United Kingdom" from "user_country_id" And I fill in "user_phone_number" with "1234 5678" And I press "Sign up" Then I should see "You have signed up successfully" Given I have confirmed my signup for "dave123@hotmail.com" And I login as "dave123@hotmail.com" And I should not see "You have to confirm your account before continuing" And I should see "Thank you for signing up for the portal" And I should see "Home / New Demographic" And I should see a form asking me to fill out my account profile When I fill out my profile details And I log out and log in again Then I should not see the form asking me to fill out my account profileWednesday, 18 April 12
  28. 28. Feature: Sign Up Scenario: Apply for an account Given I do not have an account And I am on the home page And I follow "Join" Then I should see "we need some information from you." And I should see "Home / Join" When I fill in "user_email" with "dave123@hotmail.com" And I fill in "user_password" with "passw0rd" And I fill in "user_password_confirmation" with "passw0rd" And I fill in "user_title" with "Mr" And I fill in "user_firstname" with "Dave" And I fill in "user_surname" with "Smith" And I fill in "user_display_name" with "Dave Smith" And I fill in "user_organisation_name" with "Big Corp" And I fill in "user_city" with "London" And I select "United Kingdom" from "user_country_id" And I fill in "user_phone_number" with "1234 5678" And I press "Sign up" Then I should see "You have signed up successfully" Given I have confirmed my signup for "dave123@hotmail.com" And I login as "dave123@hotmail.com" And I should not see "You have to confirm your account before continuing" And I should see "Thank you for signing up for the portal" And I should see "Home / New Demographic" And I should see "I am a:" And I should see "My Main Work Area is:" And I should see "I work with:" And I should see "About your organisation" And I should see "The primary area is:" And I should see "The secondary area is:" And I should see "Your Reasons for joining this community" When I fill out my profile details And I log out and log in again Then I should not see the form asking me to fill out my account profileWednesday, 18 April 12
  29. 29. Feature: Sign Up Scenario: Apply for an account Given I do not have an account And I am on the home page And I follow "Join" Then I should see "we need some information from you." And I should see "Home / Join" When I fill in "user_email" with "dave123@hotmail.com" And I fill in "user_password" with "passw0rd" And I fill in "user_password_confirmation" with "passw0rd" And I fill in "user_title" with "Mr" And I fill in "user_firstname" with "Dave" And I fill in "user_surname" with "Smith" And I fill in "user_display_name" with "Dave Smith" And I fill in "user_organisation_name" with "Big Corp" And I fill in "user_city" with "London" And I select "United Kingdom" from "user_country_id" And I fill in "user_phone_number" with "1234 5678" And I press "Sign up" Then I should see "You have signed up successfully" Given I have confirmed my signup for "dave123@hotmail.com" And I login as "dave123@hotmail.com" And I should not see "You have to confirm your account before continuing" And I should see "Thank you for signing up for the portal" And I should see "Home / New Demographic" And I should see "I am a:" And I should see "My Main Work Area is:" And I should see "I work with:" And I should see "About your organisation" And I should see "The primary area is:" And I should see "The secondary area is:" And I should see "Your Reasons for joining this community" And I should see "Demographic was successfully created" And I should see "I am a: Researcher" And I should see "My Main Work Area is: Heart Disease" And I should see "My Organisations primary area is: Equipment Manufacturer" And I log out and log in again Then I should not see the form asking me to fill out my account profileWednesday, 18 April 12
  30. 30. Feature: Sign up Scenario: Apply for an Account Given I have setup the base data And I am on the home page And I follow "Join" Then I should see "we need some information from you." And I should see "Home / Join" When I fill in "user_email" with "dave123@hotmail.com" And I fill in "user_password" with "passw0rd" d And I fill in "user_password_confirmation" with "passw0rd" e And I fill in "user_title" with "Mr" And I fill in "user_firstname" with "Dave" r And I fill in "user_surname" with "Smith" o And I fill in "user_display_name" with "Dave Smith" t And I fill in "user_organisation_name" with "Big Corp" c And I fill in "user_city" with "London" u And I select "United Kingdom" from "user_country_id" f And I fill in "user_phone_number" with "1234 5678" e And I press "Sign up" R Then I should see "You have signed up successfully" Given I have confirmed my signup for "dave123@hotmail.com" And I login as "dave123@hotmail.com" And I should not see "You have to confirm your account before continuing" ! And I should see "Thank you for signing up for the portal" And I should see "Home / New Demographic" And I should see "I am a:" And I should see "My Main Work Area is:" And I should see "I work with:" And I should see "About your organisation" And I should see "The primary area is:" And I should see "The secondary area is:" And I should see "Your Reasons for joining this community" Then I select "Researcher" from "I am a:" Then I select "Heart Disease" from "My Main Work Area is:" Then I select "Equipment Manufacturer" from "The primary area is:" Then I press "Save Demographic Information" And I should see "Demographic was successfully created" And I should see "I am a: Researcher" And I should see "My Main Work Area is: Heart Disease" And I should see "My Organisations primary area is: Equipment Manufacturer" Then I am signed out And I login as "dave123@hotmail.com" And I should not see "Home / New Demographic"Wednesday, 18 April 12
  31. 31. Incidental Conflated Detail Scenarios Brittle Reader Reader Tests Confusion Boredom Job SecurityWednesday, 18 April 12
  32. 32. MDD Best Practices • Include as much irrelevant detail in your features as possible • keeps them hard / boring to read • and nice and brittle • Try to sprinkle technical details like CSS or HTML in there tooWednesday, 18 April 12
  33. 33. Now that I have your attentionWednesday, 18 April 12
  34. 34. Wednesday, 18 April 12
  35. 35. Think about it • Why are you writing these features?Wednesday, 18 April 12
  36. 36. What you think you need All you actually needWednesday, 18 April 12
  37. 37. What you think you need All you actually What would give need you some value, right nowWednesday, 18 April 12
  38. 38. Think about it • Who are you writing these features for?Wednesday, 18 April 12
  39. 39. Ideas Features CodeWednesday, 18 April 12
  40. 40. Are you writing tests or documentation?Wednesday, 18 April 12
  41. 41. Mea culpaWednesday, 18 April 12
  42. 42. IMPORTANT: This file isgenerated by cucumber-rails -edit at your own peril. It isrecommended to regeneratethis file in the future when youupgrade to a newer version ofcucumber-rails. Consideradding your own code to a newfile instead of editing this one.Wednesday, 18 April 12
  43. 43. Wednesday, 18 April 12
  44. 44. Levels of AbstractionWednesday, 18 April 12
  45. 45. When I fill o ut the Declarative form w ith va lid de tails When I fill in And I f "user_e ill in mail" w And I f "user_p ith "da ill in assword ve123@h "user_p " with otmail. And I f assword "passw0 ill in _confir rd" And I f "user_t mation" ill in itle" w with "p And I f "user_f ith "Mr a ill in irstnam " "user_s e" with urname" "Dave" Imperative with "S mith"Wednesday, 18 April 12
  46. 46. Feature: The System Scenario: Everything Works Given the system exists When I use it Then it should work, perfectlyWednesday, 18 April 12
  47. 47. Whose domain is it anyway?Wednesday, 18 April 12
  48. 48. Solutions • Feedback • Feedback • FeedbackWednesday, 18 April 12
  49. 49. Wednesday, 18 April 12
  50. 50. Relish Features • Private projects, organisations • Full text search • Editorial • Markdown pages • Navigation / ToC ordering • Push from a gemWednesday, 18 April 12
  51. 51. Other Tips • Strive for documentation, not tests • Write scenarios with domain experts • Pair up with programmers to write step definitions • Banish incidental details!Wednesday, 18 April 12
  52. 52. ThanksWednesday, 18 April 12
  53. 53. Further Reading • http://dhemery.com/pdf/writing_maintainable_automated_acceptance_tests.pdf • http://benmabey.com/2008/05/19/imperative-vs-declarative-scenarios-in-user-stories.html • http://dannorth.net/2011/01/31/whose-domain-is-it-anyway • http://elabs.se/blog/15-you-re-cuking-it-wrong • http://github.com/mattwynne/cucumber-usual_suspects • http://github.com/riverGlide/CukeSalad/ • http://relishapp.com • http://blog.mattwynne.netWednesday, 18 April 12

×