中文

系统性 Flakiness:Flaky 测试失败共现的实证分析

软件工程 2025-04-24 v1

摘要

Flaky 测试会在不发生代码更改的情况下产生不一致的结果,为软件开发人员带来重大挑战。一项工业案例研究报告称,开发人员每月花费 1.28% 的时间修复 Flaky 测试,成本为 2,250 美元。我们发现,Flaky 测试往往存在于集群中,存在共现的失败,这些失败共享相同的根本原因,我们称之为系统性 Flakiness。这表明开发人员可以通过解决共享的根本原因来减少修复成本,通过一次性修复多个 Flaky 测试,而不是逐一处理。本研究是一次转折点,通过挑战深入的假设,即 Flaky 测试失败是孤立发生的事件。我们使用来自 GitHub 上 24 个 Java 项目的 10,000 次测试套件运行的已建立数据集,涵盖数据编排到作业调度等领域。其中包含 810 个 Flaky 测试,我们利用这些测试执行了混合方法的实证分析,以分析共现的 Flaky 测试失败。系统性 Flakiness 是广泛且重要的。我们对 Flaky 测试根据其失败共现情况进行层次聚类,发现所有项目中 75% 的 Flaky 测试属于一个聚类,平均聚类大小为 13.5 个 Flaky 测试。与仅通过 10,000 次测试套件运行来识别系统性 Flakiness 不同,我们演示了一种轻量级替代方法,通过基于静态测试用例距离度量的机器学习模型进行训练。通过对堆栈跟踪进行的手动检查,由四位作者独立进行,并通过协商一致解决,我们确定不间歇的网络问题和外部依赖性不稳定性是系统性 Flakiness 的主要原因。

关键词

引用

@article{arxiv.2504.16777,
  title  = {Systemic Flakiness: An Empirical Analysis of Co-Occurring Flaky Test Failures},
  author = {Owain Parry and Gregory Kapfhammer and Michael Hilton and Phil McMinn},
  journal= {arXiv preprint arXiv:2504.16777},
  year   = {2025}
}