This report describes an empirical study comparing three defect detect
ion techniques: (a) code reading by stepwise abstraction, (b) function
al testing using equivalence partitioning and boundary value analysis,
and (c) structural testing using branch coverage. It is a replication
of a study that has been carried out at least four times previously o
ver the last 20 years. This study used 37 student subjects to apply th
e techniques to small C programs in a fractional factorial experimenta
l design. The major findings of the study are: (a) that the individual
techniques are of broadly similar effectiveness in terms of observing
failures and finding faults, (b) that the relative effectiveness of t
he techniques depends on the nature of the program and its faults, (c)
these techniques are consistently much more effective when used in co
mbination with each other. These results contribute to a growing body
of empirical evidence that supports generally held beliefs about the e
ffectiveness of defect detection techniques in software engineering. (
C) 1997 Elsevier Science B.V.