一句话:提出 Diver,以预言引导的无限制随机变异测试 SMT 求解器,发现 25 个新缺陷,其中 21 个关键。
SMT 求解器正成为许多应用的基础组件,因此保证其正确性非常重要。现有测试方法分为差分测试和预言引导两类,但前者难以验证求解器独有且重要的特性,后者因依赖有限的变异规则而无法生成多样化测试。本文提出 Diver,一种预言引导但无限制随机变异的 SMT 求解器测试技术,旨在发现现有方法遗漏的关键缺陷。作者将 Diver 用于验证 CVC5、Z3 和 dReal 的最新版本,共发现 25 个新缺陷,其中 21 个是直接影响求解器可靠性的关键缺陷;实验还表明,现有工具不太可能发现 Diver 所发现的这些缺陷。
We present Diver, a novel technique for effectively finding critical bugs in SMT solvers. Ensuring the correctness of SMT solvers is becoming increasingly important as many applications use solvers as a foundational basis. In response, several approaches for testing SMT solvers, which are classified into differential testing and oracle-guided approaches, have been proposed until recently. However, they are still unsatisfactory in that (1) differential testing approaches cannot validate unique yet important features of solvers, and (2) oracle-guided approaches cannot generate diverse tests due to their reliance on limited mutation rules. Diver aims to complement these shortcomings, particularly focusing on finding bugs that are missed by existing approaches. To this end, we present a new testing technique that performs oracle-guided yet unrestricted random mutations. We have used Diver to validate the most recent versions of three popular SMT solvers: CVC5, Z3 and dReal. In total, Diver found 25 new bugs, of which 21 are critical and directly affect the reliability of the solvers. We also empirically prove DIVER's own strength by showing that existing tools are unlikely to find the bugs discovered by Diver.