大模型写代码以后,测试到底要测什么?

举报
霍格沃兹测试学社 发表于 2026/10/05 16:11:00 2026/10/05
【摘要】 本文探讨AI生成代码的测评新范式:不再仅关注“能否运行”,更需验证功能准确性、测试可信度、改动合理性及工程规范符合性。测试工程师需从需求理解、测试质量、影响范围和项目约束四维度,评估AI代码是否真正达标。

摘要:
如果你刚开始接触大模型测评,AI 生成代码其实是一个很适合入门的场景。过去我们习惯看“代码能不能跑、测试能不能过”,但到了 Coding Agent 阶段,这两个标准已经不够了。真正需要验证的,还包括功能是否符合真实需求、AI 写出的测试是否可信、代码有没有超范围修改,以及最终产物是否符合项目本身的工程规范。


现在让 AI 写代码,已经不是什么新鲜事了。

以前可能只是让 ChatGPT 帮忙补一个函数、写段 SQL。

现在很多 Coding Agent 已经可以直接读整个代码库,然后自己:

修改文件、补测试、执行命令、发现失败、继续修复,最后告诉你:

Done。

对于测试工程师来说,一个很自然的问题也随之出现:

AI 都已经把测试跑完了,我们还要测什么?

比如一段 AI 生成的代码,最终显示:

20 passed

没有报错。

接口也能正常返回。

看起来是不是就可以合并了?

还真不一定。

最近 OpenAI 在评估 Coding Agent 时,已经不只关注“代码能不能解决问题”,而是开始关注一个更加工程化的标准:

这份代码到底能不能真正合进项目。

其中会涉及测试质量、改动范围、代码风格以及是否遵守现有代码库规范等问题。

这个变化对测试工程师其实非常值得关注。

因为以后面对 AI 写出来的代码,我们真正需要判断的,可能已经不只是:

有没有 Bug?

而是:

这到底是不是一份合格的软件工程产物?

image.png


第一件事:功能到底有没有做对?

这是最基础的一层。

比如需求是:

用户输入优惠券以后,重新计算订单金额。

AI 很快生成:

def apply_coupon(order, coupon):
    if coupon.valid:
        order.total *= 0.8

    return order

正常优惠券跑一下。

没报错。

金额也确实打了八折。

如果测试到这里就结束,这段代码当然看起来没什么问题。

但测试工程师真正该继续问的是:

优惠券过期怎么办?

同一张券能不能重复使用?

0 元订单怎么办?

优惠金额超过订单金额怎么办?

部分商品不参加活动怎么办?

订单已经取消以后还能不能使用优惠券?

这些问题和传统软件测试其实没有本质区别。

AI 写代码,并不会让边界条件自动消失。

甚至因为 AI 写代码速度越来越快,这件事反而更加重要。

AI 很擅长完成需求描述里明确告诉它的东西。

但需求文档里没有写清楚的那些角落,它未必真的理解了业务默认规则。

所以测 AI 代码的第一步仍然是:

不要只验证它有没有实现功能,还要验证它有没有真正理解需求。


第二件事:AI写出来的测试,也得被测试

这一点很容易被忽略。

现在的 Coding Agent 往往不是只写业务代码。

它甚至可以自己生成测试,然后自己运行。

于是整个过程变成:

AI写代码
↓
AI写测试
↓
AI运行测试
↓
全部通过

看起来非常舒服。

但这里隐藏着一个问题:

代码和考试题,可能都是同一个“人”出的。

假设真实需求是:

用户连续输错密码 5 次以后锁定账户。

结果 AI 理解错了,代码写成:

if failed_count >= 6:
    lock_account()

然后它又顺手生成测试:

def test_lock_after_failed_attempts():
    for _ in range(6):
        login_with_wrong_password()

    assert account.is_locked

最后运行:

1 passed

整个流程一片绿色。

但业务逻辑还是错了。

这就是 AI Coding 里一个很典型的问题:

AI 对需求的错误理解,有可能同时进入业务代码和测试代码。

于是你会看到一种很有迷惑性的结果:

代码通过了测试,但代码和测试一起错了。

image.png

所以以后看到 AI 自动补出来的测试,至少要继续检查三个问题。

1. 测试有没有真正覆盖需求

不要只看:

Coverage 95%

而应该看:

关键业务规则到底有没有断言。

覆盖率高,不代表需求覆盖完整。


2. 测试是在验证需求,还是在验证AI自己的实现

