A Taste of TDD: The basics of TDD, why it is hard and how to do it better

60
TESTING AND TDD John McCaffrey @ J_McCaffrey Wednesday, October 29, 14

description

A Taste of TDD: Basic overview of Agile Testing, TDD in practice, Pros/Cons of Test Driven Development, Recent TDD Controversey (DHH, Kent Beck, Martin Fowler), and some strategies for doing it well. This is a lead in to a full Agile Workshop on Scrum/XP, TDD, and Pairing

Transcript of A Taste of TDD: The basics of TDD, why it is hard and how to do it better

TESTING AND TDD

John McCaffrey@ J_McCaffrey

Wednesday, October 29, 14

AGENDA• Poll: What are your current testing practices?

•What is TDD?

•Where does it fit in the Agile landscape

• TDD basics

• Pros/Cons/Controversy

•Demo/Q&A

Wednesday, October 29, 14

ME

• Started Unit testing in Java

• TDD Javascript & Ruby

• Love Testing and TDD

Wednesday, October 29, 14

YOU

•What are you doing already?

•What are you hoping to learn?

Wednesday, October 29, 14

TDD DEFINED

Wednesday, October 29, 14

TDD DEFINED

• Software Development practice

• Focus on explicit expectations from tests

• Characterized by red/green/refactor

Wednesday, October 29, 14

RED/GREEN/REFACTOR

Wednesday, October 29, 14

TDD BENEFITS• Correct behavior

• Rapid feedback

• Simpler, easier to understand

• Fully covered by tests

• Living documentation

• Confidence

Wednesday, October 29, 14

TDD == GTD?

• Collect

• Process

• Organize

• Review

• Do it

Wednesday, October 29, 14

• not just testing in general

•more of a design practice with test benefits

• TDD is not a silver-bullet!

Wednesday, October 29, 14

WHAT WE WILL COVER• Where Testing and TDD fit in Agile

• General Agile Testing practices

• TDD Practice

• Pros/Cons/Controversy

• Demo/Q&A

Wednesday, October 29, 14

TDD RESOURCES

• Blogs, Books, Workshops

• Confreaks.com

• pluralsight.com

Wednesday, October 29, 14

WHY IS TESTING SO CRITICAL?

Wednesday, October 29, 14

DOES OUR CODE...

• function correctly?

• handle expected edge cases and exceptions?

• allow for new features and change?

•make sense to new team members?

Wednesday, October 29, 14

MO’ PROBLEMS• Code changes create new bugs

• Fear of changing anything leads to worse code

• Estimates are higher, changes take longer

• Bugs, Bugs, Bugs, regression, Bugs, Bugs

• Time between build to feedback is too long

Wednesday, October 29, 14

WITH TESTS

• Code change is safer

• Component design is clearer

• Feedback is quicker

• Safety and freedom to make the code better

Wednesday, October 29, 14

TESTS ARE FOR EVERYONE

•Managers and Business team

•QA Team

• Support

• dev ops

• Customers

Wednesday, October 29, 14

TESTING TYPES

• Unit

• Functional

• Integration/system testing

• User acceptance

•Manual testing

Wednesday, October 29, 14

DIFFERENT TYPES OF TESTS

Wednesday, October 29, 14

TDD APPLIED

• You can use TDD and Test-First with all types of testing

• TDD helps you focus on your specific task

• TDD may be challenging for some types of testing

Wednesday, October 29, 14

TESTING & TDD IN THE

AGILE LANDSCAPE

Wednesday, October 29, 14

FEEDBACK IS KEY

Wednesday, October 29, 14

AGILE:FEEDBACK AT EVERY LEVEL

Wednesday, October 29, 14

SHORTEST CYCLE

Wednesday, October 29, 14

XP PRACTICES

• Planning Game

• On-site Customer

• Small Releases

• Simple design

• Customer Testing

• Metaphor

• Sustainable pace (40hr)

• Common Standards

• Collective Ownership

• Unit Testing

• Refactoring

• Continuous Integration

• Pair Programming

Wednesday, October 29, 14

XP PRACTICES

• Planning Game

• On-site Customer

• Small Releases

• Simple design

• Customer Testing

• Metaphor

• Sustainable pace (40hr)

• Common Standards

