AI 代码审查召回率实测:20 个骗过单元测试的变异体只抓到 13 个

一篇个人工程实验把 20 个通过单元测试的人工缺陷交给 Claude Sonnet 盲审,AI 抓出 13 个,召回率 65%。结果说明 AI 更擅长发现锁顺序、资源释放这类“有形状”的问题,对“少写一步防御”的遗漏识别有限。

一句话看懂:一篇个人工程实验把 20 个通过单元测试的人工缺陷交给 Claude Sonnet 盲审,AI 抓出 13 个,召回率 65%。结果说明 AI 更擅长发现锁顺序、资源释放这类“有形状”的问题,对“少写一步防御”的遗漏识别有限。

事件核心:发生了什么

作者在 2026 年 10 月发布实验,对象是约 1919 行 Java 的 Spring AI 练习工程,审查 prompt 固定为 v1,模型固定为 claude-sonnet。作者注入 23 个变异体后先用单元测试筛掉 3 个,剩下 20 个用固定种子打乱、隐藏映射表后盲测,命中 13 个。分类看,并发类 4/4 全中,安全类 3/4,空值、异常、资源类各 2/4。

盲测约消耗 165 万 token,单次 5 万至 15.4 万 token,比上一轮基线审查贵近三倍。作者也明确,这是单项目、单人判定、单次运行,65% 只代表对这类注入缺陷的敏感度,不等于真实漏检率。

为什么重要

AI 代码审查的讨论长期停留在“报得准不准”,这次补上了“会不会漏”的量化角度。7 个漏检里 5 个是删掉或替换一个防御步骤,代码本身完全合法,没有明显异常形状;命中的则多是锁位置、volatile、set 与 add 的先后、新增日志行、范围过宽的 catch。这说明当前模型审的是“写出来的代码”,对“没写出来的代码”判断力有限。

这对把 AI 审查当质量闸门的团队是个提醒:模型可以补并发、资源、异常路径这些测试难覆盖的盲区,但无法替代对判空、finally、清理回调、异常分支的补充检查。换句话说,AI 更适合做测试的补充,而不是测试的替代。

对用户/开发者/创作者的影响

开发者接入 AI 审查时,应优先提供 diff 而不是整个文件,删除型缺陷只有在 diff 里才表现为“少了什么”。同时只采纳能落到行号、触发条件和后果的发现,说不清的当噪音处理。安全类命中率 75%,但日志里多拼一个签名参数这类“往已有行加内容”的改动容易被漏掉。

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

对团队而言,合理分工是先让测试筛一遍,AI 只处理测试盲区。并发类 4/4 的结果提示,AI 审查在测试成本高的路径上价值更明显;但空值、异常、资源释放仍需人工或静态分析兜底。

值得关注的后续

一是作者后续能否补上温度参数、重复运行和一致性数据,让召回率具备方差参考;二是换用真实代码库和人工评审记录做 ground truth,验证 65% 在真实缺陷分布下是否成立;三是 diff 输入方式是否能把删除型漏检明显拉低。

来源:juejin

celebrityanime
celebrityanime
文章: 31791

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注