I'm an idiot.. At least this one [bug] took about 5 minutes to find.. (Linus Torvalds in response to a bug report.)
When writing modular programs, one of the important things is to be able to test each section separately.
This means that often you will have to construct test rigs for each section that let you run it separately, making sure that it does what it is expected to do. This can be a lot of work, but pays off in tracing down problems - it's much easier to find a problem the earlier it gets discovered.
The other part of testing is ensuring that the sections work well together.
Again, it is not a good idea to simply throw all the sections together and hope they work. As far as possible, always add one thing at a time. This cuts down on tracing the source of problems, because it will usually be connected with the section just added.
If the program is big enough to have sub-sections and sub-subsections, always integrate each section separately before putting them together. Again, the idea is to simplify tracking down problems.
Under what circumstances can the software do damage to the machine or the product it is manufacturing? How much will this damage cost to rectify? These should form part of the test plan, including such techniques as simulating such situations (or inducing them under controlled conditions), to ensure that the software does indeed handle them satisfactorily.
If there is any way in which the software could (through action or inaction) cause a hazardous situation or harm a human, safety-critical software specialists need to be brought in, or such situations removed through hardware interlocks and the like.
$Date: 2004/12/28 05:32:12 $