Skip to main content
QUICK REVIEW

[论文解读] Towards Bounded Infeasible Code Detection

Jürgen Christ, Jochen Hoenicke|arXiv (Cornell University)|May 30, 2012
Software Testing and Debugging Techniques参考文献 23被引用 3
一句话总结

本文提出了一种有界方法,通过使用可达性验证条件将可行的程序执行编码为逻辑公式,以检测不可行的代码。该方法引入了两种完备算法——路径覆盖和语句覆盖,能够在有限次循环展开范围内生成所有可行路径/语句的测试用例,从而确保任何未被覆盖的代码在该边界下可被证明为不可行。

ABSTRACT

A first step towards more reliable software is to execute each statement and each control-flow path in a method once. In this paper, we present a formal method to automatically compute test cases for this purpose based on the idea of a bounded infeasible code detection. The method first unwinds all loops in a program finitely often and then encodes all feasible executions of the loop-free programs in a logical formula. Helper variables are introduced such that a theorem prover can reconstruct the control-flow path of a feasible execution from a satisfying valuation of this formula. Based on this formula, we present one algorithm that computes a feasible path cover and one algorithm that computes a feasible statement cover. We show that the algorithms are complete for loop-free programs and that they can be implemented efficiently. We further provide a sound algorithm to compute procedure summaries which makes the method scalable to larger programs.

研究动机与目标

  • 为解决在传统静态分析无法区分不可达代码与不可行代码时,检测程序中不可行代码的挑战。
  • 通过确保所有生成的测试用例均对应实际、可终止的程序执行,改进测试用例生成。
  • 为在给定边界内验证不可行代码的缺失提供一种可靠且完备的方法,支持可靠的代码覆盖率分析。
  • 通过利用从可行执行中计算出的过程摘要,将该方法扩展至更大规模程序。
  • 提供一种用户友好、全自动的方法,除源代码外无需专家输入,且输出为真实、可执行的程序路径。

提出的方法

  • 使用可达性验证条件——一种编码了无循环程序所有可行执行的逻辑公式——形式化程序执行,其中辅助变量用于跟踪控制流路径。
  • 将循环展开有限次,将程序转换为无循环形式,从而实现所有可行执行的有限编码。
  • 使用定理证明技术寻找可达性验证条件的满足赋值,这些赋值可直接映射为具体的程序执行。
  • 引入两种算法:一种使用阻断子句避免重复访问同一路径,另一种使用启用子句优先处理未访问的程序块。
  • 通过从生成的测试用例中提取输入-输出对,将过程摘要计算为可行执行的下近似。
  • 在现有摘要无法捕获调用上下文中的可行执行时,按需重新计算摘要,以提升可扩展性。

实验结果

研究问题

  • RQ1能否设计一种有界不可行代码检测方法,使得所有生成的测试用例均对应真实、可终止的执行?
  • RQ2如何构建一个逻辑公式,以表示程序的所有可行执行,并实现从满足赋值到实际程序路径的直接映射?
  • RQ3能否开发出两种不同的算法,用于计算有界无循环程序的可行路径和语句覆盖,且保证其完备性与正确性?
  • RQ4从可行执行中计算出的过程摘要在多大程度上能提升大规模程序的可扩展性?
  • RQ5与现有方法相比,该方法在覆盖率完备性和执行效率方面的性能如何?

主要发现

  • 所提出的可行路径覆盖和语句覆盖算法对无循环程序是完备的,且可使用标准定理证明器高效实现。
  • 该方法保证了在给定循环展开边界内,未被测试用例覆盖的任何程序语句实际上都是不可行的。
  • 初步评估表明,该方法在有界执行环境下检测不可行代码方面优于现有工具。
  • 即使对于长达300行代码的过程,计算可行路径覆盖的效率也几乎与计算可行语句覆盖相当。
  • 使用过程摘要可实现对可行执行的可靠下近似,提升可扩展性,但当前在翻译和预言机支持方面的限制阻碍了其全面实际部署。
  • 当定理证明器无法找到满足赋值时(尤其是在非线性算术存在的情况下),该方法虽保持正确性但不完全,凸显了在实践中与动态分析集成的必要性。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。