AI 新写了:

calculate_price_v2()

然后测试里也只是验证:

calculate_price_v2()

这种测试有时候只能证明:

这个函数按照自己设计的逻辑运行正常。

但不能证明:

这个逻辑符合真实业务要求。

两件事差别很大。


3. AI有没有为了让测试通过而修改测试

这也是 Coding Agent 场景中特别值得留意的问题。

正确流程应该是:

测试失败
↓
发现代码问题
↓
修改代码
↓
重新测试

但如果 Agent 自己拥有修改测试文件的权限,就可能出现另一条路径:

测试失败
↓
认为测试条件不合理
↓
修改测试
↓
全部通过

所以未来测试 AI 写代码,一个很重要的能力可能变成:

不仅 Review 业务代码,还要 Review AI 修改过的测试。


第三件事:它有没有顺手改了太多东西?

假设你只告诉 AI:

修复一下登录接口偶发 500 的问题。

结果它最后提交了:

auth.py
user.py
database.py
config.py
middleware.py
requirements.txt
test_auth.py

一共改了 7 个文件。

最终 Bug 解决了。

原来的自动化测试也全部通过。

是不是就没问题?

这个时候,测试工程师最好多问一句:

为什么修一个登录问题,需要动这么多地方?

这也是现在 Coding Agent 评测里越来越重要的一个概念:

改动范围是否合理。

AI 和人写代码有一个很有意思的区别。

人接到一个 Bug,很多时候会想:

尽量少动,先把问题修掉。

Agent 阅读完整个项目以后,却可能觉得:

既然都改了,那我顺手帮你整理一下。

于是它可能:

顺手重构函数。

顺手换变量名。

顺手升级一个依赖。

顺手删掉它认为没用的代码。

顺手修改另外一个模块。

顺手格式化整个文件。

每一项单独看可能都没有错。

但组合起来以后,事情就变了。

原本只是一个小 Bug 修复。

最后却变成了一次小型重构。

对于测试来说,这意味着:

回归测试范围也跟着变大了。

所以以后看 AI 提交代码,可以养成一个特别简单的习惯:

先问:

需求原本要求改什么?

再问:

AI最后实际改了什么?

例如:

原始需求:
修复优惠券重复使用

实际改动:
coupon.py
order.py
payment.py
user.py
database.py

这种时候不一定意味着 AI 做错了。

但至少意味着:

不能再按照一个“小改动”的回归范围去测。


第四件事:代码能跑,不代表适合这个项目

这一点对刚开始接触 AI Coding 的同学尤其重要。

同样一段代码:

放在个人 Demo 里完全没问题。

放到公司项目里,可能就是不合格。

例如 AI 为了避免程序报错,写了一句:

except Exception:
    return None

功能跑起来了。

测试甚至也通过了。

但真实项目可能明确要求:

异常必须记录日志。

必须保留错误码。

必须区分异常类型。

严重异常必须触发监控。

不能静默吞掉异常。

再比如 AI 为了完成一个功能,自己新增:

new-package==3.2.1

本地运行完全正常。

但公司项目可能规定:

新增第三方依赖必须经过安全扫描和审批。

再比如:

SELECT * FROM users

查询结果是对的。

小数据量下性能也没问题。

但项目里的数据库开发规范可能明确禁止:

SELECT *

所以到了真实软件工程环境里,“正确”从来不只有一种标准。

代码不仅要:

能运行。

还得:

符合这个项目自己的规则。

包括:

  • 日志规范
  • 异常处理规范
  • 数据库规范
  • 安全规范
  • 依赖管理
  • 命名规则
  • 代码风格
  • 项目已有架构约束

这也是为什么现在越来越多 Coding Agent 会允许项目提前告诉 AI:

这个代码库应该怎么工作。

因为模型会写代码,并不代表它天然知道:

你们公司什么代码才算合格。


AI写的代码到底怎么测?先记住这4个问题

如果你刚开始接触大模型测评,其实完全没必要一上来就研究复杂 Benchmark。

先拿到一段 AI 生成代码以后,问下面四个问题:

① 功能真的做对了吗?

看需求、边界条件和异常场景。

② AI写的测试真的可信吗?

看断言、核心业务规则,以及测试有没有和代码一起理解错需求。

③ AI有没有超范围修改?

看修改文件、修改行数以及对上下游模块的影响。

④ 这段代码符合项目规范吗?

