Car manufacturers model car bodies mathematically so they have a good idea how a body will behave before they build it.
This hints at why the philosophy of TDD is not as helpful as it seems: it confuses modelling/analysis with implementation.
Your testing methodology can be perfectly implemented, but if your problem analysis is wrong your software will still be useless and broken.
TDD would be more interesting if it understood the distinction between specific behavioural expectations (easy to test for, but incomplete), generic applicability and model robustness (much harder to test for, but more complete), and complete formal correctness (often unreachable, but always an interesting goal.)
TDD is better than nothing. If all you can manage is a set of behavioural tests, that should still improve reliability.
But it's a big leap from there to the suggestion that if you define your spec as a series of behavioural tests and your code passes them all, you have a full and correct solution for the initial requirement.
That is just plain wrong, and in untrained hands it can be dangerous.