数学执行:一种测试数值代码的统一方法
编程语言
2016-10-05 v1 软件工程
摘要
本文提出数学执行(ME),一种用于测试数值代码的新的统一方法。其核心思想是:(1)通过一个表示函数捕获所需的测试目标,以及(2)将自动化测试问题转化为该表示函数的最小化问题。该最小化问题通过数学优化来求解。ME 的主要特征在于,它仅通过执行表示函数来引导输入空间探索,从而避免了对程序语义的静态或符号推理,这对数值代码尤为困难。为说明这一特征,我们开发了一种基于 ME 的算法用于数值代码的覆盖率测试。我们还展示了将 ME 应用并适配到其他相关问题的潜力,包括路径可达性测试、边界值分析和可满足性检查。为展示 ME 的实际益处,我们实现了 CoverMe——一个面向分支覆盖率测试的概念验证实现,并在 Sun 的 C 数学库(用于例如 Android、Matlab、Java 和 JavaScript)上对其进行了评估。我们将 CoverMe 与随机测试以及 Austin(一个公开可用的、支持数值代码的基于分支覆盖率的测试工具,结合了符号执行与基于搜索的启发式方法)进行了比较。我们的实验结果表明,在所有测试程序上、跨所有评估的覆盖率指标,CoverMe 均实现了接近最优且显著高于随机测试的覆盖率比率。与 Austin 相比,CoverMe 将分支覆盖率从 43% 提升至 91%,且所用时间显著更少(平均 6.9 秒对 6058.4 秒)。
引用
@article{arxiv.1610.01133,
title = {Mathematical Execution: A Unified Approach for Testing Numerical Code},
author = {Zhoulai Fu and Zhendong Su},
journal= {arXiv preprint arXiv:1610.01133},
year = {2016}
}