Symbolic execution for software testing: three decades later
Cristian Cadar, Koushik Sen
- Read: 20 Apr 2025
- Published: 01 Feb 2013
Communications of the ACM, Volume 56, Issue 2 Pages 82 - 90
https://doi.org/10.1145/2408776.2408795
Apparently the author Cristian Cadar is actively working in the area of symbolic execution, he is also one of the authors of EXE: Automatically Generating Inputs of Death.
Compared to this survey, A Survey of Symbolic Execution Techniques might be a more detailed one to read.
When skimming the survey Symbolic execution for software testing: Three decades later I came accross a section named “Tools” which listed many symbolic execution tools with a brief introduction. I summarized them as below:
- DART: The first concolic testing tool that combines dynamic test generation with random testing and model checking techniques with the goal of systematically executing as many as possible execution paths of a program. DART was first implemented at Bell Labs for testing C programs, and has inspired many other extensions and tools since.
- CUTE: Extends DART to handle multithreaded programs that manipulate dynamic data structures using pointer operations. Developed at UIUC for C and Java programs (jCUTE is dedicated to Java).
- CREST: An open-source tool for concolic testing of C programs. It is an extensible platform for building and experimenting with heuristics for selecting which paths to explore.
- EXE: A symbolic execution tool for C programs designed for comprehensively testing complex software, with an empasis on systems code. EXE models memory with bit-level accuracy. EXE provides the speed necessary to quickly solve the constraints generated by real code, through a combination of low-level optimizations implemented in its purposely designed constraint solver STP, and a series of higher-level ones such as caching and irrelevant constraint elimination.
- KLEE: A redesign of EXE, built on top of the LLVM-compiler infrastructure. It performs concolic execution, models memory with bit-level accuracy, employs a variety of solving optimizations, and uses search heuristics to get high code coverage. one of the key improvements of KLEE over EXE is its ability to store a much larger number of concurrent states, by exploiting sharing among states at the object-level rahter than at the page-level. KLEE also has better environment interaction than EXE.
- SAGE: A dynamic symbolic execution tool developed by Microsoft for x86 binaries.
Written on