写了十一年企业级测试自动化,整套工作都压在一个安静的假设上:测试通过就是证据。绿了就是安全,绿了就发版。现在这个假设正在松动,因为测试本身越来越多地由AI生产。

打开网易新闻 查看精彩图片

具体有三条路径:AI生成测试断言(决定通过还是失败的那句判断)、AI在页面变化时自动修复失效的UI定位器(自愈框架)、AI裁定一次运行到底是真失败还是"只是不稳定"(用大模型当裁判)。这三条路径都可能递给你一个并不成立的绿色结果。

  • AI写的断言可能太弱,抓不住真正的bug——它检查了类型却没检查值,输出错了测试照样通过。
  • 自愈定位器可能"修"到了错误的元素上,一路畅通,实际上什么都没测。
  • 大模型裁判可能把一次真实失败当成偶发抖动放过去。

三种情况下,仪表盘都是绿的,安全网却在悄悄破洞。为了不再空谈,他做了一个小型开放研究原型,叫 TrustLab。

核心概念:假信心缺口

定义很直白:假信心缺口 = 测试看起来通过的比例 − 实际可靠的比例。要诚实地量出这个差值,得先有"可靠"的标准答案。他用的是变异测试:引擎往程序里注入真实故障(把加号翻成减号、把小于翻成小于等于之类),只有真正抓住这些故障的判定才算可靠。没有主观意见,没有自报数据——测试要么杀死变异体,要么没有。

他在这三种模式上跑了一组小型被测程序,用15个随机种子重复,并做了留出评估。

跑出来的结果

  • AI生成的断言:缺口约62%。这是最吓人的一项,大量"通过"来自根本抓不住注入故障的断言。
  • 大模型当裁判:缺口约41%
  • AI自愈:缺口约11%,数字低一些,但尾部藏着无声的错误修复——这是最糟的一类,因为看起来毫无异常。

一个他没预料到的细节:AI生成断言的危险程度跟着代码结构走。分支密集的逻辑危险得多,评分函数缺口达99.7%,三角形分类器93.6%;而简单的BMI分档只有5.2%。代码分支越多,弱断言装作绿色的空间就越大。

能不能提前判断哪个绿可信

量出问题只是一半。另一半是:只用运行时真正能观察到的信号(而不是现实中拿不到的标准答案),能不能预测哪些绿色判定值得信?他在可观察特征上训练了一个小型、经过校准的信任分,拿来和今天所有人都在用的朴素策略对比——"绿了就信"。

如果保留最可信的70%绿色判定、把最不可信的30%搁到一边,无声假通过率明显下降:自愈从11%降到0.5%,大模型裁判从40%降到19%。朴素的"见绿就信"基线完全分不开可靠与不可靠(按构造ROC-AUC就是0.50),信任分则能到ROC-AUC约0.95,并报告了校准误差,让分数本身有意义。效应量为"大"(Vargha–Delaney A12 在0.76到0.95之间),Mann–Whitney p < 0.001。

哪些是实的,哪些是模型

他把边界说得很清楚:断言那部分结果是真实的,一个真正的AST变异引擎注入故障,运行时覆盖率决定判定是否可靠。自愈和裁判两部分,是基于已记录的工具与大模型行为做的经验建模,放在适配器接口后面——也就是说,可以把真实的Playwright自愈器或真实的大模型裁判接进同一个接缝,不改动度量逻辑重跑同样的实验。这本身就是仓库里挂着的开放议题之一。

对用AI生成断言、修复定位器、裁定抖动的流水线来说,绿色不再天然可信。两个可落地的结论:弱断言是最大的风险,而且恰恰在代码最复杂的地方最糟,AI生成的断言应当按分支复杂度来决定审查力度;一个信任分胜过原始的绿红二值,哪怕只是基于可观察信号的简单校准指标,也能告诉你哪些通过需要复查,把二值变成一条有优先级的队列。

项目全部开放可复现:纯Python标准库核心、19个通过的测试、基准数据集和实验输出都在 github.com/rollamadugu/trustlab。作者是Krishnasai Rollamadugu,测试自动化架构师,做这行11年以上,研究方向是AI驱动软件测试中的信任与度量。