Parallel property checking with staged symbolic execution
While annotating functional correctness properties of code is useful in many bug finding techniques, efficiently checking properties in practice remains challenging. Symbolic execution is a powerful technique for systematically checking properties; however, it is expensive and can take long time before giving any results. In this paper, we introduce a novel approach for checking properties in parallel with staged symbolic execution. It consists of two stages running in parallel: one stage for finding all feasible paths to properties and the other stage for checking properties along these paths in parallel. Memoized analysis is applied to efficiently explore the state space during the latter stage. We implement our approach on top of Symbolic PathFinder, and evaluate it on several Java subjects with assertions. The experimental results show the effectiveness of our approach compared to sequential property checking using conventional symbolic execution. In particular, our approach finds the same assertion violations as sequential property checking while achieving up to 5.65X speedup, thereby our approach provides users earlier reports of assertion checking.