i was recently asked by my colleague, Richard Watt, for my definition of TDD. here's my response...
TDD is about using tests to specify the next important thing that the code should do and then to verify when it's done.
i do believe that tests are an excellent design aid; however the fact that they improve your design is largely incidental -- it just so happens that beautifully concise, loosely-coupled code is easier to test. it's just serendipity baby.
personally, i kind of look at TDD as like writing a sonnet. the requirement of testability is like being forced to write quatrains in iambic pentameter. somehow imposing constraints lead you to produce something beautiful. see, those elisabethans had it going on.