A survey of new trends in symbolic execution for software testing and analysis

  • Authors:
  • Corina S. Păsăreanu;Willem Visser

  • Affiliations:
  • Carnegie Mellon University, NASA Ames Research Center, 94035, Moffett Field, CA, USA;University of Stellenbosch, Department of Computer Science, Stellenbosch, South Africa

  • Venue:
  • International Journal on Software Tools for Technology Transfer (STTT) - Special Section on HVC 07
  • Year:
  • 2009

Quantified Score

Hi-index 0.00

Visualization

Abstract

Symbolic execution is a well-known program analysis technique which represents program inputs with symbolic values instead of concrete, initialized, data and executes the program by manipulating program expressions involving the symbolic values. Symbolic execution has been proposed over three decades ago but recently it has found renewed interest in the research community, due in part to the progress in decision procedures, availability of powerful computers and new algorithmic developments. We provide here a survey of some of the new research trends in symbolic execution, with particular emphasis on applications to test generation and program analysis. We first describe an approach that handles complex programming constructs such as input recursive data structures, arrays, as well as multithreading. Furthermore, we describe recent hybrid techniques that combine concrete and symbolic execution to overcome some of the inherent limitations of symbolic execution, such as handling native code or availability of decision procedures for the application domain. We follow with a discussion of techniques that can be used to limit the (possibly infinite) number of symbolic configurations that need to be analyzed for the symbolic execution of looping programs. Finally, we give a short survey of interesting new applications, such as predictive testing, invariant inference, program repair, analysis of parallel numerical programs and differential symbolic execution.