In a walkthrough, a group of developers—with three or four being an
optimal number—performs the review. Only one of the participants is the
author of the program. Therefore, the majority of program testing is conducted
by people other than the author, which follows testing principle 2,
which states that an individual is usually ineffective in testing his or her
own program. (Refer to Chapter 2, Table 2.1, and the subsequent discussion
for all 10 program testing principles.)
An inspection or walkthrough is an improvement over the older deskchecking
process (whereby a programmer reads his or her own program
before testing it). Inspections and walkthroughs are more effective, again
because people other than the program’s author are involved in the
process.
Another advantage of walkthroughs, resulting in lower debugging
(error-correction) costs, is the fact that when an error is found it usually is
located precisely in the code as opposed to black box testing where you
only receive an unexpected result. Moreover, this process frequently
exposes a batch of errors, allowing the errors to be corrected later en
masse. Computer-based testing, on the other hand, normally exposes only
a symptom of the error (e.g., the program does not terminate or the
program prints a meaningless result), and errors are usually detected and
corrected one by one.
These human testing methods generally are effective in finding from
30 to 70 percent of the logic-design and coding errors in typical programs.
They are not effective, however, in detecting high-level design errors, such
as errors made in the requirements analysis process. Note that a success
rate of 30 to 70 percent doesn’t mean that up to 70 percent of all errors
might be found. Recall from Chapter 2 that we can never know the total
number of errors in a program. Thus, what this means is that these methods
are effective in finding up to 70 percent of all errors found by the end
of the testing process.
Of course, a possible criticism of these statistics is that the human processes
find only the ‘‘easy’’ errors (those that would be trivial to find with
computer-based testing) and that the difficult, obscure, or tricky errors
can be found only by computer-based testing. However, some testers
using these techniques have found that the human processes tend to
be more effective than the computer-based testing processes in finding
certain types of errors, while the opposite is true for other types of
errors (e.g., uninitialized variables versus divide by zero errors).