面向代理编写测试文件的 oracle 强度检查
接受编码代理 pull request 的团队,可以增加一个 CI 机器人或评审机器人,在评审前按 oracle 强度对新增和修改的测试文件分类。第一个可用版本可以标记无断言、非空检查、仅布尔检查、仅 mock 检查和仅快照检查的测试;对于有风险的变更,要求评审者备注或补充更强的断言。
这个问题很具体,因为代理生成的测试常常造成已经验证的假象。All Smoke, No Alarm 研究了来自 33,596 个代理编写 PR 的 86,156 个测试文件补丁,发现 80.2% 只有弱 oracle 信号或没有显式 oracle 信号。同一研究还发现,在控制代理、PR 大小、仓库 star 数、任务类型和语言后,更强的多信号 oracle 与更高的合并可能性相关。
低成本试点可以只在带有代理标签的 PR 上运行分类器,持续两周,并报告三个数字:变更测试文件中没有行为检查的占比、包含值断言或错误断言的占比,以及评审者覆盖率。这个工具不需要阻止每个弱测试。当补丁添加的测试文件只执行代码却不检查预期行为时,它会给评审者一个有针对性的警告。