为什么AI-Generated Tests Miss Critical Bugs——以及如何在制作前抓住他们

2026年9月6日2 次浏览来源:Dev.to阅读原文

最初发表于tamiz.pro.

大语言模型(LLMs)正在改变开发团队如何生成单元,集成,以及合同测试.

开发者对所期望的行为进行简短的描述,在数秒内,LLM会生成在战术上有效,精密的可信测试代码.

这种速度是革命性的.

但是在地表之下有一个微妙的危险:AI产生的测试并不是真正测试系统——它们测试AI自身的偏见,假设和盲点.

核心问题是,LLMS接受大量现有代码、文件和自然语言的培训。

其产出反映了统计模式,而不是严格的逻辑推理。

当一个LLM产生一个测试时,它基本上是从它以前所看到的——而不是从对正确性的正式说明中推断出来的.

这意味着所生成的测试往往强化了与原始代码所基于的相同假设,创造了一个反馈回路,即隐藏在平地视线上的bug仍然被未被发现.

AI盲点测试的性质 AI在测试中引入的盲点有几层: 统计比亚斯Over逻辑完整性 LLMs 优化为可信而非详尽.

它们产生基于常见规律的"看对了"的测试,但是它们很少探索完整的输入空间或者考虑稀有但关键边缘的情况.

例如,一个 LLM 请求测试一个函数,用于解析 JSON 可能为形状良好的输入和一些明显的失败案例,如空字符串或无效值。

然而,它可能完全忽略了有后置逗号,Unicode逃生序列,或者会撞倒剖析器的深层嵌入结构的JSON.

从培训数据中继承的隐含假设 大多数LLMS的培训数据包括了上百万个代码寄存器,其中许多包含相同的逻辑缺陷或建筑快捷键.

如果在训练数据中某个特定的反模被普遍使用——比如假设一个配置文件永远存在,或者网络请求最终会成功——LLM可能会将这一假设带入所生成的测试中.

这意味着测试对代码的验证与最初产生代码的同一种有缺陷的精神模型.

缺乏意向性理解AI模型无法理解代码背后的意图.

它们认识到各种模式,并产生与这些模式相匹配的反应。

在生成测试时,AI可能会专注于提示中描述的幸福路径而忽略了代码应该坚持的隐含合同.

例如,如果一个函数应该是一能的,但提示没有明确提到一能,那么生成的测试很可能不会检查它。

AI盲点实例 为了了解这些盲点的影响,让我们研究几个具体的情况: 例1:基于时间的种族条件 考虑一个获得锁,进行操作,释放锁的功能.

开发者要求 LLM 生成此函数的测试.

AI可能会产生验证锁在正常条件下获得并释放的测试,但它可能不考虑种族条件——两种线程试图同时获得同一种锁的情形,或者在获取和释放之间出现例外,使锁处于不一致状态.

AI生成的测试套件可能包括:但可能错过:例2:输入卫生与注射攻击 如果开发者要求LLM测试一个SQL查询构建器,AI会生成对有效字段名,表名,和值的测试.

然而,它可能不考虑SQL注入攻击——旨在改变查询结构的恶意输入.

AI的培训数据包括许多不安全查询构建的例子,LLM可能在代码和测试中复制这些模式.

人工智能生成的测试可以校验查询是否为正常输入正确构建 : 不过

分享