I love reading the book Code Complete, by Steve McConnell. The following comes from it.
A systematic approach to developer testing maximizes your ability to detect errors of all kinds with a minimum of effort. Be sure to cover this ground:
- Test for each relevant requirement to make sure that the requirements have been implemented. Plan the test cases for this step at the requirements stage or as early as possible-preferably before you begin writing the unit to be tested. Consider testing for common omissions in requirements. The level of security, storage, the installation procedure, and system reliability are all fair game for testing and are often overlooked at requirements time,
- Test for each relevant design concern to make sure that the design has been implemented. Plan the test cases for the step at the design stage or as early as possible-before you begin the detailed coding of the routine or class to be tested.
- Use “basis testing” to add detailed test cases to those that test the requirements and the design. Add data-flow tests, and then add the remaining test cases needed to thoroughly exercice the code. At a minimum, you should test every line of code.
- Use a checklist of the kinds of errors you’ve made on the project to date or have made on previous projects.
Design the test cases along with the product. This can help avoid errors in requirements and design, which tend to be more expensive than coding errors. Plan to test and find defect as early as possible because it’s cheaper to fix defects early.
This text comes from Chapter 22: Developer Testing