背景

回归测试是软件开发和维护的关键部分,它确保对现有软件的修改不会破坏现有的行为和功能。
关于回归测试的一个关键假设是它们的结果是确定性的:当在没有任何修改且具有相同配置的情况下执行时,它们要么总是失败,要么总是通过。 然而,在实践中,存在不确定的测试,称为片状测试(Flaky Test)。

本文提出了一种新的技术来自动识别代码中不稳定的根本原因的位置。

  • 作者在测试或系统代码中为任何不稳定的测试找到不稳定的位置,并向开发人员显示报告以帮助调试。 开发人员可以根据报告确定和修复错误。

De-Flake Your Tests - Automatically Locating Root Causes of Flaky Tests in Code At Google - 图1

方法论

De-Flake Your Tests - Automatically Locating Root Causes of Flaky Tests in Code At Google - 图2
DIVERGENCE 算法向开发人员显示方法执行的公共流程以及执行通过和执行失败的第一个分歧点,以帮助他们了解首先引入片状的位置。 在第一个分歧点之后,控制流中还有进一步的分歧,但这些分歧被忽略了,因为它们没有像第一个分歧点那样添加更多有价值的信息。

实验设计

83 个关于片状测试 Flaky Test 的历史问题且已被修复。
作者根据上述算法开发了一个原型工具 FLakiness Debugger (FD),FD对上述问题应用算法,得到最后的问题报告。
报告可分为三类:

  1. Useful-Exact (UE):不稳定是由于 FD 报告指向的确切行,可以通过更改这些行来修复。
  2. Useful-Relevant (UR):Flakiness 与 FD 报告指向的行相关,但应在代码中的另一个位置进行修复(例如,问题是由于 RPC 超时,FD 指向 RPC 调用站点 ,解决方法是增加在另一个文件中定义为常量的超时时间)。
  3. Not-Useful(NU):FD 报告不确定、难以理解或无用。

De-Flake Your Tests - Automatically Locating Root Causes of Flaky Tests in Code At Google - 图3
根据基准结果,FD 报告在 81.93% 的案例中预测修复是有用的。

在开发人员的反馈中,认为 FD 有助于调试和修复的片状问题测试,但希望该工具能够提供自动修复能力。