“测试做完了吗?”这个问题常被压缩成几个数字:用例执行率、需求覆盖率、未关闭缺陷数。数字能说明计划执行到了哪一步,却不能单独回答另一个更重要的问题:我们掌握的质量证据,足以支持发布决定吗?

Stephen P.(The Stoic Tester)在 2026 年 10 月 19 日发表于 LinkedIn 的文章《How Much Testing Is Enough? The Stoic Case for Knowing When to Stop》,围绕风险、证据和判断展开。以下先整理原文观点,再把停止条件、统计示例和团队落地流程作为实践延伸说明。

“测试完成”不等于“质量足够”

测试做到什么程度才算完成,行业里没有一个适用于所有项目的答案。常见标准包括执行完 100% 的计划用例、覆盖所有需求、修完已知缺陷,或者一直测到交付期限。每一种说法都能描述一部分工作,却不能独立证明系统已经达到可接受的质量水平。

实际项目里常见两种相反的情况:交付日期临近,测试时间被挤压;或者回归包逐年变大,跑完一轮本身就像一个项目。原文认为,两者都未必代表好的测试。前者可能把重要验证压掉,后者则可能让团队把时间花在重复、低价值的检查上。

节制是判断,不是削减

作者借用了斯多葛哲学的“节制”(Temperance)。节制与智慧、勇气、正义并列,是斯多葛哲学的四大美德之一。放到软件测试里,它指的是有纪律地按比例分配精力,依据风险和证据作判断,而不是因为惯例、恐惧或外部压力机械地增加或减少测试。

作者引用马可·奥勒留《沉思录》中的一句话:“Do few things, if thou wouldst have tranquillity.”他把它理解为专注必要之事,而非把测试削到最少。

执行 5,000 条用例,不一定比执行 500 条甚至 1 条更能保障质量。关键要看测了什么、针对哪些风险,以及结果让团队学到了什么。反过来,用例少也不自动代表高效——如果支付、权限或数据完整性等高影响风险没有证据,测试再快也不能替代缺失的保障。

**实践延伸:**测试效率和保障有效性是两回事。效率关注执行时间与维护成本;保障有效性关注测试能否发现重要问题、减少关键不确定性,并帮助团队作出更好的决定。

覆盖率说明看过哪里,不说明看得够不够

仪表盘显示 100% 执行、全部通过,只能说明团队执行完了计划中的测试。若测试计划漏掉重要集成、误解需求,或没有考虑高影响场景,全部通过也不能证明系统安全或质量良好。正如作者所说:

Coverage tells us where we’ve looked.

谈覆盖率之前,团队需要先说清楚统计的对象:

覆盖类型能说明什么单靠它不能证明什么
需求覆盖哪些需求关联了测试需求是否理解正确、验证是否足够深入
代码覆盖哪些代码在运行时被执行断言是否有效、业务结果是否正确
业务流程覆盖哪些用户或业务路径被检查异常路径和高影响变体是否覆盖充分
风险覆盖哪些已识别风险有对应验证是否还存在未识别的风险

例如,支付流程覆盖了成功、失败和退款,并不自动代表并发请求、重复扣款、网络超时、事务回滚和幂等性都经过验证。覆盖率是有用的信号,但必须结合覆盖对象、验证深度和风险来解读。

回归测试既要有准入,也要有退役

每次发现缺陷就添一条用例,每次发布新功能就扩充回归包,过时或重复的检查却很少被移除,测试套件便会持续膨胀。执行成本上升后,团队可能赶不完、开始走捷径,业务方也更容易把测试视为交付瓶颈。

低价值用例可能重复验证相同场景,反复检查多年未变的低风险行为,却挤占了复杂新集成的验证时间。不过,“这个功能一直很稳定”本身不是删除用例的充分理由;某些关键检查无论过去通过多少次,都需要保留。

**实践延伸:**可以给回归测试明确的生命周期,而不是只规定新增规则:

