Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Forget the tools

Forget the tools

As the author of The Cucumber Book, surely we'd expect Matt to be selling us on tools? Quite the opposite: This entertaining talk describes how so many teams get distracted by tools like Cucumber, and forget about what really matters.

You'll be presented with a clear vision of how BDD really works.

Cdf378de2284d8acf137122e541caa28?s=128

mattwynne

May 22, 2012
Tweet

Transcript

  1. Forget the tools! When Cucumbers go bad @mattwynne Freelance Programmer

    & Coach Turku Agile Day, May 2012
  2. Refuctoring your Cucumber tests Protecting your job with Mortgage Driven

    Development @mattwynne Freelance Programmer & Coach
  3. What is MDD?

  4. MDD: Core principles Maintainable code offers no job security Programming

    should be a solitary activity
  5. None
  6. MDD FAIL http://www.flickr.com/photos/downtree/1666035170/

  7. MDD WIN ✔ http://www.flickr.com/photos/chokingsun/3535556349/

  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 possible
  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 fired
  10. Cucumber is a threat

  11. BDD Could lead to your house being repossessed

  12. Why 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 team
  13. MDD: Core practice Refuctoring

  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.html
  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 profile
  16. Step 1: Remove spurious documentation

  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 profile
  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 profile
  19. Step 2: Conflate scenarios

  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 profile
  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 profile
  22. Step 3: Insert incidental detail

  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 profile
  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 profile
  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 profile
  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 profile
  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 profile
  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 profile
  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 profile
  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" 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" 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" Refuctored !
  31. Incidental Detail Conflated Scenarios Brittle Tests Reader Confusion Reader Boredom

    Job Security
  32. MDD: Best practices • Include as much irrelevant detail in

    your features as possible • keeps them boring to read • and nice and brittle • Avoid using words you hear business people using. Invent your own instead!
  33. Now that I have your attention

  34. None
  35. Think about it • Why are you using this tool?

  36. "The hardest single part of building a software system is

    deciding what to build" -- Fred Brooks
  37. What you think you need All you actually need

  38. What would give you some value, right now What you

    think you need All you actually need
  39. Ideas Examples Code Ideas Ideas

  40. None
  41. None
  42. Are you writing tests or documentation?

  43. Mea culpa

  44. IMPORTANT: This file is generated by cucumber-rails - edit at

    your own peril. It is recommended to regenerate this file in the future when you upgrade to a newer version of cucumber-rails. Consider adding your own code to a new file instead of editing this one.
  45. None
  46. Levels of abstraction

  47. Imperative Declarative When I fill out the form with valid

    details When I fill in "user_email" with "dave123@hotmail. And I fill in "user_password" with "passw0rd" And I fill in "user_password_confirmation" with "pa And I fill in "user_title" with "Mr" And I fill in "user_firstname" with "Dave" And I fill in "user_surname" with "Smith"
  48. Feature: The whole system Scenario: Everything just works Given the

    system exists When I use it Then it works, perfectly
  49. Whose domain is it anyway?

  50. Solutions • Feedback • Feedback • Feedback

  51. None
  52. Relish features • Full text search • Private projects •

    Editorial: • Markdown pages • Navigation / ToC ordering • Push from command-line
  53. So... • Strive for documentation, not tests • Write scenarios

    collaboratively • Banish incidental details!
  54. Thanks

  55. 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://relishapp.com • http://mattwynne.net • The Mythical Man-Month, Fred Brooks • The Goal, Eli Goldratt • @mattwynne