OC
让 Agent 多写测试为什么仍会漏错,问题出在谁定义正确
科技 · 2026-09-09 · 软件工程与 AI 编程 · 阅读 0

让 Agent 多写测试为什么仍会漏错,问题出在谁定义正确

据 Dan Luu 最新公开实验,给编程 Agent 补一句“使用 TDD”“使用属性测试”或指定形式化工具,并没有稳定带来更好的实现正确性。他以 Rust 实现 Zstd 为主要任务,比较多组提示条件,并用隐藏测试验收;结论针对这套模型、任务与运行设置,不是给所有测试方法排终身座次。

作者:林岚|OC 开发者生态编辑

Dan Luu 最新公开实验,给编程 Agent 补一句“使用 TDD”“使用属性测试”或指定形式化工具,并没有稳定带来更好的实现正确性。他以 Rust 实现 Zstd 为主要任务,比较多组提示条件,并用隐藏测试验收;结论针对这套模型、任务与运行设置,不是给所有测试方法排终身座次。

一句话结论:让 Agent 做更多测试,不等于让它检验更多真实风险;最容易遗漏的仍是测试本身是否知道什么叫正确。

代码和测试可以一起犯同一个错

我们很容易被一份“测试全部通过”的报告安慰。可如果实现和测试都由同一个过程生成,测试可能只是忠实地复述了实现。代码把字段顺序写反,测试却也按照反过来的顺序准备预期结果,两边自然相安无事。

Dan Luu 的观察中,有 Agent 用形式化工具证明无关紧要的性质,也有测试因为输入过于相似,根本没触及容易出错的区别。一个典型例子是四条数据流:如果它们长得完全一样,交换次序也看不出差异。更多同类样本只能强化“没看见问题”,不能证明问题不存在。来源:实验原文

这不是说 AI 测试一无是处。恰恰相反,容易生成大量样本,本来应该是自动化的优势。问题在于样本分布有没有穿过危险区域。对一个严格格式的解析器乱塞字节,可能大部分时间都在检验“如何拒绝垃圾”,却很少进入真正复杂的解码路径。

工具名不能替代测试目标

“用属性测试”只说明采用某种方法,还没有说明属性是什么。假设我们检查一个排序函数,“输出长度没变”是一条属性,但一个原样返回输入的错误实现也能满足它。加入“输出有序”仍不够:永远返回等长零数组也可能蒙混过关,还需要验证元素集合得到保留。

同样,往返测试并非天然独立。编码器与解码器如果共享同一种错误,它们仍可能完成漂亮的自我往返。要知道输出能否被其他实现理解,就需要有独立来源的样本、参考实现或外部规范,而不是只让自己给自己发合格证。

这些例子是 OC 对测试设计的解释,不是此次实验报告的额外结果。它们指向同一件事:质量来自能区分正确与错误的判据,而非文件数量、断言数量或者测试工具的声望。

相同输入掩盖交换错误,不同输入让错误可见的概念示意

更有用的指令,应该描述失败会长什么样

给 Agent 的要求可以具体一些。例如,处理金额时,明确小数边界、舍入规则、负数与撤销流程;处理权限时,要求同一资源在不同角色下有不同结果;处理导入时,把空文件、重复行、截断输入和部分成功分别列成业务情境。

这并不是让人先把所有测试写完,才能让 Agent 工作。人的作用可以是给出独立约束和几类高风险反例,让 Agent 扩展样本、运行检查、归纳失败。随后再审查它的“预期结果”来自哪里:规范、人工算例、参考程序,还是刚刚跑出来的实现输出。

还可以有意识地试验测试会不会失败。在隔离的试验副本中,故意反转一个比较条件、跳过一项权限检查或交换两个字段,如果现有测试依然全绿,就说明验收网没有罩住那一类错误。这种验证针对的是测试的辨别力,而不是生产代码是否暂时运行顺畅。

