Python 中不稳定测试的经验研究
软件工程
2022-02-15 v1
摘要
在没有代码变更的情况下导致虚假失败的测试,即不稳定测试(flaky tests),会妨碍回归测试、增加维护成本、可能掩盖真实缺陷,并降低对测试的信任。尽管不稳定测试的普遍性与重要性已得到充分证实,但先前的研究集中于 Java 项目,因此引发了其结论能否推广的疑问。为了更好地理解除 Java 之外软件开发中不稳定测试的作用,我们对当前最流行的编程语言之一 Python 所编写软件中不稳定测试的普遍性、成因与程度进行了经验研究。为此,我们从流行的 PyPI 包索引中抽样了 22352 个开源项目,并分析了其 876186 个测试用例的不稳定情况。我们的调查表明,Python 中不稳定测试的普遍程度与 Java 相当。然而原因有所不同:顺序依赖是 Python 中更为主导的问题,在我们的数据集中导致了 7571 个不稳定测试中的 59%。另有 28% 由测试基础设施问题引起,这是一种此前未被记录的不稳定测试成因。其余 13% 主要可归因于项目对网络和随机性 API 的使用,这反映出 Python 中常见软件的类型。我们的数据还表明,发现不稳定测试所需的运行次数多于文献中通常所做的次数:要以 95% 的置信度平均确信一个通过的测试用例不是不稳定的,需要 170 次重跑。
引用
@article{arxiv.2101.09077,
title = {An Empirical Study of Flaky Tests in Python},
author = {Martin Gruber and Stephan Lukasczyk and Florian Kroiß and Gordon Fraser},
journal= {arXiv preprint arXiv:2101.09077},
year = {2022}
}
备注
11 pages, to be published in the Proceedings of the IEEE International Conference on Software Testing, Verification and Validation (ICST 2021)