用例类型建议处理方式
关键业务与高风险检查长期保留,优先执行,并定期确认仍然有效
与近期变更相关的检查按变更影响选择执行,必要时加入完整回归
重复或低价值检查找到已有等效证据后,考虑合并、降频或移除
过时、失效或已无对应功能的检查修复、替换或退役,并记录原因

退役测试需要证据:例如功能已经删除、风险已经改变,或另一个更可靠的检查已覆盖同一目标。不能只因为“多年没报过问题”就移除关键验证。

发布建议前,回答五个问题

作者结合自己在英国皇家空军(RAF)飞机工程领域的经历,强调保障力度应与潜在故障的后果相匹配。低风险内部应用和金融交易平台、受监管的 AI 决策系统、安全关键软件,不可能共享同一条覆盖率门槛。

要回答的问题需要说明的内容
我们理解风险了吗?除了需求,还要说明可能出什么问题、影响谁,以及业务后果有多严重。
最重要的部分测了吗?关键路径、重要集成、安全性、数据完整性,以及失败后果最大的场景。
收集了什么证据?不只报告通过数量,还要解释结果能支持哪些质量判断。
哪些内容没有测试?让干系人知道未覆盖范围、假设和不确定性。
继续测试会改变决定吗?如果追加测试可能发现重大风险,就有理由继续;如果不太可能提供新的决策信息,就说明停止依据。

这五个问题把停止判断从“执行了多少”转向“现有证据能支持什么”。作者也提醒,追加测试可能出现收益递减,但拐点取决于系统、风险和现有证据的质量,不存在统一百分比。

停止测试,不代表批准发布

**实践延伸:**停止测试和批准发布是两个不同的决定。团队可能认为再投入相同资源已很难得到新的有效证据,但剩余风险仍不在组织可接受范围内;也可能因为时间到了被迫停止,却没有足够证据判断风险。

当前证据剩余风险建议的下一步
充分可接受提交发布建议,并说明证据范围
充分不可接受暂缓发布、降低风险,或由有权限的负责人明确接受风险
不足尚不清楚优先补充能改变判断的关键证据
因时间或资源被迫中止仍有未验证项如实披露测试中止原因、缺口和责任人,不能把“停止”写成“质量已证明”

测试人员负责说明风险、证据和不确定性,并给出专业建议;发布负责人或组织的治理机制负责依据风险承受能力作出发布决定。测试结果不能替代这项责任。

继续测试是否值得,看它能提供什么新信息

**实践延伸:**可以用一个概念模型检查追加测试的价值:

追加测试的预期价值 = 发现重要新信息的可能性 × 这些信息改善决定的价值 − 追加测试的成本

这里的成本不只有执行时间,也包括维护人力和延迟交付的代价。这个模型不是原文提供的公式,也不要求团队把每个参数算成精确数字;它提醒我们问:这轮测试可能改变什么判断?如果答案是“可能发现高后果风险”,即使发现概率不高也值得继续。如果它只会重复已有证据,边际价值可能很低。

AI 让“测试足够”更难证明

生成式 AI 的输出会随提示、上下文和运行变化。同一个输入可能得到不同答案;读起来合理的回答也可能错误、不完整或误导。团队无法穷举所有输入、输出和组合,单纯增加测试数量也解决不了这个问题。

原文提出几项需要关注的做法:选择有代表性的评估数据、覆盖高风险场景、重复评估,并理解结果中的统计不确定性。100 次评估都成功可以提供有用证据,但够不够仍取决于样本、输出变化程度和错误后果。

**实践延伸:**可以用“零失败的三法则”(Rule of Three)说明样本量的边界。若 n 次相互独立、分布相同的评估均未发现失败,失败率的单侧 95% 置信上界可粗略估为 3/n:

零失败的评估次数失败率单侧 95% 上界近似值
100约 3%
300约 1%
1,000约 0.3%
3,000约 0.1%

