Why TDD Works
Martin Fowler nails it (as he so often does):
My point is that we can’t look at testing mechanistically. Unit testing does not improve quality just by catching errors at the unit level. And, integration testing does not improve quality just by catching errors at the integration level. The truth is more subtle than that. Quality is a function of thought and reflection – precise thought and reflection. That’s the magic. Techniques which reinforce that discipline invariably increase quality.