University of Minnesota
Software Engineering Center
/

You are here

Parallel Symbolic Execution for Structural Test Generation

Date of Publication: 
July 2010
Associated Research Groups: 
Publication Files: 
Abstract: 
Symbolic execution is a popular technique for automatically generating test cases achieving high structural coverage. Symbolic execution suffers from scalability issues since the number of symbolic paths that need to be explored is very large (or even infinite) for most realistic programs. To address this problem, we propose a technique, Simple Static Partitioning, for parallelizing symbolic execution. The technique uses a set of pre-conditions to partition the symbolic execution tree, allowing us to effectively distribute symbolic execution and decrease the time needed to explore the symbolic execution tree. The proposed technique requires little communication between parallel instances and is designed to work with a variety of architectures, ranging from fast multi-core machines to cloud or grid computing environments. We implement our technique in the Java PathFinder verification tool-set and evaluate it on six case studies with respect to the performance improvement when exploring a finite symbolic execution tree and performing automatic test generation. We demonstrate speedup in both the analysis time over finite symbolic execution trees and in the time required to generate tests relative to sequential execution, with a maximum analysis time speedup of 90x observed using 128 workers and a maximum test generation speedup of 70x observed using 64 workers.
Venue: 
19th International Symposium on Software Testing and Analysis (ISSTA'10)
bibtex: 
@inproceedings{Staats:2010:PSE:1831708.1831732, author = {Staats, Matt and P\v{a}s\v{a}reanu, Corina}, title = {Parallel symbolic execution for structural test generation}, booktitle = {Proceedings of the 19th international symposium on Software testing and analysis}, series = {ISSTA '10}, year = {2010}, isbn = {978-1-60558-823-0}, location = {Trento, Italy}, pages = {183--194}, numpages = {12}, url = {http://doi.acm.org/10.1145/1831708.1831732}, doi = {http://doi.acm.org/10.1145/1831708.1831732}, acmid = {1831732}, publisher = {ACM}, address = {New York, NY, USA}, keywords = {java pathfinder, parallel, symbolic execution}, }