SELECT is an experimental system for assisting in the formal systematic debugging of programs. It is intended to be a compromise between an automated program proving system and the current ad hoc debugging practice, and is similar to a system being developed by King et al. of IBM. SELECT systematically handles the paths of programs written in a LISP subset that includes arrays. For each execution path SELECT returns simplified conditions on input variables that cause the path to be executed, and simplified symbolic values for program variables at the path output. For conditions which form a system of linear equalities and inequalities SELECT will return input variable values that can serve as sample test data. The user can insert constraint conditions, at any point in the program including the output, in the form of symbolically executable assertions. These conditions can induce the system to select test data in user-specified regions. SELECT can also determine if the path is correct with respect to an output assertion. We present four examples demonstrating the various modes of system operation and their effectiveness in finding bugs. In some examples, SELECT was successful in automatically finding useful test data. In others, user interaction was required in the form of output assertions. SELECT appears to be a useful tool for rapidly revealing program errors, but for the future there is a need to expand its expressive and deductive power.
[1]
James C. King.
A new approach to program testing
,
1975
.
[2]
John H. Wensley.
A Class of Non-Analytical Iterative Processes
,
1959,
Comput. J..
[3]
Ralph E. Gomory,et al.
An algorithm for integer solutions to linear programs
,
1958
.
[4]
C. A. R. Hoare,et al.
Algorithm 65: find
,
1961,
Commun. ACM.
[5]
J. F. Benders.
Partitioning procedures for solving mixed-variables programming problems
,
1962
.
[6]
William C. Hetzel,et al.
Program test methods
,
1973
.
[7]
William Howden.
Methodology for the automatic generation of program test data
,
1974
.
[8]
James C. King,et al.
A Program Verifier
,
1971,
IFIP Congress.
[9]
Zohar Manna,et al.
A Heuristic Approach to Program Verification
,
1973,
IJCAI.
[10]
Ben Wegbreit,et al.
The synthesis of loop predicates
,
1974,
CACM.