研究分析4882个Agent生成的PR,发现仅49.6%添加了测试,现存测试对Java覆盖61.5%变更行、Python仅27%,纯靠CI绿灯判断代码质量不可靠。
简短回答:不够。绿色 PR 本身不足为信,因为 AI Agent 添加测试的行为并不稳定,且现有测试遗漏了大量改动行。绿色通过只是信号,务必进一步检查覆盖率和行为。
GitHub 自身的 Pull Request 流程将检查视为一个输入,而非完整结论。状态检查显示自动化测试、构建或其他验证是否通过,受保护分支可以在合并前要求这些检查通过。这很有用,但这是合并规则,而非变更安全的证明。一个绿色 PR 仍然可能测试不足,尤其是当 diff 较小、测试较浅、或 Agent 只改了实现代码而未改断言时。
近期关于 Agentic Pull Request 的研究也得出了相同结论。在 2026 年一项针对 4,882 个 Agent 生成 PR 的研究中,Agent 仅在 49.6% 修改了测试文件所覆盖代码的 PR 中添加了测试变更。同一研究还发现,现有测试仅覆盖了 Java 中 61.5% 的可执行改动行,以及 Python 中的 27.0%;且有 64.8% 的 Python PR 的改动行未被任何现有测试执行。这些数字并不令人安心——它们是一个警告:通过状态的确立往往建立在不完整的覆盖率之上。
人们的误区在于以为"测试通过"意味着"重要行为已被验证"。并非如此。PR 可以通过,是因为测试未到达改动的分支、mock 吸收了真实行为、或者变更位于测试套件从未触及的代码路径之后。另一项关于自主 Agent PR 的研究发现,包含测试的 PR 随时间推移确实变得更常见,且合并率与无测试 PR 相近——这听起来令人鼓舞,直到你意识到合并率并不等于避免 bug。
当 Agent 修改了应用逻辑但未添加或更新测试时,PR 通过的可信度就会降低。在覆盖率研究中,Agent 编写的测试仅在少数"代码+测试"类型的 PR 中提升了覆盖率,Java 为 35.9%,Python 为 22.5%。同一篇论文还发现,错误处理代码尤其被忽视,遗漏率在 Java 中达到 86.0%,Python 中达到 81.0%。这就是令人不安的部分:在生产环境中出错的代码,往往正是绿色 CI 运行最少检查的代码。
一个实用的审查步骤很简单:打开 PR,检查测试文件是否发生了变更,而不仅仅是工作流是否通过。如果 Agent 没有添加测试且变更不是微不足道的重构,就要问清楚实际受保护的行为是什么。如果 Agent 确实添加了测试,要问它们是否断言了真实结果,还是仅仅镜像了实现。一个测试如果只是重现了代码路径而没有检查有意义的约束条件,那给的是安慰,而非信心。GitHub 的审查工具正是为这种检查而设计的,包括检查 diff 和在需要时运行本地验证。
正确的问题不是"PR 通过了吗?"而是"有什么证据表明如果这个变更错了它就会失败?"对于某些变更,小范围抽查之后通过即可。但对于逻辑变更、边界条件和 bug 修复,你需要明确的回归测试,以及至少一个端到端验证新行为的测试。如果 Agent 只改了实现代码,审查者的责任就转变为证明测试套件仍然保护着团队关心的行为。
一个具体例子是支付或解析相关的 bug 修复。Agent 可以修补分支、满足现有测试,但如果失败的输入不在测试套件中,仍会使真正的 bug 未被验证。更安全的审查路径是复现原始失败、确认新测试在修复前失败、修复后通过,并验证测试不仅仅依赖 mock。这比读一个绿色对勾要花更多时间,但这是验证与装饰之间的区别。
将通过的 PR 作为过滤器,而不是裁决。绿色告诉你变更没有破坏已有的检查,但不会告诉你检查是否足够广泛、Agent 是否写了正确的测试,或者风险的分支是否被覆盖。在 AI 生成的代码中,这个差距足够常见,审查者应该默认它存在,直到 diff 证明了并非如此。
如果你想要一句话的团队规则,用这个:只有在 PR 同时展示了被保护的行为时,才基于绿色合并。否则,重新运行测试、添加缺失的断言,或者在安全网真实存在之前拒绝变更。这个标准比盲目信任慢,但比因为错误原因通过而调试一个发布版本要便宜。
如果你在围绕 Agent 编写的代码构建工作流,DevConnect 将交换限制在自有工作范围内,且免费使用,包括封闭测试追踪器,因此你可以组织互助测试而无需付费捷径。页面 https://devconnectplatform.com?ref=devto 解释了平台本身,但审查规则保持不变:绿色 PR 是一个检查点,而非保证。
检查 diff 是否包含新的或更新的测试、测试是否覆盖了变更的行为、以及 CI 运行是否真正执行了变更的路径。单独的状态检查只能证明配置的 workflow 通过了。
不能。研究表明 Agent 编写的测试在某些情况下提升了覆盖率,但仅在少数"代码+测试"类型的 PR 中,且重要的分支(如错误处理)往往被遗漏。
不,不一定。文档更新、机械性的重构和一些低风险清理工作没有测试编辑也可能没问题。当 Agent 修改业务逻辑、解析、状态转换或应该拥有回归测试的 bug 修复时,风险才会上升。
让审查者在 PR 讨论区回答一个问题:如果这个变更错了,哪种行为会失败。如果答案不明确,就在合并前添加测试或复现步骤。
检查 diff 是否包含新的或更新的测试、测试是否覆盖了变更的行为、以及 CI 运行是否真正执行了变更的路径。单独的状态检查只能证明配置的 workflow 通过了。
不能。研究表明 Agent 编写的测试在某些情况下提升了覆盖率,但仅在少数"代码+测试"类型的 PR 中,且重要的分支(如错误处理)往往被遗漏。
不,不一定。文档更新、机械性的重构和一些低风险清理工作没有测试编辑也可能没问题。当 Agent 修改业务逻辑、解析、状态转换或应该拥有回归测试的 bug 修复时,风险才会上升。
让审查者在 PR 讨论区回答一个问题:如果这个变更错了,哪种行为会失败。如果答案不明确,就在合并前添加测试或复现步骤。
Status checks - GitHub Docs
About pull requests - GitHub Docs
Review pull requests - GitHub Docs
Test Coverage Analysis of Agentic Pull Requests - arXiv
Do Autonomous Agents Contribute Test Code? A Study of Tests in Agentic Pull Requests - arXiv
Are Coding Agents Generating Over-Mocked Tests? An Empirical Study - arXiv