SELECT—a formal system for testing and debugging programs by symbolic execution

  • Authors:
  • Robert S. Boyer;Bernard Elspas;Karl N. Levitt

  • Affiliations:
  • Computer Science Group, Stanford Research Institute, Menlo Park, California;Computer Science Group, Stanford Research Institute, Menlo Park, California;Computer Science Group, Stanford Research Institute, Menlo Park, California

  • Venue:
  • Proceedings of the international conference on Reliable software
  • Year:
  • 1975

Quantified Score

Hi-index 0.08

Visualization

Abstract

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.