Flake 二分查找

不稳定的测试在机器人上单独的步骤中报告(示例构建)。

每个测试日志都提供一个预填充的命令行,用于触发自动化的 Flake 二分查找,例如

Trigger flake bisect on command line:
bb add v8/try.triggered/v8_flako -p 'to_revision="deadbeef"' -p 'test_name="MyTest"' ...

在第一次触发 Flake 二分查找之前,用户必须使用 google.com 帐户登录

bb auth-login

然后执行提供的命令,该命令将返回运行 Flake 二分查找的构建 URL(示例)。

如果幸运的话,二分查找会将你指向可疑的代码。如果不是,你可能需要进一步阅读……

详细描述 #

有关技术细节,请参阅实现 跟踪错误。Flake 二分查找方法与 findit 的意图相同,但使用不同的实现。

它是如何工作的? #

二分查找作业包含 3 个阶段:校准、反向二分查找和内向二分查找。在校准期间,测试会重复进行,将总超时时间(或重复次数)加倍,直到在一个运行中检测到足够多的不稳定情况。然后,反向二分查找将 Git 范围加倍,直到找到没有不稳定情况的版本。最后,我们对良好版本和最旧的错误版本之间的范围进行二分查找。请注意,二分查找不会生成新的构建产品,它完全基于之前在 V8 的持续基础设施上创建的构建。

二分查找失败时… #

用于自定义 Flake 二分查找的属性 #

你无需更改的属性 #

提示和技巧 #

对挂起测试进行二分查找(例如死锁) #

如果失败的运行超时,而通过的运行速度非常快,则调整 timeout_sec 参数很有用,这样二分查找就不会延迟等待挂起的运行超时。例如,如果通过通常在 <1 秒内完成,请将超时设置为较小的值,例如 5 秒。

对可疑代码获得更多置信度 #

在某些运行中,置信度非常低。例如,如果在一个运行中看到四个不稳定情况,则校准就满足了。在二分查找期间,每个出现一个或多个不稳定情况的运行都被计为错误。在这种情况下,可能需要重新启动二分查找作业,将 to_revision 设置为罪魁祸首,并使用比原始作业更高的重复次数或总超时时间,并确认再次得出相同的结论。

解决超时问题 #

如果整体超时选项导致构建挂起,最好估计合适的重复次数并将 total_timeout_sec 设置为 0

取决于随机种子的测试行为 #

很少情况下,代码路径仅在使用特定随机种子时才会触发。在这种情况下,可能需要使用 extra_args 修复它,例如 "extra_args": ["--random-seed=123"]。否则,压力运行程序将在整个过程中使用不同的随机种子。但请注意,特定随机种子可能会在一个版本中重现问题,但在另一个版本中不会。