My opinion is that TDD can only reasonably be done if you already know what your implementation must be, which is difficult to do unless
* you have already done it, or something sufficiently similar, before;
* you have formal functional requirements; or
* you have detailed use cases.
Personally, I've recently come to really favor use cases as part of the design process. The mindset behind them requires some effort to learn, but I find them an effective vehicle for categorically separating what an application must do from any consideration for how it might do it.
* you have already done it, or something sufficiently similar, before; * you have formal functional requirements; or * you have detailed use cases.
Personally, I've recently come to really favor use cases as part of the design process. The mindset behind them requires some effort to learn, but I find them an effective vehicle for categorically separating what an application must do from any consideration for how it might do it.