Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Beyond Unit Testing - The Real Value of TDD - C...

Beyond Unit Testing - The Real Value of TDD - Client Talk

Twenty years after the public introduction of Test-Driven Development (TDD), in Kent Beck's Extreme Programming Explained, it remains a commonly misunderstood and underutilized practice. While there are many who espouse the benefits of TDD, misconceptions about the practice and its perceived learning curve serve to dampen its impact on the software industry.

This talk introduces the misconceptions about TDD, as being just another way to write unit tests. It disputes this belief by refocusing on the many benefits of the practice. The talk will detail the resulting sustainable, high-quality test suites that are a product of TDD. Additionally, it will describe the less visible benefits like software design feedback, and improvements to development structure and developer workflow; all of which are possible through the continued practice of TDD.

If you are a software engineer or a technical leader wanting to learn more about TDD, looking for the motivation to give the practice a try, or are looking for ways to encourage your team(s) to learn the practice, this talk is for you.

Anthony Sciamanna

June 08, 2021
Tweet

More Decks by Anthony Sciamanna

Other Decks in Programming

Transcript

  1. Beyond Unit Testing The Real Value of Test-Driven Development Anthony

    Sciamanna Senior Consultant Industrial Logic June 8, 2021
  2. TDD Refresher Image by Industrial Logic Senior Consultant - Tim

    Ottinger @asciamanna anthonysciamanna.com
  3. TD Refresher A Very Brief History of TDD 1994 Kent

    Beck releases the first version of the SUnit framework for Smalltalk @asciamanna anthonysciamanna.com
  4. TD Refresher A Very Brief History of TDD 1994 1995

    Kent demos TDD to Ward Cunningham at OOPSLA Austin in October. Details of the C3 Project start being publicized Kent Beck releases the first version of the SUnit framework for Smalltalk @asciamanna anthonysciamanna.com
  5. TD Refresher A Very Brief History of TDD 1994 1995

    1997 Kent demos TDD to Ward Cunningham at OOPSLA Austin in October. Details of the C3 Project start being publicized Kent Beck releases the first version of the SUnit framework for Smalltalk On a flight from Zurich to Atlanta (OOPSLA ‘97) Erich Gamma and Kent Beck create JUnit for Java @asciamanna anthonysciamanna.com
  6. TD Refresher A Very Brief History of TDD 1994 1995

    1997 1999 Kent demos TDD to Ward Cunningham at OOPSLA Austin in October. Details of the C3 Project start being publicized Kent Beck releases the first version of the SUnit framework for Smalltalk On a flight from Zurich to Atlanta (OOPSLA ‘97) Erich Gamma and Kent Beck create JUnit for Java Kent releases Extreme Programming Explained @asciamanna anthonysciamanna.com
  7. @asciamanna anthonysciamanna.com I don’t care if people write tests first

    or last. As long as they get written. - Anonymous Tech Lead
  8. Test Suite Quality Production Code Quality Test suite quality influences

    production code quality and vice-versa @asciamanna anthonysciamanna.com
  9. You Can’t Write Good Tests for Bad Code • Wrapping

    untestable code in unit tests results in brittle, low-quality tests • Test-first practices enable writing high quality production code and high-quality tests Markus Spiske for Tech Daily @asciamanna anthonysciamanna.com
  10. The TDD Quality Cycle Test Suite Production Code 2. Code

    under test must be testable (loosely coupled) Refactoring Refactoring 3. Enables tests to be small, precise, fast, isolated and independent Virtuous Cycle 1. We start in the test @asciamanna anthonysciamanna.com
  11. Microtest A short, simple, fast, isolated*, test that probes the

    behavior of a single class *Isolated does not mean we have to mock every dependency anthonysciamanna.com @asciamanna
  12. Microtests Don’t Access a network Access a database Access the

    filesystem Depend on other tests Require a complex environment to run in @asciamanna anthonysciamanna.com
  13. Arrange Act Assert Arrange – Act – Assert Or Given

    - When - Then anthonysciamanna.com @asciamanna
  14. Standardize common test constructs Create the object under test in

    Setup Standard name result to be asserted Standard name for object under test anthonysciamanna.com @asciamanna
  15. How To Stop Hating Your Test Suite Logic in tests

    confuses the story of what’s being tested. Test- scoped logic is hard to read and errors are easy to miss. - Justin Searls, Co-founder Test Double anthonysciamanna.com @asciamanna
  16. How To Stop Hating Your Test Suite Test code is

    untested code! - Justin Searls, Co-founder Test Double anthonysciamanna.com @asciamanna
  17. anthonysciamanna.com @asciamanna Test After Test First Manual testing often takes

    precedence Unit testing at end tends to be skipped to hit deadlines All code is tested as it is created or modified Feels like busy work if code is manually tested and considered “done” The test is the path to changing the system Code is not influenced by tests to be testable Code is influenced by the tests to be testable Tests don’t serve as feedback loops Tests are continuous feedback loops, supports refactoring and software design Tests don’t get refactored – created at end Tests are continuously refactored Tests are less comprehensive when added at end Tests are more comprehensive when added with each code change Coverage as a build gate often required (commonly 70% coverage) Coverage metrics unnecessary VS.
  18. TDD Disclaimer TDD influences design quality But it’s not a

    magic wand! anthonysciamanna.com @asciamanna
  19. TDD Disclaimer TDD influences design quality High Cohesion Loose Coupling

    Small Classes Small Methods anthonysciamanna.com @asciamanna
  20. TDD Disclaimer TDD provides a mechanism for learning software design

    High Cohesion Loose Coupling Small Classes Small Methods anthonysciamanna.com @asciamanna
  21. Practitioners still need to understand the concepts of software design

    TDD Disclaimer High Cohesion Loose Coupling Code Smells Design Patterns SOLID Refactoring Encapsulation GRASP Connascence anthonysciamanna.com @asciamanna
  22. Test-Driven Development Refactoring Legacy Code Techniques Microtesting / Test Suite

    Design Code Smells Design Patterns Cohesion & Coupling SOLID Continuous Integration Continuous Delivery Evolutionary Design Collaborative Development Iterative Development anthonysciamanna.com @asciamanna
  23. Too Much Test Setup Too Many Dependencies Too Many Arguments

    Arguments are Too Complex Code Under Test Doing Too Much anthonysciamanna.com @asciamanna
  24. Multiple ‘Act’ Steps Temporal Coupling Exists Complicated API Client needs

    to know too much about object under test Too Many Steps to Invoke Method Under Test anthonysciamanna.com @asciamanna
  25. Too Many Asserts Returning too complex of a type Code

    under test doing too much anthonysciamanna.com @asciamanna
  26. Too Many Test Cases Too much branching logic Code under

    test is doing too much anthonysciamanna.com @asciamanna
  27. Client-First Design / Outside-In TDD enables software design from a

    client’s perspective Leads to better designed interfaces between objects anthonysciamanna.com @asciamanna
  28. Refactoring into design yields a better design than Big Design

    Up Front Requirements Design Code Test Waterfall Mindset Requirements Test Code Design (Refactor) (Test-Driven) Agile Mindset Slide courtesy of Mike Rieser (@MichaelRieser) anthonysciamanna.com @asciamanna
  29. BIG PROBLEM @asciamanna anthonysciamanna.com Great software is created by GREAT

    TEAMS not heroic, rockstar, 10X developers working in isolation
  30. BIG PROBLEM @asciamanna anthonysciamanna.com Software development is a communication game

    Communication is the professional developer’s first order of business. Perhaps you thought that ‘getting it working’ was the first order of business for a professional developer. I hope by now, however, this book has disabused you of that idea. - Robert Martin, Clean Code
  31. Mental Benefits of TDD One of the hardest things to

    communicate about Test-Driven Development is the mental state it puts you in…On the original C3 project…progress was steady and unhurried; because it was unhurried it seemed slow, but looking back on how much we got done, it was clear that despite the unhurried feeling progress was really fast. “ ” anthonysciamanna.com @asciamanna
  32. Mental Benefits of TDD Concrete and visible progress on small

    incremental goals @asciamanna anthonysciamanna.com
  33. Mental Benefits of TDD Little or no time spent in

    the debugger or on repetitive, time consuming manual checks anthonysciamanna.com @asciamanna
  34. Learning TDD will help improve software design, developer workflow, increases

    developer happiness, and it’s a lot of fun! https://geepawhill.org https://github.com/testdouble/contributing-tests/wiki Test Double – Contributing Tests Wiki Industrial Logic eLearning https://www.industriallogic.com/elearning/ anthonysciamanna.com @asciamanna
  35. Attributes • Pygmy Marmoset - https://www.flickr.com/photos/gopak/39889008421 • SOS - https://www.flickr.com/photos/itupictures/16654290295

    • Darts - https://www.flickr.com/photos/mike-burns/374198933 • Quote - Nick Youngson CC BY-SA 3.0 • Magician - Photo by Pierrick VAN-TROOST on Unsplash • Litmus test - https://commons.wikimedia.org/wiki/File:Blue_and_red_litmus_paper.JPG • Self-operating napkin - https://upload.wikimedia.org/wikipedia/commons/8/88/Self- operating_napkin_%28Rube_Goldberg_cartoon_with_caption%29.jpg • Glass Cockpit - https://upload.wikimedia.org/wikipedia/commons/9/9f/C-5M_Cockpit.jpg • Public Domain, https://commons.wikimedia.org/w/index.php?curid=2466026 • Stack of Papers - https://upload.wikimedia.org/wikipedia/commons/b/b6/FileStack_retouched.jpg • El Diablo - https://en.wikipedia.org/wiki/Fire_Ball#/media/File:El_Diablo_Roller_Coaster.jpg • Creative Commons license: https://creativecommons.org/licenses/by/2.0/