Usually, I first write my code, then write my tests. I've been doing that for years, and IMO, I usually churn out decent code.

Recently, for a small project, I decided to try out 'test driven development', first write the tests, then write the code, tweaking it till all tests pass.

There was a hairy section of code - after writing it, I ran it. Some of the corresponding tests failed, and I changed the code. Run it again, and voila, the tests passed. After finishing the rest of the code, Devel::Cover gave me a 100% coverage, and Test::More gave me 100% success. So, I handed it over for some in the field testing.

The code came quickly back to me. Remember the hairy code I changed to pass the tests? Well, it was correct after all, and I broke it. The tests turned out to be wrong.

Someone write me a Test::Test.

Perl --((8:>*

Edit by castaway - closed tt tag