Your criticizing something you never used, while instead you should’ve written a critique on those who didn’t understand — including yourself?
Either way — there are only two forms of testing that are really necessary in my experience:
- Black box testing on ‘unit’ level,
- Automated (!) regression testing on system level (a.k.a. integration testing)
The reason is very simple: the first form catches the most obvious bugs in your (colleagues) fresh new code, the second covers you from breaking something else with your latest update. This is based on 25 years of work on software systems across different domains (from high tech embedded to finance), ranging in size from 500 to 30 million lines of code. And in all honesty, I don’t care if you call it TDD, and if the tests are written before or after, as long as they pass and verify that the system does what it is specified to do.