SlipCover:近乎零开销的 Python 代码覆盖率分析工具
软件工程
2023-06-01 v4 编程语言
摘要
覆盖率分析被广泛使用,但可能面临高开销问题。这种开销在 Python 中尤为严重,因为 Python 本来就出了名的慢(最近的一项研究观察到其相比原生代码约有 30 倍的减速)。我们发现,Python 的最优(state of the art)覆盖率工具 coverage.py 在标准 Python 解释器下引入了 180% 的中位开销。当使用 PyPy(一种 JIT 编译的 Python 实现)时,减速更为极端,coverage.py 带来了 1300% 的中位开销。这种性能下降降低了覆盖率分析在大多数用例(包括测试和模糊测试)中的实用性,并排除了其在部署中的使用。本文提出 SlipCover,一种新颖的、近乎零开销的 Python 覆盖率分析器。SlipCover 无需修改 Python 解释器或 PyPy 即可工作。它首先处理程序的 AST 以准确识别所有分支和行。然后 SlipCover 动态重写 Python 字节码,为每个已识别的分支和行添加轻量级插桩。在运行时,SlipCover 定期去除已覆盖行和分支的插桩。结果是极低的开销——中位仅 5%——使得 SlipCover 适合在部署中使用。我们展示了其效率可转化为基于覆盖率的客户端速度的显著提升。作为概念验证,我们将 SlipCover 集成到 TPBT(一种定向基于属性的测试系统)中,并观察到 22 倍的加速。
引用
@article{arxiv.2305.02886,
title = {SlipCover: Near Zero-Overhead Code Coverage for Python},
author = {Juan Altmayer Pizzorno and Emery D Berger},
journal= {arXiv preprint arXiv:2305.02886},
year = {2023}
}
备注
Accepted to ISSTA 2023