Experiences with the Design of a Run-Time Check

Run-time checks are often assumed to be a cost-effective way of improving the dependability of software components, by checking required properties of their outputs and flagging an output as incorrect if it fails the check. Run-time checks' main point of attractiveness is that they are supposed to be easy to implement. Also, they are implicitly assumed to be effective in detecting incorrect outputs. This paper reports the results of an experiment designed to challenge these assumptions about run-time checks. The experiment uses a subset of 196 of 867 programs (primaries) solving a problem called “Make Palindrome”. This is an existing problem on the “On-Line Judge” website of the university of Valladolid. We formulated eight run-time checks, and posted this problem on the same web-site. This resulted in 335 programs (checkers) implementing the run-time checks, 115 of which are used for the experiment. In this experiment: (1) the effectiveness of the population of possibly faulty checkers is very close to the effectiveness of a correct checker; (2) the reliability improvement provided by the run-time checks is relatively small, between a factor of one and three; (3) The reliability improvement gained by using multiple-version redundancy is much higher. Given the fact that this experiment only considers one primary/Run-Time Check combination, it is not yet possible to generalise the results.

[1]  Nancy G. Leveson,et al.  The Use of Self Checks and Voting in Software Error Detection: An Empirical Study , 1990, IEEE Trans. Software Eng..

[2]  Bertrand Meyer,et al.  Applying 'design by contract' , 1992, Computer.

[3]  Lorenzo Strigini,et al.  On the Effectiveness of Run-Time Checks , 2005, SAFECOMP.

[4]  Henrique Madeira,et al.  Experimental evaluation of the fail-silent behaviour in programs with consistency checks , 1996, Proceedings of Annual Symposium on Fault Tolerant Computing.

[5]  Manuel Blum,et al.  Software reliability via run-time result-checking , 1997, JACM.

[6]  Hermann Kopetz,et al.  Fault tolerance, principles and practice , 1990 .

[7]  Steven Skiena,et al.  Programming Challenges , 2003, Texts in Computer Science.

[8]  Lorenzo Strigini,et al.  The reliability of diverse systems: a contribution using modelling of the fault creation process , 2001, 2001 International Conference on Dependable Systems and Networks.

[9]  Neeraj Suri,et al.  On Systematic Design of Fast and Perfect Detectors , 2002 .

[10]  Johan Karlsson,et al.  Reducing critical failures for control algorithms using executable assertions and best effort recovery , 2001, 2001 International Conference on Dependable Systems and Networks.

[11]  MeyerBertrand,et al.  Design by Contract , 1997 .