A Theory of Fault-Based Testing

A theory of fault-based program testing is defined and explained. Testing is fault-based when it seeks to demonstrate that prescribed faults are not in a program. It is assumed that a program can only be incorrect in a limited fashion specified by associating alternate expressions with program expressions. Classes of alternate expressions can be infinite. Substituting an alternate expression for a program expression yields an alternate program that is potentially correct. The goal of fault-based testing is to produce a test set that differentiates the program from each of its alternates. A particular form of fault-based testing based on symbolic execution is presented. In symbolic testing, the output from the system is an expression in terms of the input and the symbolic alternative. Equating this with the output from the original program yields a propagation equation whose solutions determine those alternatives which are not differentiated by this test. Since an alternative set can be infinite, it is possible that no finite test differentiates the program from all its alternates. Circumstances are described as to when this can be decided. >

[1]  John B. Goodenough,et al.  Toward a theory of test data selection , 1975 .

[2]  Lori A. Clarke,et al.  A System to Generate Test Data and Symbolically Execute Programs , 1976, IEEE Transactions on Software Engineering.

[3]  Elaine J. Weyuker,et al.  Axiomatizing software test data adequacy , 1986, IEEE Transactions on Software Engineering.

[4]  Elaine J. Weyuker,et al.  Theories of Program Testing and the Application of Revealing Subdomains , 1980, IEEE Transactions on Software Engineering.

[5]  S. L. Gerhart,et al.  Toward a theory of test data selection , 1975, IEEE Transactions on Software Engineering.

[6]  Glenford J. Myers,et al.  Art of Software Testing , 1979 .

[7]  A. Offutt The coupling effect: fact or fiction , 1989 .

[8]  Larry Joe Morell A theory of error-based testing , 1983 .

[9]  Matthew M. Geller Test data as an aid in proving program correctness , 1976, POPL.

[10]  J. H. Rowland,et al.  On the Use of Transcendentals for Program Testing , 1981, JACM.

[11]  Lee J. White,et al.  A Domain Strategy for Computer Program Testing , 1980, IEEE Transactions on Software Engineering.

[12]  C. V. Ramamoorthy,et al.  Software Reliability—Status and Perspectives , 1982, IEEE Transactions on Software Engineering.

[13]  Walter S. Brainerd,et al.  Theory of computation , 1974 .

[14]  Richard J. Lipton,et al.  Theoretical and empirical studies on using program mutation to test the functional correctness of programs , 1980, POPL '80.

[15]  William E. Howden,et al.  Symbolic Testing and the DISSECT Symbolic Evaluation System , 1977, IEEE Transactions on Software Engineering.

[16]  Richard G. Hamlet,et al.  Error Propagation and Elimination in Computer Programs. , 1981 .

[17]  Martin R. Woodward,et al.  Experience with Path Analysis and Testing of Programs , 1980, IEEE Transactions on Software Engineering.

[18]  William E. Howden,et al.  Reliability of the Path Analysis Testing Strategy , 1976, IEEE Transactions on Software Engineering.

[19]  Richard J. Lipton,et al.  Hints on Test Data Selection: Help for the Practicing Programmer , 1978, Computer.

[20]  Harlan D. Mills,et al.  Structured programming - theory and practice , 1979, The systems programming series.

[21]  Richard G. Hamlet,et al.  Testing Programs with the Aid of a Compiler , 1977, IEEE Transactions on Software Engineering.

[22]  Oscar H. Ibarra,et al.  Straight-Line Programs with One Input Variable , 1982, SIAM J. Comput..

[23]  William E. Howden,et al.  Weak Mutation Testing and Completeness of Test Sets , 1982, IEEE Transactions on Software Engineering.

[24]  Harlan D. Mills Function Semantics for Sequential Programs , 1980, IFIP Congress.

[25]  Matthew S. Hecht,et al.  Flow Analysis of Computer Programs , 1977 .

[26]  Lawrence Yelowitz,et al.  Observations of Fallibility in Applications of Modern Programming Methodologies , 1976, IEEE Transactions on Software Engineering.

[27]  Steven J. Zeil,et al.  Testing for Perturbations of Program Statements , 1983, IEEE Transactions on Software Engineering.

[28]  Sanat K. Basu A Note on Synthesis of Inductive Assertions , 1980, IEEE Transactions on Software Engineering.