因此,100 次成功不能证明真实失败率为零。这个近似还依赖几个条件:样本相互独立且来自同一分布,评估方法能可靠识别失败。若样本彼此相关、数据集不能代表真实使用、评估器本身会漏判,或线上输入分布发生变化,这个上界就不能直接代表实际风险。

高风险 AI 应用需要更充分的评估、独立保障和上线后监控;低风险应用可以采用较轻的方案。无论哪种场景,都应把离线评估与真实使用后的变化分开看。

把风险、证据与停止决定连起来

**实践延伸:**风险—证据映射表可以帮助团队避免只看总覆盖率。下面是示例,状态不代表任何真实项目的评估结果:

风险场景潜在影响需要的证据示例状态
支付重复扣款高幂等、并发与故障恢复验证待验证
用户权限越权高权限矩阵、负向测试和安全验证已验证
普通页面样式偏差低关键设备上的视觉回归抽样已验证
AI 回答缺少依据依使用场景而定事实性评估、来源核验和重复评估部分验证

一个可复查的停止流程可以这样安排:先识别重要风险与不可妥协的发布门槛,再选择能提供相应证据的测试;执行后检查结果质量、未覆盖假设和剩余不确定性;随后评估追加测试是否可能改变建议,最后把发布建议和剩余风险交给有权限的负责人。

记录中至少应留下测试范围、关键风险、验证结果、未测内容、剩余风险、追加测试的预期价值、发布建议和责任人。这样,测试停止点有据可查,后续的人也能看懂团队当时为何作出这个决定。

质量 Loop:让停止条件跟着风险变化

停止条件不是项目启动时写一次就永远不变。上线后的缺陷、用户反馈、业务变化和新的集成都会改变风险,也会改变旧证据的价值。

可以把这个过程放进质量 Loop:记录本轮测试发现与漏测问题,补充或调整验证;整理风险、证据和决策结论,作为下一轮的上下文;再根据产品变化、提示词、数据、模型或 Agent 工具的变化重新评估。不同模型和 Agent 即使执行相同的方法,也可能表现不同,因此要验证当前组合,而不是把过去的结果当作永久保证。

这也是 AI Native Quality Engineering 可以落地的一条路径:把风险分析、测试选择、证据验证、回归优化和发布准备连接成相互配合的能力。自动化或 Agent 可以协助整理结果、找缺口、比较回归变化,但没有团队认可的门槛和授权时,不应自行宣布“测试已经足够”。质量 Loop 的产物是更可靠的证据和更清楚的决策,不是一个一次性算出的停止数字。

评论区留下的三个问题

  • Thabo Mahlangu 提醒,电商购物车里的小问题与健康科技或金融科技里的同类问题,后果完全不同。项目风险级别变化时,测试门槛也要跟着调整。
  • Tinashe Maphela 把难点问得很直接:回归包一直增长,退役用例的规则是什么?增加测试容易,减少测试需要证据。
  • Sharon Heying 指出,产品复杂度、风险和可用时间共同影响测试深度。项目情况会变,测试重点也要重新评估。

这三个问题把文章拉回到日常工作:测试门槛如何适配风险,旧用例如何退役,测试深度又该何时调整。它们都没有脱离上下文的固定答案。

测试够不够,最后要看决策证据

斯多葛的节制要求我们把注意力放在能控制的事情上。测试人员不能保证软件没有缺陷,却能改进测试方法、提出更好的问题、收集更可信的证据,并清楚说明不确定性。

每次准备停止时,可以再问自己两句:继续测试,是风险仍然需要验证,还是没人愿意作发布决定?停止测试,是因为证据已经充分,还是因为项目没有时间了?

好的测试不要求把所有东西都测一遍,而是围绕重要风险收集足以支持知情决定的证据,并让大家知道仍在接受哪些风险。有时节制意味着停下来;有时则意味着有理由地坚持继续测。

How Much Testing Is Enough? The Stoic Case for Knowing When to Stop: https://www.linkedin.com/pulse/how-much-testing-enough-stoic-case-knowing-when-stop-stephen-platten-l4xqe/

分享