I agree Software Development by the truest form of the word, is in fact Engineering, but not all parallels can be made to its hardware counterparts, especially in its current state of maturity. We can build high amounts of complexity with few people in a very short period of time. All of which relies on other systems that are relatively unproven and unstable, it's hard to have a proper engineering process in these conditions.
This is why we need better code that can safely react to change. In my opinion, "better" code in statically typed languages is inherently easier to test. Its more isolated/abstracted and cohesive for its purpose.. and so are its supporting unit tests. This ensures small and large changes alike have minimum impact on the existing, unrelated code... without a nasty ripple effect.
TDD is just one ritual to writing code that I loosely term "better", it's definitely not an end-all. Clearly it's easy to assume writing more tests is the only correlation in less buggy software, but what the paper(s) don't show in numbers are the increased agility in the software process as every day brings a new change to the design that can be made more safely.
There is still a large human aspect to this whole process, and given short-term cost-benefit analysis', many times the code quality suffers; building rigid, new untested features that only cause growing pains and degrades the testing ritual that were initially put in place. That said, the cost-benefit analysis' do have to be made, and I wouldn't say that all bugs are worth fixing or can be fixed for a timely release. But you have to ask what the long-term cost is to a buggy system that becomes difficult to test or change without fear.
I'd like to hear everyones opinion on the matter.