DocumentCode
3730228
Title
Studying the influence of standard compiler optimizations on symbolic execution
Author
Shiyu Dong;Oswaldo Olivo;Lingming Zhang;Sarfraz Khurshid
Author_Institution
Department of Electrical and Computer Engineering, University of Texas at Austin, 78712, USA
fYear
2015
Firstpage
205
Lastpage
215
Abstract
Systematic testing plays a vital role in increasing software reliability. A particularly effective and popular approach for systematic testing is symbolic execution, which analyzes a large number of program behaviors using symbolic inputs. Even though symbolic execution is among the most studied analyses during the last decade, scaling it to real-world applications remains a key challenge. This paper studies how a class of semantics-preserving program transformations, namely compiler optimizations, which are designed to enhance performance of standard program execution (using concrete inputs), influence traditional symbolic execution. As an enabling technology, the study uses KLEE, a well-known symbolic execution engine based on the LLVM compiler infrastructure, and focuses on 33 optimization flags of LLVM. Our specific research questions include: (1) how different optimizations influence the performance of symbolic execution for Unix Coreutils, (2) how the influence varies across two different program classes, and (3) how the influence varies across three different back-end constraint solvers. Some of our findings surprised us. For example, applying the 33 optimizations in a pre-defined order provides a slowdown (compared to applying no optimization) for a majority of the Coreutils when using the basic depth-first search with no constraint caching. The key finding of our work is that standard compiler optimizations need to be used with care when performing symbolic execution for creating tests that provide high code coverage. We hope our study motivates future research on harnessing the power of symbolic execution more effectively for enhancing software reliability, e.g., by designing program transformations specifically to scale symbolic execution or by studying broader classes of traditional compiler optimizations in the context of different search heuristics, memoization, and other strategies employed by modern symbolic execution tools.
Keywords
"Optimization","Program processors","Software reliability","Standards","Context","Benchmark testing"
Publisher
ieee
Conference_Titel
Software Reliability Engineering (ISSRE), 2015 IEEE 26th International Symposium on
Type
conf
DOI
10.1109/ISSRE.2015.7381814
Filename
7381814
Link To Document