Jon Udell on source code analysis writes...
TDD (test-driven development) is one increasingly popular approach to finding bugs.
Analysis is taking things apart. Design is putting things together. The tools described by Jon for automated analysis are fine.
But TDD is an approach for developers putting things together in such a way as they need less analysis later. Jon is misleading readers by putting TDD in the same category as automated analysis. TDD prevents bugs rather than find them.
Where more complex analysis is required today if available at all, the tools for design are improving in such a way as to reduce the amount of subsequent, after-the-fact, analysis. Such tools provide truly valuable model-driven development.
A really nice introduction into the theory and practice of these new tools is provided by the book "Concurrency: State Models & Java Programs". The future of TDD and truly advanced modeling is so bright you'll need to wear sunglasses.