Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

605 views

Published on

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

Published in: Software
  • Be the first to comment

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

  1. 1. TESTING AND TDD John McCaffrey @ J_McCaffrey Wednesday, October 29, 14
  2. 2. 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
  3. 3. ME • Started Unit testing in Java • TDD Javascript & Ruby • Love Testing and TDD Wednesday, October 29, 14
  4. 4. YOU •What are you doing already? •What are you hoping to learn? Wednesday, October 29, 14
  5. 5. TDD DEFINED Wednesday, October 29, 14
  6. 6. TDD DEFINED • Software Development practice • Focus on explicit expectations from tests • Characterized by red/green/refactor Wednesday, October 29, 14
  7. 7. RED/GREEN/REFACTOR Wednesday, October 29, 14
  8. 8. TDD BENEFITS • Correct behavior • Rapid feedback • Simpler, easier to understand • Fully covered by tests • Living documentation • Confidence Wednesday, October 29, 14
  9. 9. TDD == GTD? • Collect • Process • Organize • Review • Do it Wednesday, October 29, 14
  10. 10. • not just testing in general • more of a design practice with test benefits • TDD is not a silver-bullet! Wednesday, October 29, 14
  11. 11. 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
  12. 12. TDD RESOURCES • Blogs, Books, Workshops • Confreaks.com • pluralsight.com Wednesday, October 29, 14
  13. 13. WHY IS TESTING SO CRITICAL? Wednesday, October 29, 14
  14. 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
  15. 15. 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
  16. 16. 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
  17. 17. TESTS ARE FOR EVERYONE • Managers and Business team • QA Team • Support • dev ops • Customers Wednesday, October 29, 14
  18. 18. TESTING TYPES • Unit • Functional • Integration/system testing • User acceptance • Manual testing Wednesday, October 29, 14
  19. 19. DIFFERENT TYPES OF TESTS Wednesday, October 29, 14
  20. 20. 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
  21. 21. TESTING & TDD IN THE AGILE LANDSCAPE Wednesday, October 29, 14
  22. 22. FEEDBACK IS KEY Wednesday, October 29, 14
  23. 23. AGILE: FEEDBACK AT EVERY LEVEL Wednesday, October 29, 14
  24. 24. SHORTEST CYCLE Wednesday, October 29, 14
  25. 25. 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
  26. 26. 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
  27. 27. 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
  28. 28. IF YOU ONLY GET ONE THING OUT OF THIS... Wednesday, October 29, 14
  29. 29. FEEDBACK IS KEY Wednesday, October 29, 14
  30. 30. IF YOU ONLY GET ONE THING OUT OF THIS... • 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 Wednesday, October 29, 14
  31. 31. TDD WON’T FIX BAD REQUIREMENTS!! Wednesday, October 29, 14
  32. 32. THE PAYOFF Wednesday, October 29, 14
  33. 33. THE AWESOME • high coverage • fast • informative • not brittle • visible to the team Wednesday, October 29, 14
  34. 34. TDD IN PRACTICE Wednesday, October 29, 14
  35. 35. TERMINOLOGY • Unit tests • Setup/Fixture • Assertion • Coverage • Design • Interface/contract • Mock/Stub • DRY • YAGNI • Automated tests • Continuous integration • Continuous deployment Wednesday, October 29, 14
  36. 36. 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
  37. 37. SIMPLE DESIGN • Passes all the tests • Minimal Duplication • Maximizes clarity • Fewest number of classes or methods Wednesday, October 29, 14
  38. 38. SIMPLE DESIGN • Low Coupling • High Cohesion • High Encapsulation • SOLID Wednesday, October 29, 14
  39. 39. TDD WORKFLOW • New code • Legacy • Bugs Wednesday, October 29, 14
  40. 40. NEW CODE Wednesday, October 29, 14
  41. 41. 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
  42. 42. 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
  43. 43. 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
  44. 44. TEST CODE Wednesday, October 29, 14
  45. 45. TEST Wednesday, October 29, 14
  46. 46. CODE Wednesday, October 29, 14
  47. 47. LEGACY • first, do no harm • get sufficient coverage in place • confirm existing functionality is correct • review tests cases with team Wednesday, October 29, 14
  48. 48. TEST FIRST, REFACTOR LATER I’M SERIOUS!! Wednesday, October 29, 14
  49. 49. CODE SAMPLE Wednesday, October 29, 14
  50. 50. 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
  51. 51. PROS/CONS Wednesday, October 29, 14
  52. 52. PROS • Focus • Confidence • Rapid Feedback • Clear intention • Executable documentation Wednesday, October 29, 14
  53. 53. 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
  54. 54. 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
  55. 55. CONTROVERSY Wednesday, October 29, 14
  56. 56. Wednesday, October 29, 14
  57. 57. CONTROVERSY • 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!” Wednesday, October 29, 14
  58. 58. 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
  59. 59. 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
  60. 60. LET’S HAVE SOME QUESTIONS! John McCaffrey @ J_McCaffrey Wednesday, October 29, 14

×