TestDrivenDevelopment

testing · clean code

tags:

Test-Driven Development (TDD) is a technique for building software that guides software development by writing tests. It was developed by by Kent Beck in the late 1990's as part of Extreme Programming. In essence you follow three simple steps repeatedly:

You continue cycling through these three steps, one test at a time, building up the functionality of the system. Writing the test first, what XPE2 calls Test-First Programming, provides two main benefits. Most obviously it's a way to get SelfTestingCode, since you can only write some functional code in response to making a test pass. The second benefit is that thinking about the test first forces you to think about the interface to the code first. This focus on interface and how you use a class helps you separate interface from implementation.

The most common way that I hear to screw up TDD is neglecting the third step. Refactoring the code to keep it clean is a key part of the process, otherwise you just end up with a messy aggregation of code fragments. (At least these will have tests, so it's a less painful result than most failures of design.)

Further Reading

The best book for getting started with TDD is Kent Beck's Test-Driven Development.

For online resources a good place to start is the TDD chapter of James Shore's Art of Agile Development. James also writes a series of screencasts called Let's Play TDD