To ensure that the customer receives a stable product with which to perform
acceptance testing, developers generally begin by writing unit tests
first, then move to coding software units. The unit tests are failure tests, in
that developers design them to cause their software to fail some requirement.
Paradoxically, developers must write failing software to, in effect,
test the test. Once test harnesses are in place, developers proceed to write
software that passes the unit tests.