  As the primary cause of software defects, human error is the key to
understanding, and perhaps to predicting and avoiding them. Little research has
been done to predict defects on the basis of the cognitive errors that cause
them. This paper proposes an approach to predicting software defects through
knowledge about the cognitive mechanisms of human errors. Our theory is that
the main process behind a software defect is that an error-prone scenario
triggers human error modes, which psychologists have observed to recur across
diverse activities. Software defects can then be predicted by identifying such
scenarios, guided by this knowledge of typical error modes. The proposed idea
emphasizes predicting the exact location and form of a possible defect. We
conducted two case studies to demonstrate and validate this approach, with 55
programmers in a programming competition and 5 analysts serving as the users of
the approach. We found it impressive that the approach was able to predict, at
the requirement phase, the exact locations and forms of 7 out of the 22 (31.8%)
specific types of defects that were found in the code. The defects predicted
tended to be common defects: their occurrences constituted 75.7% of the total
number of defects in the 55 developed programs; each of them was introduced by
at least two persons. The fraction of the defects introduced by a programmer
that were predicted was on average (over all programmers) 75%. Furthermore,
these predicted defects were highly persistent through the debugging process.
If the prediction had been used to successfully prevent these defects, this
could have saved 46.2% of the debugging iterations. This excellent capability
of forecasting the exact locations and forms of possible defects at the early
phases of software development recommends the approach for substantial benefits
to defect prevention and early detection.
