The Use of Self Checks and Voting in Software Error Detection: An Empirical Study

  • Authors:
  • Nancy G. Leveson;Stephen S. Cha;John C. Knight;Timothy J. Shimeall

  • Affiliations:
  • Univ. of California, Irvine;Univ. of California, Irvine;Univ. of Virginia, Charlottesville;Naval Postgraduate School, Monterey, CA

  • Venue:
  • IEEE Transactions on Software Engineering
  • Year:
  • 1990

Quantified Score

Hi-index 0.01

Visualization

Abstract

The results of an empirical study of software error detection using self checks and N-version voting are presented. Working independently, each of 24 programmers first prepared a set of self checks using just the requirements specification of an aerospace application, and then each added self checks to an existing implementation of that specification. The modified programs were executed to measure the error-detection performance of the checks and to compare this with error detection using simple voting among multiple versions. The analysis of the checks revealed that there are great differences in the ability of individual programmers to design effective checks. It was found that some checks that might have been effective failed to detect an error because they were badly placed, and there were numerous instances of checks signaling nonexistent errors. In general, specification-based checks alone were not as effective as specification-based checks combined with code-based checks. Self checks made it possible to identify faults that had not been detected previously by voting 28 versions of the program over a million randomly generated inputs. This appeared to result from the fact that the self checks could examine the internal state of the executing program, whereas voting examines only final results of computations. If internal states had to be identical in N-version voting systems, then there would be no reason to write multiple versions.