Test-Driven Development
Test-driven development (TDD) is all about writing “clean code that works.” It is also known as test-first coding. Here are some quotes (from Kent Beck) that intuitively describe TDD:
The style here is to write a few lines of code, then a test that should run, or even better, to write a test that won't run, then write the code that will make it run.
...
[After figuring out how to write one small piece of code ...] Now, instead of just coding on, we want to get immediate feedback and practice "code a little, test a little, code a little, test a little." [... So we immediately write a test for it.]
TDD grew out of Extreme Programming, ad evolved from the simple XP idea of “build a little, test a little” during coding. Basically, your code always has a complete set of tests that exercises its capabilities, and you write new tests as you add to your code. Practiced systematically, TDD:
- Gives you confidence that your code works correctly
- Helps you quickly find bugs as you write them
- Focuses you on the design task
- Helps you completely understand the requirements for your code
Learning About TDD
To learn more about TDD, the first place to start is the following (easy to read) classic:
- Kent Beck and Erich Gamma. Test infected: Programmers love writing tests. Java Report, 3(7), July 1998.
While the Java stuff may not apply, the basic practices and emphasis of TDD are well-presented. Next, the following two articles are required reading for getting a good overall view of TDD:
- Kent Beck. [Aim, fire test-first coding]. IEEE Software, 18(5): 87-89, Sept./ Oct. 2001.
- Dave Astels. What is test-driven development? The Coad Letter, issue 93, 2002.
Finally, if you’d like to dig into TDD more deeply, you might find the following sources useful:
- Kent Beck’s book, Test-driven Development: By Example, Addison-Wesley, 2003. He posted a draft that is available on-line.
- JUnit.org’s test first articles
- Dave Astels. Why test? The Coad Letter, issue 95, 2002.
- Dave Astels. JUnit. The Coad Letter, issue 102, 2002.