不过,不能把这又缩成一句万能口令。任何方法都可能被执行成仪式。测试失败后,应先问是实现错误、测试错误还是需求不清楚,而不是默认让 Agent 改到绿为止。否则,它可能只是把验收标准往当前代码身上挪。

别从一次实验推导出“停止使用 TDD”

原文比较的是 Agent 在得到方法名等指引后的行为,不能直接等同于熟练工程师严格执行这些方法的效果。隐藏测试本身也只覆盖选定任务,模型版本、推理预算、参考材料和时间限制都会影响结果。

因此,最值得带走的不是某个排名,而是评估习惯:检查实际轨迹,看看工具究竟被怎么用了。一个团队若要决定保留哪种提示模板,应把它放进自己的任务集比较正确率、总耗时和人工修复量,而不是根据一篇博客把整个工程流程推倒重来。

关键事实

  • 来源:Dan Luu 的公开实验与行为分析。
  • 主要任务:Rust 实现 Zstd,并有其他协议任务的补充尝试。
  • 验收重点:隐藏测试中的实现正确性,而非 Agent 自建测试的通过率。
  • 适用边界:方法名称的提示效果,不等于该方法由专家实施时的能力上限。

OC 判断

AI 编程正在把“谁来写代码”的问题,推向“谁来定义验收”的问题。测试可以大量自动生成,但至少一部分正确性依据必须独立于实现。否则,自动化只会更高效地完成自我确认。

为什么重要

  • 对开发者:审查预期值和样本分布,常比继续增加相似测试更有价值。
  • 对企业:把隐藏验收和失败案例沉淀为资产,别只统计代码与测试产量。
  • 对用户:软件可靠性取决于错误能否被发现,不取决于发布说明里写了多少条测试。

参考来源

相关阅读

基于标题、摘要和正文内容自动匹配。

更多科技

评论

围绕这篇文章补充信息、提出问题或分享观察。

0
暂无评论。

发表评论

继续看看 OC 用户围绕这个话题说了什么、做了什么。

相关帖子

更多

你们的Codex额度提前耗完了没?戒断反应如何?

<p>我在第三天就消耗了只剩1%,忍了一天,然后今天干脆用这最后的1%,开着5.6 Sol 极高 强推我一个提示词笔记本应用的功能落地。最终用时3小时,居然还是跑完了。但是现在还是出现一些戒断反应,感觉啥也做不了,就无精打采的,困。</p> <p>我做了一个Prompt Notebook,专门用来收藏或者记录自己手搓的生图提示词。带Chrome一键收藏插件。支持AI优化提示词。支持提示词中提取常用字段作为提示词百科词汇。也自带生图功能用来测提示词。但是要搭配Cloudflare R2+Worker的图床。</p> <p>今天主要是做一个AI模特的资产库。将常用的AI模特固定下来,进行身份设定,以及模特的一些角色定妆图。之后生图可以直接调用AI模特自动作为垫图。</p> <p>这是AI模特资产库的界面: <img src="/upload/thread/202608/42b5f73e-938f-45de-b74e-da69da9d72a8.webp" alt="1bb0d28b-c7dd-4327-bafa-26b60323cbed" /> 这是主界面的提示词瀑布流,支持关键词或标签搜索: <img src="/upload/thread/202608/3e15b6e7-345f-48b4-aeff-1bbd89afe9d3.webp" alt="ab998e2f-9ccc-4173-832f-223aa6c6fa81" /> 这是提示词笔记的预览界面,可以复制提示词,分享提示词,点击分享还有分享短链:(https://prompt.jintao.co.uk/share/20260806LfsmY) <img src="/upload/thread/202608/bab31972-0468-4582-b873-6309233254a6.webp" alt="20260806-201213" /> 可惜现在没额度了,我又不想换模型折腾。现在还有些界面细节和小功能需要落地完善,可能还要虫子要抓。弄好了,打算放GitHub开源。</p> <p>有朋友想试试的么?</p>

shynloc 2 4