Microsoft Research recently published the article ”Exploding Software Engineering Myths,” by Janie Chang. For those who haven’t seen it, you will likely be surprised by some of the findings. Chang and his team worked with IBM and found that code coverage isn’t a terribly excellent metric, TDD may not necessarily speed development, Asserts (and by extension Code Contracts) greatly improve development code quality, and organization structure does matter though geographic proximity does not. The article includes links to the team’s published findings if you want more information.
I don’t really think the first finding is all that shocking, but I was surprised by the second. I’ve found TDD as useful as using Asserts–another unsurprising finding, at least to me. The authors do acknowledge that teams using TDD generally face far less post-production issues. So at worst, TDD likely keeps development time the same but allows the development team to catch the majority of the bugs as opposed to the end users. For my money, I would prefer my development team find the bugs and let the end users think we did an excellent job. In addition, you can never know when some bit of functionality just hasn’t been tested by an end user that might require a significant re-write to fix (heaven forbid).
That’s my two cents. What are your thoughts? Are you surprised at the findings?
*[TDD]: Test-driven Development