You probably already know about unit testing, functional testing, acceptance testing, load testing, performance testing, and all sorts of test phases you wish your company did a better job on (or did at all!). Here is my rule of thumb, though, for what happens in a real product testing cycle.
- Unit testing needs to be cleaned up.
- End-to-end functional tests reveal areas that were not well thought out or are showstoppers preventing the testing. Rework and repeat.
- Time is still left in the testing phase, so all sorts of “minor” fixes are crammed in.
- Realize minor fixes are now causing other bugs. Stop trying to fix anything new. (This is the actual “feature complete” moment, not the one before testing starts.)
- End-to-end testing finally works, but things are too slow. Last minute performance fixes are done.
- Feel like things are close, then a terrible, hard to fix bug is found. Entire team tries to come up with easy workaround. Someone has to stay late to fix it for the next day. Issues are logged for a real fix in the next release.
- More testing is done, more bugs are found – and it turns out these bugs were in the previous release but never found. This means this testing cycle is done!
I will, for the sake of my own sanity, refrain from putting Step 8 (“The Patch Release”) from being an actual part of the process. I’m sure we won’t need it this time!