A New Perspective on TDD: Tests as Increments of Process Improvement

Level: Introductory

Conversations surrounding TDD tend to be riddled with statements along the lines of “Tests are really <something else>.” While I am certainly not going to try and convince you that “tests aren’t really tests,” we will briefly discuss how tests can be used for process control, specification, analysis, design, etc. In fact, I believe the list of duties that a test can fulfill will continue to grow for decades.

The point of this talk is to open up our eyes to yet another way to look at tests and reconciling them with lean principles. Tests are also increments of process improvement.

Process/Mechanics

This is almost purely theoretical, so it will be slides, talking and Q&A the whole way through. The segments of the talk will be as follows:

  1. Lean principles
  2. How lean principles apply to coding
  3. The software development value-stream
  4. How lean principles apply in code
  5. Tests as multi-purpose tools
  6. Tests as process improvements
  7. Revisiting the value stream: including tests
  8. Cycle time, the one true metric of test suite health
  9. Wrap up/Q&A

Lean principles

Because there is now discord in the community about what Lean Thinking and the Lean Principles are, I will establish what I mean when I refer to lean. This can be summed up as a “traditional” or “Womack & Jones” view of the world in which there are five principles:

  1. Start by defining value as the customer understands it
  2. Align each test required to create value in the correct order to create a value stream
  3. Work to create flow across your value stream
  4. Let the customer pull value
  5. Compete against perfection rather than other organizations

How lean principles apply to coding
The classic application of lean thinking is to human processes. I will quickly cover how it applies to programming in an agile environment to ground the ideas in your head.

The software development value stream
I will demonstrate a lean process modeling tool called “value-stream mapping,” then I will use it to demonstrate a typical software development value stream.

How lean principles apply in code
I will also show that code, itself, should adhere to the lean principles and give examples of how it can. This will help us better understand the role of a test in a software development environment.

Tests as multi-purpose tools
I will demonstrate how tests can be used as more than just tests. Some of this is classic TDD theory - tests are executable specifications which means they can also be used as process control documents. Some of it is new - tests are development helper tools that make certain safeguards instantaneous.

Tests as process improvements
I will put tests in the context of process improvement and show that they are, in fact, part of your team’s process. To be clear, I don’t mean that writing tests is part of the process; I mean that each test you write is, itself, part of your software development process.

Revisiting the value stream: including tests
I will show where tests fit into a typical software development value stream.

Cycle time, the one true metric of test suite health
I will show that the only metric of whether your automated testing infrastructure, including the tests generated in TDD and the tests produced in traditional “QA” type activities, is how it impacts your ability to deploy value in a customer’s environment. Everything else is just pretend.

Learning outcomes
  • Basics of lean principles
  • Automated tests as multi-purpose tools
  • How tests influence flow and can be thought of as process improvements
  • How looking at tests this way can influence analysis, design, and planning decisions
Featured participants
Reviews
Subscribe to an RSS feed of reviews of this proposal Syndicate content