More Than Automation - How Good Acceptance Tests Can Make Your Team Happier
-
Upload
seleniumconf -
Category
Technology
-
view
1.778 -
download
1
description
Transcript of More Than Automation - How Good Acceptance Tests Can Make Your Team Happier
More than automationHow good acceptance tests can make your team happier
@mattwynneFreelance Programmer & Coach
Wednesday, 18 April 12
Refuctoring your Cucumber tests
Protecting your job with Mortgage Driven Development
@mattwynneFreelance Programmer & Coach
Wednesday, 18 April 12
What is MDD?
Wednesday, 18 April 12
MDD Core Principles
Maintainable code offers no
job security
Programming should be a
solitary activity
Wednesday, 18 April 12
Wednesday, 18 April 12
MDD FAIL
http://www.flickr.com/photos/downtree/1666035170/
Wednesday, 18 April 12
MDD WIN ✔
http://www.flickr.com/photos/chokingsun/3535556349/
Wednesday, 18 April 12
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
Wednesday, 18 April 12
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
Wednesday, 18 April 12
Cucumber is a
threatWednesday, 18 April 12
Cucumber Could lead to YOUR house
being repossessed
Wednesday, 18 April 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 team
Wednesday, 18 April 12
MDD Core Practice
Refuctoring
Wednesday, 18 April 12
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
Wednesday, 18 April 12
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
Wednesday, 18 April 12
Step 1: Remove Spurious Documentation
Wednesday, 18 April 12
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
Wednesday, 18 April 12
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
Wednesday, 18 April 12
Step 2: Conflate Scenarios
Wednesday, 18 April 12
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
Wednesday, 18 April 12
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
Wednesday, 18 April 12
Step 3: Insert Incidental Detail
Wednesday, 18 April 12
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
Wednesday, 18 April 12
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
Wednesday, 18 April 12
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 "[email protected]" 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
Wednesday, 18 April 12
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 "[email protected]" 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 "[email protected]" And I login as "[email protected]" 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
Wednesday, 18 April 12
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 "[email protected]" 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 "[email protected]" And I login as "[email protected]" 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
Wednesday, 18 April 12
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 "[email protected]" 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 "[email protected]" And I login as "[email protected]" 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
Wednesday, 18 April 12
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 "[email protected]" 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 "[email protected]" And I login as "[email protected]" 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
Wednesday, 18 April 12
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 "[email protected]" 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 "[email protected]" And I login as "[email protected]" 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 "[email protected]" And I should not see "Home / New Demographic"
Refuctored
!
Wednesday, 18 April 12
Incidental Detail
Conflated Scenarios
Brittle Tests
Reader Confusion
Reader Boredom
Job Security
Wednesday, 18 April 12
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 too
Wednesday, 18 April 12
Now that I have your attention
Wednesday, 18 April 12
Wednesday, 18 April 12
Think about it
• Why are you writing these features?
Wednesday, 18 April 12
What you think you
need
All you actually need
Wednesday, 18 April 12
What would give you some value,
right now
What you think you
need
All you actually need
Wednesday, 18 April 12
Think about it
• Who are you writing these features for?
Wednesday, 18 April 12
Ideas
Features
Code
IdeasIdeas
Wednesday, 18 April 12
Are you writing tests or documentation?
Wednesday, 18 April 12
Mea culpa
Wednesday, 18 April 12
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.
Wednesday, 18 April 12
Wednesday, 18 April 12
Levels of Abstraction
Wednesday, 18 April 12
Imperative
DeclarativeWhen I fill out the form with valid details
When I fill in "user_email" with "[email protected]"
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"
Wednesday, 18 April 12
Feature: The System
Scenario: Everything Works Given the system exists When I use it Then it should work, perfectly
Wednesday, 18 April 12
Whose domain is it anyway?
Wednesday, 18 April 12
Solutions
• Feedback
• Feedback
• Feedback
Wednesday, 18 April 12
Wednesday, 18 April 12
Relish Features
• Private projects, organisations
• Full text search
• Editorial
• Markdown pages
• Navigation / ToC ordering
• Push from a gem
Wednesday, 18 April 12
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
Thanks
Wednesday, 18 April 12
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.net
Wednesday, 18 April 12