行业经典的软件测试七大原则
1. 原则1:测试仅能证明缺陷存在,无法证明无缺陷——“测试通过了,能保证上线没问题吗?”
我会客观清晰地划清保障边界,既不夸大测试价值,也不否定测试的作用:
不能100%保证上线绝对没有问题。测试的本质是在有限的时间、资源、场景下,尽可能发现并清除缺陷,而非证明系统“完全没有Bug”。
我们能明确保证的是:
- 所有核心业务主路径、高风险场景100%覆盖验证,严重/阻塞级缺陷已全部清零;
- 已知的业务规则、安全规则、性能指标均达到预设的上线准入标准;
- 上线配套了灰度放量、全链路监控、快速回滚的兜底机制,即使出现未覆盖的边角问题,也能在影响最小范围内快速止损。
之所以无法承诺绝对零问题,核心原因有三点:一是用户真实操作的场景组合无限,不可能穷尽测试;二是测试环境与生产环境的基础设施、数据量级、网络环境不可能完全一致;三是隐性的兼容性、极端并发、长尾边界问题,只有在真实流量下才会暴露。我们做的所有工作,本质是把上线风险控制在业务可接受的范围内。
2. 原则2:穷尽测试不可能——登录功能5个必须测的场景,如何选择?
选型逻辑
既然无法覆盖所有输入组合、所有异常情况,选型的核心标准就是风险优先级:优先覆盖“出问题影响最大、用户最高频、安全风险最高”的场景,放弃低价值的边角用例,把有限资源投入到最高风险的场景中。
5个必测场景
- 正向核心:正确账号+正确密码正常登录成功
这是用户最高频的主路径,一旦失效整个功能完全不可用,是所有测试的基础前提。 - 逆向权限:错误密码/不存在账号的登录失败校验
验证身份校验的基础有效性,防止无权限用户绕过校验登录,是权限安全的第一道防线。 - 安全风控:密码错误次数超限后的账号锁定机制
对应暴力破解的安全风险,是业务风控的核心规则,一旦失效会导致账号被盗、数据泄露的高危风险。 - 边界异常:空值、超长字符、非法格式输入的异常处理
验证前后端参数校验的完整性,防止异常输入引发系统报错、SQL注入、接口崩溃等问题,覆盖最常见的异常输入场景。 - 业务规则:登录态有效性与权限匹配校验
验证登录后Token有效期、多端登录互斥、账号对应角色权限是否正确,直接影响用户后续全流程的使用体验与数据安全。
3. 原则4:缺陷集群性(80/20法则)——Bug最集中的20%模块,为什么?
在我经历过的企业级ERP、SaaS类项目中,约20%的模块承载了全项目80%的缺陷,高度集中在三类模块:核心业务交易模块(如订单结算、计费核算)、跨系统集成对接模块(如第三方支付、政企系统对接)、迭代最频繁的功能模块(如营销活动配置、客户跟进流程)。
缺陷集中的核心原因
- 业务复杂度高,逻辑分支爆炸:核心交易模块往往叠加了多规则(优惠、税率、分账、逆向退款),逻辑组合数量呈指数级增长,开发极易遗漏边界分支,天然缺陷密度更高。
- 外部依赖不可控,联调不充分:集成对接模块依赖第三方接口规范、网络环境、异常返回逻辑,双方对异常场景的定义不一致、联调覆盖不全,极易埋下兼容性、容错性缺陷。
- 需求变更频繁,回归风险高:迭代频繁的模块每次改动都可能引入新的回归缺陷,改动次数越多,引入Bug的概率越高,符合“代码改动量与缺陷量正相关”的规律。
- 隐性规则多,易出现理解偏差:这类模块往往有大量业务隐性规则,需求文档难以完全覆盖,开发、测试、产品对规则的理解偏差,最终转化为线上缺陷。
这也正是80/20原则的落地指导:测试资源绝对不能平均分配,必须向这20%的高风险模块倾斜,投入更多的用例设计、更充分的评审、更严格的回归。
4. 原则5:杀虫剂悖论——测试套件1年没更新,最可能出什么问题?
杀虫剂悖论的核心是:一成不变的测试用例会逐渐失效,就像长期用同一种杀虫剂,害虫会产生抗药性。1年不更新的测试套件,本质已经沦为“走过场”的形式主义,会带来四类核心问题:
- 业务覆盖完全失效,新增功能裸奔上线
1年的业务迭代中,新增的功能、调整的规则、优化的流程,老测试套件完全没有覆盖。每次回归看起来通过率100%,但新逻辑完全没被验证,新增缺陷几乎100%漏测。 - 开发对用例“免疫”,隐性缺陷无法发现
开发人员对常年不变的用例场景已经非常熟悉,写代码时会特意适配这些已知场景,但新的边界组合、异常链路、操作路径完全没有被验证,大量隐性逻辑缺陷会被留在线上。 - 技术适配脱节,底层风险完全漏测
底层架构升级、依赖组件更新、接口协议迭代后,老用例要么因为接口变更跑不通沦为摆设,要么只能验证旧版本逻辑,新的兼容问题、性能退化、依赖冲突完全检测不到。 - 安全防护失效,风险持续累积
新的攻击手段、漏洞类型、绕过方式不断迭代,老的安全测试用例完全无法覆盖,比如新型注入、权限绕过、数据泄露路径,1年前的用例根本没有设计对应场景,系统安全防线会持续弱化。
最终的结果就是:回归测试通过率常年100%,但线上问题层出不穷,测试完全失去了质量把关的价值。
5. 原则7:零Bug谬误——PM说“这个迭代必须零Bug才能上线”,如何回应?
我会先对齐目标,再拆解现实,最后给出更合理的替代方案,既不生硬反驳,也不盲从不合理要求:
我理解你希望上线后稳定、不影响用户体验的诉求,但“绝对零Bug上线”在工程上既不现实,也不符合业务的投入产出比,这就是行业常说的“零Bug谬误”。
核心原因有三点:
第一,穷尽测试不可能。输入组合、操作路径、环境差异是无限的,我们不可能覆盖所有场景,总有未被验证的边角场景可能存在问题;
第二,成本收益严重失衡。越到迭代后期,发现一个低危Bug的成本呈指数级上升——为了几个不影响核心业务的UI细节、极端边角场景的小问题,推迟上线一周,损失的业务机会、客户价值,远大于Bug本身的影响;
第三,“零Bug”不代表高质量。很多团队为了凑零Bug的指标,只测简单主路径,不敢碰复杂边界和高风险场景,反而把真正高危的问题留在线上。我们可以达成更合理的上线标准,替代无意义的“零Bug”要求:
- 严重、高危、阻塞级缺陷100%清零,核心业务场景零阻断;
- 所有遗留的一般、低危缺陷全部评估影响范围,有明确的规避方案和修复排期;
- 上线配套灰度放量、监控告警、快速回滚机制,出现问题可快速止损;
- 核心业务指标达到预设的质量门禁阈值,风险完全可控。
我们追求的应该是「业务可接受的高质量上线」,而不是追求纸面的零Bug指标。
6. 原则6:测试的上下文相关性——银行核心系统与玩具App哪个测试更严格?为什么原则6决定了差异?
银行核心系统的测试严格程度要远高于玩具App,这正是测试上下文相关性原则的直接体现:没有通用的“最佳测试标准”,测试的投入、严格度、验收门槛,完全由系统的业务风险、合规要求、用户容错度决定,风险越高,测试越严格。
两者的核心差异,本质是上下文的天壤之别:
- 故障风险等级不同:银行核心系统涉及资金交易、用户敏感金融数据,一旦出现Bug,直接导致用户资金损失、数据泄露,甚至引发区域性金融风险;而玩具App的故障最多影响用户娱乐体验,没有人身、财产风险,用户容错度极高。
- 合规监管要求不同:银行核心系统受金融监管严格约束,必须满足等保三级、金融行业数据安全规范、审计留痕要求,测试过程、测试结果都要可追溯、可合规;玩具App没有强制的行业监管要求,测试标准由企业自行定义。
- 用户容错预期不同:用户对银行系统的错误零容忍——转账金额错误、余额显示异常、交易失败都是不可接受的严重问题;而玩具App偶尔闪退、加载慢、UI错位,用户大多可以接受甚至忽略。
- 故障影响范围不同:银行核心系统故障会影响海量用户的正常资金使用,甚至引发舆情与社会影响;玩具App故障仅影响部分用户的娱乐场景,止损成本极低。
原则6的核心指导意义就是:测试策略不能照搬照抄,必须匹配系统的业务上下文与风险等级,高风险系统配高标准,低风险系统控成本,才是合理的测试投入。
7. 用7条原则反思过往项目:违反了哪几条,带来了什么后果?
我早年负责的一款中小企业SaaS CRM产品,在团队成型初期,违反了7条原则中的4条,直接导致项目交付质量差、延期频繁、测试投入产出比极低,具体如下:
违反原则3:测试尽早介入(测试左移)
- 具体表现:早期测试团队只在开发完成后才介入,需求评审、设计评审完全不参与。
- 后果:需求文档中的逻辑矛盾、规则缺失、边界模糊,直到测试阶段才被发现,开发返工、需求重评,单次迭代平均延期3-5天,大量时间浪费在需求反复拉扯上,测试也被迫压缩执行时间,形成恶性循环。
违反原则4:缺陷集群性(80/20法则)
- 具体表现:测试资源平均分配,每个模块都设计差不多数量的用例,投入差不多的测试时间。
- 后果:核心的客户转化、订单结算模块(仅占模块总数的20%)线上缺陷占比高达80%,反复出问题;而系统设置、操作日志这类边缘模块,投入了大量测试资源,几乎没出过线上问题,整体测试性价比极低,业务方感知不到测试价值。
违反原则5:杀虫剂悖论
- 具体表现:测试用例只增不更新,前半年的回归测试一直沿用最初的用例集,没有根据线上问题、业务迭代优化调整。
- 后果:回归测试通过率常年维持在98%以上,但线上新增场景的缺陷层出不穷,老用例测过的场景确实很少出问题,但新的操作路径、边界组合完全漏测,回归测试沦为“刷通过率”的形式工作。
违反原则7:零Bug谬误
- 具体表现:曾有一次重要客户交付节点,产品端强行要求“零Bug上线”,要求所有缺陷不管等级必须清零。
- 后果:为了修复3个低危的UI边角Bug,团队加班3天,上线时间推迟4天,错过了客户的推广窗口期,业务端损失的签约收益,远大于这几个Bug带来的影响,属于典型的为了纸面指标牺牲业务价值。
后续团队基于七大原则做了全面调整:测试全流程左移、核心模块资源倾斜、每季度迭代测试用例、按缺陷等级管控上线标准,项目的线上缺陷率下降了65%,交付准时率提升到90%以上,测试的业务价值也得到了认可。