看日志、异常、安全、依赖以及代码库本身的工程约束。

image.png

可以把整套思路简单理解成:

AI生成代码
↓
功能正确性
↓
测试质量
↓
改动范围
↓
工程规范
↓
是否允许合并?

对于 AI Coding 场景来说,大模型测评的核心已经不只是判断“代码能不能跑”,而是判断“这份代码是不是达到了真实项目的质量标准”。


为什么以后“测试全过”也不能直接当最终结论?

这里还有一个特别值得测试工程师思考的问题。

我们经常觉得:

自动化测试是客观的。

但实际上它有一个前提:

测试标准本身必须正确。

如果测试用例就理解错了需求,那么:

100%通过

同样没有意义。

OpenAI 在研究软件工程类 Coding Benchmark 时,也公开讨论过类似问题。
image.png

一些 Benchmark 中存在测试条件不合理、任务描述有歧义,或者测试实际上限制了某一种具体实现方式的问题。

于是就可能出现:

代码其实解决了问题,但因为没有按照测试预想的方式实现,被判失败。

反过来同样成立:

如果测试标准本身有漏洞,一份有问题的代码也可能顺利通过。

这件事放到 AI Coding 上会更加明显。

因为未来越来越可能出现:

AI写代码
+
AI写测试
+
AI修Bug
+
AI继续运行测试
+
AI继续提交

整个流程越来越自动。

如果最开始的验收标准就是错的:

系统甚至可能跑得越来越顺。

但方向越来越偏。


测试工程师以后可能需要定义:什么叫“写完”

以前开发跟测试说:

写完了,可以测了。

以后越来越多时候,可能会变成 Coding Agent 告诉你:

Done。

这个时候测试工程师真正需要确认的是:

Done 的标准到底是什么?

例如:

功能正确
+
核心边界通过
+
测试本身有效
+
没有无关修改
+
符合项目规范
+
没有引入新的明显风险

这些条件全部满足以后:

我们才能真正接近:

可以合并。

这其实并不是一个完全陌生的新工作。

过去软件测试一直就在做这件事:

把模糊的“做完了”,变成可以验证的质量标准。

只不过以前这些标准主要给人看。

以后,它们可能还要直接告诉 AI。


还有几个刚接触大模型测评的人经常会问的问题

AI自己跑过测试,还需要人工检查吗?

需要。

因为 AI 可能同时误解需求、生成错误代码,再生成与错误实现一致的测试,最后得到“全部通过”。

所以测试结果可以作为证据,但不能成为唯一判断依据。


AI生成代码以后,最先应该测什么?

第一优先级仍然是业务功能和关键边界。

确认需求方向没错以后,再检查 AI 生成测试的质量、代码修改范围以及是否符合项目规范。


AI写代码属于大模型测评吗?

属于大模型能力评测的一个重要应用场景。

只是评测对象从传统的“回答质量”,进一步扩展到了代码正确性、测试质量、工程规范以及真实软件任务完成能力。


测试工程师需要会训练大模型才能做这种测试吗?

不需要。

很多 AI Coding 测试能力,本质上仍然建立在测试工程师熟悉的东西上:

需求分析、测试设计、自动化测试、代码 Review、回归测试和质量门禁。

需要补的是:

如何把这些能力重新应用到 AI 生成的软件产物上。


最后

面对 AI 写出来的代码,很容易出现两个极端。

一种是:

AI生成代码不靠谱,所以全部重新检查。

另一种是:

AI自己都把测试跑过了,那应该没问题。

其实都没必要。

更实际的方法,是把 Coding Agent 当成一个写代码特别快的新成员。

它提交代码以后,我们还是按照工程质量标准去验:

功能有没有真正做对。

测试本身是不是可信。

有没有修改不该修改的东西。

最后是否符合整个项目的开发规范。

所以 AI 写代码以后,测试对象并没有突然变成一个完全陌生的领域。

真正变化的是:

以前测试更多在判断:

功能有没有 Bug。

以后还需要继续判断:

AI交出来的这份代码,到底是不是一份可以进入真实项目的工程代码。

代码能跑,只是起点。

测试全过,也不是终点。

真正需要回答的问题是:

这段代码,我们到底敢不敢让它进项目?

本文部分内容参考了霍格沃兹测试开发学社整理的相关技术资料,主要涉及软件测试、自动化测试、测试开发及 AI 测试等内容,侧重测试实践、工具应用与工程经验整理。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。