“写完代码还要写测试?能不能让 AI 顺手把活也干了?”这大概是过去一年程序员群里最高频的吐槽。为了给出真实答案,我们拉来两个项目:一个是上线三年的 Spring Boot 订单系统,代码 8 万行;另一个是刚起步的 C# 金融计算库,代码 5 千行。我们分别用 GitHub Copilot、Diffblue Cover 以及 Lynx 自带的测试生成功能跑了一遍,算了一笔人力账。

先看老系统。传统做法下,四位资深工程师补单元测试,两周写了 2100 条用例,行覆盖率达到 71%,但分支覆盖率只有 52%,边界异常场景大量缺失。随后我们打开 Diffblue Cover,让 AI 在同样的代码上跑通宵,第二天拿到 4300 条用例,行覆盖率 89%,分支覆盖率 78%,直接把漏网的分支补了大半。最重要的是,AI 生成的用例里包含大量“空订单”“负金额”“并发改价”这类人类容易忽视的异常场景,省掉了大量脑力风暴时间。

再看新系统。小团队原本计划用三个人日手写 300 条用例,结果用 Lynx,一杯咖啡的功夫就生成了 270 条,直接可用 230 条,剩余 40 条因业务规则特殊需要微调。实测跑下来,代码覆盖率从 0 飙到 95%,与人工方案持平,但时间从 3 人日压缩到 0.2 人日,几乎把成本打了一折。

是不是 AI 就此封神?我们把测试报告拿给测试经理老周,他一眼挑出两个误报:AI 把“永远不会出现的日期格式”当成边界值,还把一条已废弃的接口仍写进断言。换句话说,AI 的“准确率”在语法层面接近 100%,在语义层面只能算 80% 左右。尤其在复杂依赖、多线程环境下,AI 常常把 Mock 对象配错,导致测试通过但生产环境翻车。因此,业内普遍做法是“AI 负责粗筛,人类负责精修”,就像用洗衣机先洗掉 80% 的灰,再手搓领口袖口。

Gartner 在报告中给出的数字也印证了这点:AI 能把单元测试效率平均提高 80%,覆盖率提升 20~30%,但“断言正确性”仍需人工 Review。换句话说,AI 最擅长的是把“不写测试”变成“写点测试”,而不是“写完美测试”。

最终我们把两套方案同时上线跑 CI,发现 AI 生成用例在回归阶段表现亮眼:代码一改,AI 能在 30 秒内增量补测,而人类往往需要半天重新梳理逻辑。老周感叹:“AI 不是替代,而是让我把精力从‘写 100 条平凡测试’变成‘盯紧 10 条核心业务路径’。” 测试工作的金字塔没有倒塌,只是 AI 把塔基垫高了,让人类可以站在更高的地方去盯塔尖。

所以,如果你问 AI 生成的单元测试覆盖率能到多少?答案是 90% 以上;准确率能到多少?80% 起步,人工兜底后逼近 100%。省下来的时间,足够你再写一段真正有趣的代码——或者,早点下班。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