通过输入数据结构约束改进 Python 原生库的测试用例生成
软件工程
2022-06-29 v1
摘要
现代 Python 项目利用原生库执行计算函数并提供 Python 接口以提升执行速度;因此,测试这些库对项目的鲁棒性至关重要。一个挑战是,现有方法使用覆盖率来引导生成,但原生库对 Python 代码而言是黑盒,没有执行信息。另一个挑战是,动态二进制插桩需要同时监控原生库和 Python 虚拟机,降低了测试性能。为应对这些挑战,本文提出一种在 Python 代码层工作的自动化测试用例生成方法。我们的洞见是,原生库中的许多路径条件是通过与虚拟机交互来处理输入数据结构的。在我们的方法中,我们对 Python 解释器进行插桩以监控原生库与虚拟机之间的交互,推导出关于结构的约束,然后利用这些约束来引导测试用例生成。我们在名为 PyCing 的工具中实现了该方法,并将其应用于六个广泛使用的 Python 项目。实验结果表明,在结构约束的引导下,PyCing 比现有测试用例和最先进的工具能覆盖更多的执行路径。此外,借助测试框架 Pytest 中的检查器,PyCing 能够识别出 10 个 Python 接口中的段错误以及 9 个中的内存泄漏。我们的插桩策略对测试效率也有可接受的影响。
引用
@article{arxiv.2206.13828,
title = {Improving Tese Case Generation for Python Native Libraries Through Constraints on Input Data Structures},
author = {Xin Zhang and Xutong Ma and Jiwen Yan and Baoquan Cui and Jun Yan and Jian Zhang},
journal= {arXiv preprint arXiv:2206.13828},
year = {2022}
}
备注
11 panges