A question that often arises in our consulting and training practices concerns the relationship between Test-Driven Development (TDD) and Acceptance-Test-Driven Development (ATDD). Which is “really” TDD, and which should an organization focus on in terms of which comes first, and which should achieve the most attention and resources?
It’s not uncommon for someone to refer to TDD as “developers writing unit tests before the production code”. That is one form of TDD, certainly, but is a subset of a larger set of ideas and processes.
Similarly, it’s not uncommon for someone to refer to ATDD as “acceptance tests being written before the development cycle begins”. Again, this is not incorrect, but it is usually seen as a separate thing from what the developers do which is typically thought of as “TDD”.
The truth is they are both TDD. They are not conducted in the same way nor by the same people (entirely), and the value they provide is different (but compatible) … but at the end of the day TDD is the umbrella that they both fall under. TDD is a software development paradigm.
This blog series will begin by investigating the differences between these two forms of the overall “Test-Driven” process, which we will call (for clarity) ATDD and UTDD (or “Unit-Test-Driven Development”, which most people think of as TDD). We will see how they differ in terms of:
- Who is involved? Who creates these “tests”, updates them, and can ultimately read and understand them in the future? We will use the term “Audience” to describe the different groups that conduct ATDD and UTDD.
- When they are done, and the granularity of their activities. This “Cadence”, as we shall see, is quite different and for good reason.
- Finally, we will examine the difference in the value and the necessity of the effort to automate these two different processes. Both certainly can be automated, but how critical is such automation, what value is derived with and without it, and where should the effort to automate fall in the adoption process? We will call this section “Automation”.
- Shared understanding of the valuable behaviors that make up a requirement, and the way those behaviors satisfy the expectations of the stakeholders.
- The preservation of high-worth enterprise knowledge in a form that can retain its value over time.
- The creation of a high-quality architecture and design, and all the value that this brings in terms of the ability of the organization to respond to market challenges, opportunities, and changes.