INTRODUCTION TO
TEST DRIVEN DEVELOPMENT
Presented by Sarah Dutkiewicz
sarah@cletechconsulting.com
AGENDA
• Test Driven Development – What does this mean?
• Gathering Requirements
• Gherkin
• Tools for TDD in the Workplac...
WHAT IS
TEST DRIVEN
DEVELOPMENT?
TEST DRIVEN DEVELOPMENT
• Define {something} first through a test
• Write the code to pass the test
• Verify that the test...
Write the
test

Write the
code to
pass the test

Improve the
code while
keeping the
test passing

RED-GREENREFACTOR
EXAMPLE – RUBY KOANS
EXAMPLE – RUBY KOANS
TDD CONCEPT - ASSERTIONS
• Verify whether a certain condition has been met
• Asserts come in many forms:
•
•
•
•
•
•

(Not...
TDD CONCEPT –
ARRANGE/ACT/ASSERT
• Pattern for arranging a test
1. Arrange all preconditions and inputs.
2. Act on the obj...
TEST-DRIVEN – TYPES OF TESTS
Tests, Tests, and More Tests… Oh My!
TYPES OF TESTS
• Unit Tests
• Integration Tests
• End-to-End Tests
• Exploratory Testing
UNIT TESTS
• Focus on a class or a method
• Tests the smallest unit possible
• Typically tests simple objects; does not
te...
INTEGRATION TESTS
• Tests functions, “does things”
• Tests interactions with the outside world, include:
• Database commun...
END-TO-END TESTS
• The most brittle of tests –
dependent on the big picture
• Verifies that the unit tests and
integration...
EXPLORATORY TESTING
• Not an automated process; manual testing
• Sometimes better to go this route rather than end-to-end ...
MORE *-DRIVEN DEVELOPMENT
Related philosophies and methodologies
OTHER RELATED *-DRIVEN
DEVELOPMENT
• Behavior Driven Development
• Acceptance Test Driven Development
• Specification by E...
ACCEPTANCE TEST DRIVEN DEVELOPMENT CYCLE
Discuss the
requirements

Distill the tests in
a friendly
format

Demo the code

...
ATDD AND THE TDD CYCLE

REFACTOR

Discuss the
requirements

Distill the tests in
a friendly
format

Demo the code

GREEN

...
GATHERING
REQUIREMENTS
The Importance of TDD & ATDD for the UX Realm and an Intro to Gherkin
DISCUSS
• Conducted by all who are involved:
•
•
•
•

Product owners
Business analysts
Developers
QA

• Requirements are e...
GHERKIN
• Common language for gathering requirements
• Written in “plain English” following a particular cadence
• Can the...
GHERKIN COMPONENTS
• Features
• Scenarios & Scenario
Outlines
• Backgrounds

• Steps
• Multiline Arguments
• Tags
FEATURES
• Define a feature of an application
• Starts with the Feature keyword and contains a few lines to define the fea...
FEATURE EXAMPLE
Feature: Checking out books
In order to read eBooks on my eBook reader,
As a library patron,
I want to che...
SCENARIOS
• Possibilities of situations (scenarios) that apply to a feature
• Scenarios are included in *.feature files wi...
SCENARIO EXAMPLE
Scenario: Checking out a book
Given the library collection has the book I want to check out
When I check ...
STEPS
• Given a certain given condition
• When a certain behavior happens
• Then a certain outcome is expected
• Additiona...
SCENARIO OUTLINES
• Scenario Outlines eliminate the need for copying and pasting like scenarios
and collapsing values into...
SCENARIO OUTLINE EXAMPLE
Scenario Outline: Checking book checkout expiration
Given a checkout period of <checkout_period> ...
MULTILINE ARGUMENTS
• Tables
Example:
Scenario:
Given the following accounts exist:
|name
|email
|account_type|
| Laura
|l...
MULTILINE ARGUMENTS
• Large paragraph of text
Example:
Scenario:
Given a description search with:
"""
It was the best of t...
BACKGROUNDS
• Backgrounds setup the environment for all scenarios in a feature file.
• Starts with the Background keyword ...
BACKGROUND EXAMPLE
Feature: Checkout eMaterials
Background:
Given a customer named “Sarah Dutkiewicz“
And a library card n...
TAGS
• Used for grouping like tests, scenarios, and/or features together
• Starts with a @, followed by the tag name
Examp...
TOOLS FOR TDD IN THE
WORKPLACE
GHERKIN LANGUAGE RESOURCES
AND GENERAL TDD RESOURCES
• Behat – Writing Features – Gherkin Language
• The Art of Agile Deve...
.NET TDD RESOURCES
• SpecFlow – Behavior Driven Development,
Acceptance Test Driven Development,
Specification by Example;...
JAVASCRIPT TDD RESOURCES
• QUnit
• Jasmine

• Zombie.js
• Mocha
• Tutti
• JSTestDriver
• jsUnity
• CasperJS
RUBY TDD RESOURCES
• Cucumber – behavior driven
development
• Watir – Web Application Testing in
Ruby
• Ruby Koans – learn...
PHP TDD RESOURCES
• Behat – behavior driven development
• Mink – web acceptance testing
• PHPUnit
• SimpleTest

• Phpt
• G...
JAVA TDD RESOURCES
• JUnit
• Watij – Web Application
Testing in Java
• AppPerfect Java Unit Test
ADDITIONAL *DD RESOURCES
• Sahi – JavaScript browser controller
• Selenium – supports C#, Java, Perl,
PHP, Python, Ruby
• ...
CONTACT INFORMATION
Sarah Dutkiewicz
Cleveland Tech Consulting, LLC

sarah@cletechconsulting.com
Twitter: @sadukie
Blog: h...
Upcoming SlideShare
Loading in …5
×

Introduction to Test Driven Development

1,945 views

Published on

An intro to Test Driven Development for Developers and Non-Developers - covering some basics of TDD and ATDD. Presented to UXPA Cleveland at OverDrive on February 27, 2014

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,945
On SlideShare
0
From Embeds
0
Number of Embeds
108
Actions
Shares
0
Downloads
57
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Introduction to Test Driven Development (For Both Developers and Non-Developers)Have you heard of Test Driven Development (TDD) and wondered exactly what it meant? In this talk, we&apos;ll explore the process of Test Driven Development and how it fits in with gathering user needs and requirements. If teams know how they fit together, it can be a beautiful thing. Using gherkin (written in plain English that follows a pattern) to express the user needs and app requirements, developers can then write tests that lead to code that eventually lead to improvement in the overall software development process. We will also explore some tools for various platforms that can be used in the TDD process.
  • Image taken from: http://onproductmanagement.net/wp-content/uploads/2010/10/why-us.jpg
  • This may also be known as Red-Green-Clean
  • Image taken from: http://2.bp.blogspot.com/_1UIyN-eAGC8/SnoFcKZ9gtI/AAAAAAAABnQ/rLOduxwJKmo/s320/point+d%27interrogation.jpg
  • Image taken from: http://upload.wikimedia.org/wikipedia/commons/f/fd/Light_Green_Lego_Brick.jpg
  • Image taken from: http://pixelperfectdigital.com/samples/NDQ0YzczNWFhODVlMw==/MjJjNzM1YWE4NWUz/photo.jpg&amp;size=1024
  • Related reading: http://janetgregory.blogspot.com/2010/08/atdd-vs-bdd-vs-specification-by-example.html
  • This is the Discuss phase of the Discuss/Distill/Develop/Demo cycle.
  • Image taken from: http://2.bp.blogspot.com/-Q8TsaBzcxxg/TchwA0vS_sI/AAAAAAAAAEY/dMbBux1SukI/s320/lego+pile.jpg
  • Introduction to Test Driven Development

    1. 1. INTRODUCTION TO TEST DRIVEN DEVELOPMENT Presented by Sarah Dutkiewicz sarah@cletechconsulting.com
    2. 2. AGENDA • Test Driven Development – What does this mean? • Gathering Requirements • Gherkin • Tools for TDD in the Workplace
    3. 3. WHAT IS TEST DRIVEN DEVELOPMENT?
    4. 4. TEST DRIVEN DEVELOPMENT • Define {something} first through a test • Write the code to pass the test • Verify that the test succeeds • Improve upon the code and keep the test passing
    5. 5. Write the test Write the code to pass the test Improve the code while keeping the test passing RED-GREENREFACTOR
    6. 6. EXAMPLE – RUBY KOANS
    7. 7. EXAMPLE – RUBY KOANS
    8. 8. TDD CONCEPT - ASSERTIONS • Verify whether a certain condition has been met • Asserts come in many forms: • • • • • • (Not) Equal Contains / Any Is a Type Is an Instance of a Type Is (Not) Null Is (True/False) • Design Guideline – One assert per test
    9. 9. TDD CONCEPT – ARRANGE/ACT/ASSERT • Pattern for arranging a test 1. Arrange all preconditions and inputs. 2. Act on the object or method. 3. Assert that the results have occurred.
    10. 10. TEST-DRIVEN – TYPES OF TESTS Tests, Tests, and More Tests… Oh My!
    11. 11. TYPES OF TESTS • Unit Tests • Integration Tests • End-to-End Tests • Exploratory Testing
    12. 12. UNIT TESTS • Focus on a class or a method • Tests the smallest unit possible • Typically tests simple objects; does not test things such as: • Database communication • Network communication • File system manipulation
    13. 13. INTEGRATION TESTS • Tests functions, “does things” • Tests interactions with the outside world, include: • Database communication • Network communication • File system manipulation • Focused integration tests isolate the testing to one interaction at a time • Integration tests should run on their own, with a little help from 2 fundamental units: • Setup – run at the beginning of the test to set up the test environment • Tear-down – run at the end of the test or upon error to clean up the test environment
    14. 14. END-TO-END TESTS • The most brittle of tests – dependent on the big picture • Verifies that the unit tests and integration tests are working like they should • Start at the beginning and go through the whole process • Includes: • Acceptance testing • Functional testing
    15. 15. EXPLORATORY TESTING • Not an automated process; manual testing • Sometimes better to go this route rather than end-to-end tests – depending on the design and architecture of your application • EXPLORE! • Discovery • Investigation • Learning
    16. 16. MORE *-DRIVEN DEVELOPMENT Related philosophies and methodologies
    17. 17. OTHER RELATED *-DRIVEN DEVELOPMENT • Behavior Driven Development • Acceptance Test Driven Development • Specification by Example
    18. 18. ACCEPTANCE TEST DRIVEN DEVELOPMENT CYCLE Discuss the requirements Distill the tests in a friendly format Demo the code Develop the code (and hook the code to the tests)
    19. 19. ATDD AND THE TDD CYCLE REFACTOR Discuss the requirements Distill the tests in a friendly format Demo the code GREEN RED Develop the code (and hook the code to the tests) GREEN
    20. 20. GATHERING REQUIREMENTS The Importance of TDD & ATDD for the UX Realm and an Intro to Gherkin
    21. 21. DISCUSS • Conducted by all who are involved: • • • • Product owners Business analysts Developers QA • Requirements are explicitly spelled out. • Include use cases. • Include required behaviors or designs.
    22. 22. GHERKIN • Common language for gathering requirements • Written in “plain English” following a particular cadence • Can then be hooked up to various programming languages and testing tools • Serves as guidelines for automated tests as well as project documentation
    23. 23. GHERKIN COMPONENTS • Features • Scenarios & Scenario Outlines • Backgrounds • Steps • Multiline Arguments • Tags
    24. 24. FEATURES • Define a feature of an application • Starts with the Feature keyword and contains a few lines to define the feature Example: Feature: Short, concise, descriptive text of the goal In order to do something As someone related to this system I want to gain something out of this * Features are stored in a *.feature file
    25. 25. FEATURE EXAMPLE Feature: Checking out books In order to read eBooks on my eBook reader, As a library patron, I want to check out eBooks.
    26. 26. SCENARIOS • Possibilities of situations (scenarios) that apply to a feature • Scenarios are included in *.feature files with their relevant feature • Created with one or more steps
    27. 27. SCENARIO EXAMPLE Scenario: Checking out a book Given the library collection has the book I want to check out When I check out the book Then the library collection’s available count is reduced by 1
    28. 28. STEPS • Given a certain given condition • When a certain behavior happens • Then a certain outcome is expected • Additional keywords include But and And • • • • Given a certain given condition And another given condition When a certain behavior happens Then a certain outcome is expected
    29. 29. SCENARIO OUTLINES • Scenario Outlines eliminate the need for copying and pasting like scenarios and collapsing values into variables. • Rather than starting with Scenario, it starts with Scenario Outline. • Variables (placeholders) are denoted with names sandwiched in greaterthan and less-than symbols.
    30. 30. SCENARIO OUTLINE EXAMPLE Scenario Outline: Checking book checkout expiration Given a checkout period of <checkout_period> days When I open the book at day <open> Then the book should expire in <left> days Examples: | checkout_period | open | left | |7 |2 |5 | | 14 | 10 |2 | | 21 | 18 |3 |
    31. 31. MULTILINE ARGUMENTS • Tables Example: Scenario: Given the following accounts exist: |name |email |account_type| | Laura |laura@domain.com | Admin | | Sarah |sarah@domain.com | Admin | | Kevin | kevin@domain.com | User |
    32. 32. MULTILINE ARGUMENTS • Large paragraph of text Example: Scenario: Given a description search with: """ It was the best of times It was the worst of times """
    33. 33. BACKGROUNDS • Backgrounds setup the environment for all scenarios in a feature file. • Starts with the Background keyword and is typically made up of Given, And, and But clauses • Runs before individual scenario setup routines
    34. 34. BACKGROUND EXAMPLE Feature: Checkout eMaterials Background: Given a customer named “Sarah Dutkiewicz“ And a library card numbered “12345678901” And a checkout queue of books: | title | author | | Hop on Pop | Dr. Seuss | | Harold and the Purple Crayon | Crockett Johnson | | Shark Tales: How I Turned $1,000 into a Billion Dollar Business | Barbara Corcoran|
    35. 35. TAGS • Used for grouping like tests, scenarios, and/or features together • Starts with a @, followed by the tag name Examples: @UI @accounting @security • Many test runners support tags and allow collections of tests to be run by tag
    36. 36. TOOLS FOR TDD IN THE WORKPLACE
    37. 37. GHERKIN LANGUAGE RESOURCES AND GENERAL TDD RESOURCES • Behat – Writing Features – Gherkin Language • The Art of Agile Development: Test-Driven Development • Test first != TDD • Driving Development with Tests: ATDD and TDD • Let’s Explore – Exploratory Testing
    38. 38. .NET TDD RESOURCES • SpecFlow – Behavior Driven Development, Acceptance Test Driven Development, Specification by Example; includes support for Silverlight, Windows Phone, and Mono • TestDriven.Net – Visual Studio integration for unit tests • WatiN – Web Application Testing in .NET • TestStack.White – UI automation testing • Telerik Test Studio • Nunit • MbUnit • MSTest • NCover • TypeMock
    39. 39. JAVASCRIPT TDD RESOURCES • QUnit • Jasmine • Zombie.js • Mocha • Tutti • JSTestDriver • jsUnity • CasperJS
    40. 40. RUBY TDD RESOURCES • Cucumber – behavior driven development • Watir – Web Application Testing in Ruby • Ruby Koans – learn Ruby via testing • Rspec – primary Ruby testing tool
    41. 41. PHP TDD RESOURCES • Behat – behavior driven development • Mink – web acceptance testing • PHPUnit • SimpleTest • Phpt • Gouette – headless browser, web scraper
    42. 42. JAVA TDD RESOURCES • JUnit • Watij – Web Application Testing in Java • AppPerfect Java Unit Test
    43. 43. ADDITIONAL *DD RESOURCES • Sahi – JavaScript browser controller • Selenium – supports C#, Java, Perl, PHP, Python, Ruby • Fitnesse – supports multiple languages • Windmill – supports Python, JavaScript, Ruby • Canoo WebTest – supports Python, JavaScript • TSQLUnit – TDD for Transact-SQL • TST – the T-SQL Test Tool
    44. 44. CONTACT INFORMATION Sarah Dutkiewicz Cleveland Tech Consulting, LLC sarah@cletechconsulting.com Twitter: @sadukie Blog: http://codinggeekette.com

    ×