more than automation - how good acceptance tests can make your team happier

Post on 14-Dec-2014

1.780 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

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

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

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

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

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

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

!

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

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

top related