Key research themes
1. How can symbolic execution effectively generate test inputs for programs with complex or structured data, including heap and database inputs?
This research area focuses on extending symbolic execution techniques to automatically generate test data for software programs that handle complex input domains beyond primitives—such as dynamically allocated data structures on the heap or relational databases—and on overcoming associated challenges like capturing structural invariants and handling SQL constraints. This matters as many real-world applications process complex data shapes requiring sophisticated input generation for thorough testing and bug detection.
2. What strategies improve the scalability and path explosion challenges inherent in symbolic execution?
Symbolic execution often suffers from state-space explosion due to exponential growth of program paths with input size or code complexity, limiting its practical applicability. Research focuses on novel analyses, pruning, caching, and incremental techniques to reduce redundant exploration, improve SMT query efficiency, and prioritize relevant program paths. These improvements aim to make symbolic execution feasible on large scale or complex software.
3. How can symbolic execution be extended or adapted to higher-level or domain-specific program analyses, including higher-order languages, security contracts, and specific application domains?
Beyond imperative program paths, symbolic execution is being adapted to verify properties in higher-order functional languages, enforce software contracts, analyze security properties like noninterference, and specifically target domains such as JavaScript, Android applications, and microcode. This theme encapsulates efforts to broaden symbolic execution’s applicability through novel semantic models, integration with specifications, and domain-tailored symbolic engines.