How Far Are We from Detecting Flaky Tests? On the Limits of Code-Based Detection
本文认为,当前的基于代码的测试不稳定检测器受限于存在缺陷的基准测试和依赖数据捷径而非真实代码分析的评估协议,并据此提出了一种转而关注从执行证据和环境上下文检测不稳定性的一种重构方法。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下你是一名正在试图破解谜题的侦探:计算机程序中的哪些测试是“不稳定”的(Flaky)?
一个不稳定的测试是一个调皮的小骗子。它是一段用于检查程序是否正常运行的代码,但有时它会说“一切都很好!”,而有时又会大喊“错误!”,即便程序本身根本没有发生任何变化。这会让开发者感到困惑,浪费他们的时间,并破坏构建软件的自动化流水线(称为 CI 流水线)。
长期以来,研究人员认为他们找到了一个神奇的水晶球。他们构建了 AI 侦探,可以通过观察测试代码(编写的指令)并立即判断:“啊,这个是骗子!”这些 AI 模型在成绩单上的得分极高,有些甚至声称准确率高达 98%。
但这篇由研究团队撰写的论文,其目的在于揭开帷幕并指出:等等。水晶球并不神奇;它只是个骗局。
伟大的“修复提交”(Fix-Commit)捷径
研究人员发现,这些 AI 侦探在作弊。它们是在一个充满了“捷径”的名为 IDoFT 的数据集上接受测试的。
想象一下,你试图教一名学生如何识别假币。你给他看一枚真币,然后给他看一枚用胶带粘起来的假币。学生并没有学会如何识别“假币”,他只是学会了如何识别“胶带”。
这就是之前发生的情况。在旧的数据集中,那些“非不稳定”的测试往往只是开发者修复后的“不稳定”测试。AI 并没有学习什么会导致测试不稳定的因素,它只是学会了识别“损坏”版本与“修复”版本之间的微小差异。这就像是在识别胶带,而不是在识别假币。
当研究人员移除了这种“胶带”(捷径),并强制要求 AI 去观察那些通过连续运行 500 次且未发生失败来确认的“非不稳定”测试时,这种魔力消失了。AI 的得分不仅下降了,而且直接崩盘了。
“项目不相交”(Project-Disjoint)的现实检验
研究人员还发现,AI 擅长记忆它所研究的具体项目,但对于预测新项目却表现糟糕。
这就像是一个背下了特定数学教科书答案的学生。如果给他们同一本教科书进行测试,他们能拿 A+。但如果你递给他们一本来自不同学校的不同教科书,他们就会不及格。
研究人员使用了一种“项目不相解”(project-disjoint)的规则来测试 AI:要求 AI 对从未见过的项目进行预测。在这种严格的规则下,AI 的表现并不比一个只会根据哪个答案更常见就盲目猜测“这个测试是不稳定的!”或“这个测试是正常的!”的随机猜测者更好。
事实上,在经过精心构建的新数据集 C-IDoFT(包含来自 57 个项目的 54,468 个测试)上,AI 寻找不稳定测试的能力几乎降到了零。它甚至无法比一个始终给出固定答案的基准模型做得更好。之前的那些高分?它们仅仅是测试设置产生的伪影,而非真正的侦探技能。
真正的线索在哪里?
那么,如果代码不是线索,那线索在哪里呢?
研究人员深入挖掘了 CI 日志(记录测试运行时发生情况的数字日志)。他们研究了 86 个真实的“端到端”(End-to-End)测试(即检查整个系统的复杂大型测试)。
他们发现,对于这 42% 的不稳定测试,仅通过查看代码和日志,就能找出它们失败的原因。通常,原因类似于网络波动或服务器响应缓慢。
但对于剩下的 58% 呢?代码和日志都毫无用处。原因隐藏在“执行环境”中——也许是特定的时序问题、奇怪的网络延迟,或者是某个在那个瞬间正忙碌着的资源。测试代码本身并不包含答案。
核心启示
这篇论文表明,我们一直在问错误的问题。我们一直在基于测试文件的文本内容来询问:“这个测试文件是不稳定的吗?”
研究人员认为,不稳定并不是代码的一种静态属性,不像衣服上的污渍那样固定。它更像是一个幽灵,只有当房间变暗、风在吹、且猫正睡在键盘上时才会出现。你不能仅通过观察猫来看到幽灵;你必须观察当猫、风和房间相互作用时会发生什么。
结论:
- 旧方法: 仅凭测试代码本身来预测不稳定性?行不通。 高分只是由于测试设置方式中的捷径所造成的幻象。
- 新方法: 我们需要停止猜测测试文件,转而开始分析执行过程。我们需要观察日志、时序和环境,以观察某次特定的失败是否是不稳定的。
这篇论文并不声称已经解决了不稳定测试的谜题。相反,它证明了那个由代码构成的“神奇水晶球”是破碎的。真正的线索隐藏在软件实际运行过程中那些混乱、杂乱的细节里,而不是隐藏在纸面上整洁的指令之中。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。