Open Systems Laboratory at Illinois

Solving complex path conditions through heuristic search on induced polytopes

By Peter Dinges and Gul Agha. In Proceedings of the 22nd ACM SIGSOFT Symposium on Foundations of Software Engineering. Hong Kong, November 16-21 2014. ACM.

Full Text:
Download PDF


Test input generators using symbolic and concolic execution must solve path conditions to systematically explore a program and generate high coverage tests. However, path conditions may contain complicated arithmetic constraints that are infeasible to solve: a solver may be unavailable, solving may be computationally intractable, or the constraints may be undecidable. Existing test generators either simplify such constraints with concrete values to make them decidable, or rely on strong but incomplete constraint solvers. Unfortunately, simplification yields coarse approximations whose solutions rarely satisfy the original constraint. Moreover, constraint solvers cannot handle calls to native library methods. We show how a simple combination of linear constraint solving and heuristic search can overcome these limitations. We call this technique Concolic Walk. On a corpus of 11 programs, an instance of our Concolic Walk algorithm using tabu search generates tests with two- to three-times higher coverage than simplification-based tools while being up to five-times as efficient. Furthermore, our algorithm improves the coverage of two state-of-the-art test generators by 21% and 32%. Other concolic and symbolic testing tools could integrate our algorithm to solve complex path conditions without having to sacrifice any of their own capabilities, leading to higher overall coverage.


    author = "Dinges, Peter and Agha, Gul",
    title = "Solving Complex Path Conditions through Heuristic Search
             on Induced Polytopes",
    address = "Hong Kong",
    booktitle = "Proceedings of the 22nd ACM SIGSOFT Symposium on
                 Foundations of Software Engineering",
    month = "November 16-21",
    publisher = "ACM",
    year = "2014",