From my point of view, TDD has two important aspects Testing driven development and refactoring.
Testing Driven is firstly advocated by TDD, however, refactoring is widely used through all kinds of processes.
The best priority of TDD is that the higher quality of code.
However, if developers don't following principles of TDD, the quality of source code may be lower.
benefits:
"No Debugging"
"High Quality"
"Enlarge development time" (Time schedule between dcut and release is shorter)
limitations:
" Lower Quality"
"Test cases are becoming a very important/critical software contracts"
"Can't produce new algorithms"