从点点点到测 AI:软件测试工程师的认知升级
做 AI 测试,先接受一个基本事实:你测的不再是一个「输入确定、输出确定」的程序,而是一个「输入开放、输出概率分布」的系统。
传统软件的本质是确定性函数 y = f(x):同样的 x 永远得到同样的 y,所以测试只需「断言 y 是否等于预期」。而 AI 模型(尤其大模型驱动的应用)的本质是条件概率生成 p(y|x):给定 x,模型按概率采样出 y,每次结果都可能不同,且不存在唯一「正确」的 y。
这个根本差异,决定了 AI 测试的底层原理——从「结果匹配」转向「质量评估」。下面用五张表把这套原理拆开。
一、AI 测试 vs 传统软件测试:四维对比
先建立整体认知框架,这张表建议直接抄进你的测试用例模板:
| 维度 | 传统软件测试 | AI 测试 |
|---|---|---|
| 输入 | 结构化数据(表单、接口字段) | 非结构化自然语言(一句话、一段对话) |
| 处理 | 固定业务逻辑(if-else、状态机) | 基于概率的推理生成(模型推断) |
| 输出 | 确定结果(成功 / 失败、固定文案) | 非确定、多样化输出(同问不同答) |
| 验证 | 结果匹配预期(断言 assertEquals) | 多维度主观评估(打分、人工评审) |
关键在「输出」和「验证」两格:登录按钮点完要么跳转要么报错,是确定的;但大模型对同一句输入,每次采样都可能给出不同表述。所以测试策略必须从「写死预期」改为「定义评估维度 + 抽样验收」。
二、思维三大转变
原理落地到思维方式,有三个不可逆的转变:
1. 确定性 → 概率性:不再追求「一次必对」,而是看「多次调用的稳定分布」。测意图识别接口,同一问题连问 10 次,9 次识别正确即达标,但要记录那 1 次错在哪。
2. 功能正确 → 质量评估:按钮有没有反应是功能;机器人答得准不准、啰不啰嗦、有没有跑题,是质量。评估维度见第四节。
3. 静态验证 → 动态变化:传统系统发版后逻辑不变;模型会随数据、Prompt、版本漂移,因此要设计「回归基线」每次迭代重跑。
举个原理层面的例子:「查订单」意图,传统测法只验「输入『查订单』→ 返回订单列表」;AI 测法要覆盖「订单到哪了 / 帮我看下物流 / 我的东西发货没」等语义等价但措辞不同的说法,并承认不同正确表述都算通过——只要语义命中意图即可。
三、五大挑战 = 你的用例清单
AI 测试区别于传统测试的挑战,本质都来自上面的原理差异。笔记把它列成五条,我直接转成可执行的测试动作:
• 非确定性输出:用「多次采样 + 一致性检查」替代单次断言(见第五节代码)。
• 主观评价标准:先拉齐评分 rubric(准确性、流畅度、相关性各占几分),再人工或 AI 评审,避免「我觉得不行」式的模糊结论。
• 幻觉问题:专门设计「知识边界」用例,喂模型训练数据之外的冷门事实,看它是否一本正经编造(第三节有分类)。
• 安全与伦理风险:构造诱导性、越狱类 Prompt,验证是否拒答或触发安全护栏。
• 持续变化与漂移:建立基线用例集,每次模型或 Prompt 变更后自动回归。
四、补概念:AI / ML / DL / LLM
写方案、对需求前先把术语对齐,否则容易和算法同学鸡同鸭讲:
| 概念 | 含义 |
|---|---|
| AI 人工智能 | 让机器模拟人类智能(听 / 看 / 说 / 写)的技术总称 |
| ML 机器学习 | 让机器从数据中学习规律、做出预测 |
| DL 深度学习 | 用深度神经网络处理图像、文本等复杂数据 |
| LLM 大语言模型 | 具备语言理解、逻辑推理和生成人类语言能力的大模型 |
五、大模型质量四维评价模型(核心收口)
原理的最后一步,是把「质量评估」落到可度量的维度。笔记给了一个分层模型:三大能力对应四个质量维度,四个维度都达标,才算质量好的大模型。
| 能力层 | 评价维度 | 测试视角怎么验 |
|---|---|---|
| 基础能力 | 维度1 准确性 | 事实、计算、代码是否正确,有无编造 |
| 基础能力 | 维度2 一致性 | 同义问法多次回答是否自洽、不矛盾 |
| 智能能力 | 维度3 有用性 | 是否真正解决用户问题、不答非所问 |
| 安全与伦理 | 维度4 无害性 | 是否拒答违规请求、有无偏见与风险输出 |
「一致性」这一维最容易被忽略,却最好工程化。下面是一段可直接落地的抽样检查思路(核心是多次采样后比对两两相似度,比例低于阈值即说明回答「飘」了):
def consistency_check(ask_fn, question, n=10, sim_threshold=0.7, pass_ratio=0.8):
answers = [ask_fn(question) for _ in range(n)]
pairs = n * (n - 1) / 2
consistent = sum(
1 for i in range(n) for j in range(i + 1, n)
if similarity(answers[i], answers[j]) >= sim_threshold
)
return (consistent / pairs) >= pass_ratio # 达标返回 True跑出来 ratio 低于 0.8,就该锁 Prompt 或加示例,把输出分布收拢。
小结
传统测试和 AI 测试不是两套人,是同一批人换了把尺子:从「断言对错」到「评估质量」,前提是先接受「模型输出是概率分布」这个事实。把上面的四维对比表和五大挑战贴在工位上,下次接到「测一下这个机器人」的需求,你就知道用例从哪写起。下一篇拆开讲幻觉分类和提示词工程——那是你真正上手写测试用例时的硬通货。
好了,是不是很简单,今天的分享就到此结束,咱们下回见;
如果觉得文章对你有帮助,记得点.赞.转.发.收.藏喔!
夜雨聆风