• Collective Ownership

• Unit Testing

• Refactoring

• Continuous Integration

• Pair Programming

Wednesday, October 29, 14

TDD FEEDBACK CYCLE• Code is correct

•Design is workable

• Intention is clear

•Dependencies and collaborators are minimal

• It does what the Developer intended....

Wednesday, October 29, 14

IF YOU ONLY GET ONE THING OUT OF THIS...

Wednesday, October 29, 14

FEEDBACK IS KEY

Wednesday, October 29, 14

•Define acceptance test criteria as team, as part of the story definition

• write out the test steps

• plan to automate them

• update with any test cases that are discovered

IF YOU ONLY GET ONE THING OUT OF THIS...

Wednesday, October 29, 14

TDD WON’T FIX BAD REQUIREMENTS!!

Wednesday, October 29, 14

THE PAYOFF

Wednesday, October 29, 14

THE AWESOME

• high coverage

• fast

• informative

• not brittle

• visible to the team

Wednesday, October 29, 14

TDD IN PRACTICE

Wednesday, October 29, 14

TERMINOLOGY• Unit tests

• Setup/Fixture

• Assertion

• Coverage

•Design

• Interface/contract

•Mock/Stub

•DRY

• YAGNI

• Automated tests

• Continuous integration

• Continuous deployment

Wednesday, October 29, 14

TDD WORKFLOW

• write the test, watch it fail

• write “just enough” code to make it pass

• rinse/repeat, improving the tests and code as you go

Wednesday, October 29, 14

SIMPLE DESIGN

• Passes all the tests

•Minimal Duplication

•Maximizes clarity

• Fewest number of classes or methods

Wednesday, October 29, 14

SIMPLE DESIGN

• Low Coupling

• High Cohesion

• High Encapsulation

• SOLID

Wednesday, October 29, 14

TDD WORKFLOW

•New code

• Legacy

• Bugs

Wednesday, October 29, 14

NEW CODE

Wednesday, October 29, 14

STORY SAMPLE

• As a Standard User I need to see my list of outstanding orders, so I can review and complete them in priority order

Wednesday, October 29, 14

STORY SAMPLE

• As a Standard User I need to see my list of outstanding orders, so I can review and complete them in priority order

Wednesday, October 29, 14

STORY SAMPLE

• As a Customer I need to calculate the tip for my bill, so I can save time and include a reasonable amount

Wednesday, October 29, 14

CODETEST

Wednesday, October 29, 14

TEST

Wednesday, October 29, 14

CODE

Wednesday, October 29, 14

LEGACY

• first, do no harm

• get sufficient coverage in place

• confirm existing functionality is correct

• review tests cases with team

Wednesday, October 29, 14

TEST FIRST,REFACTOR LATER

I’M SERIOUS!!

Wednesday, October 29, 14

CODE SAMPLE

Wednesday, October 29, 14

BUGS

• write a test to confirm the bug

• change the code to fix the bug

• the test should confirm the fix

Wednesday, October 29, 14

PROS/CONS

Wednesday, October 29, 14

PROS• Focus

• Confidence

• Rapid Feedback

• Clear intention

• Executable documentation

Wednesday, October 29, 14

CONS• TDD is HARD!!

• Refactoring is an uncertain art

• Some parts are hard to test first

• False sense of security

• Focus more on the tests than the system!

Wednesday, October 29, 14

ANTI-PATT3RNS• huge setup, reused unnecessarily

• too much going on in one test

• only testing happy-path, not exceptions

• too much boiler-plate, basic tests

• over-mocking: “tests pass, but production is broken”

• not doing the ‘refactor’ part of Red/Green/Refactor

Wednesday, October 29, 14

Wednesday, October 29, 14

• Used to love and promote TDD

•Dogmatic TDD is not helpful

• Focusing exclusively on speed and low-coupling

• Shaming others for not following “TDD or Die!”

CONTROVERSY

Wednesday, October 29, 14

SUMMARY

• Tests are worth the investment

• Everyone on the team should care about them

• TDD is a great way to improve your code and tests

• Find an approach that works best for your team

Wednesday, October 29, 14

LET’S HAVE SOMEQUESTIONS!

John McCaffrey@ J_McCaffrey

Wednesday, October 29, 14