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
TDD DEFINED
• Software Development practice
• Focus on explicit expectations from tests
• Characterized by 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
• 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
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
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
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
•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
THE AWESOME
• high coverage
• fast
• informative
• not brittle
• visible to the team
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
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
LEGACY
• first, do no harm
• get sufficient coverage in place
• confirm existing functionality is correct
• review tests cases with team
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• 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
CONTROVERSY
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
RESOURCES• TDD is Dead - David Heinemeier-Hansson
• R.I.P. TDD - Kent Beck
• TDD “straw-men and rhetoric” - Gary Bernhardt
• Failures of “Intro to TDD” - Justin Searls
• Pragmatics of TDD - ‘Uncle’ Bob Martin
• When to Mock - ‘Uncle’ Bob Martin
• TDD Failed to become mainstream
• TDD a Love-Story - Nell Shamrell
Wednesday, October 29, 14