这篇内容想解决什么问题
先说明一下,"测试准入准出标准规范"这个名字一听就是偏传统软件测试方向的东西,但别急着划走。我做质量保障和测试管理已经快十年,见过太多团队其实不是不会测,而是不知道怎么定义"什么时候能开始测"以及"什么时候算测完了"。这两个问题不解决,测试过程就永远是"感觉差不多了就发版",最后出问题全靠运气。
准入准出(Entry Criteria / Exit Criteria)本质上是一种门槛机制:准入条件告诉你,代码到什么程度才有资格进入测试阶段;准出条件告诉你,测试到什么程度,这个版本才有资格走向用户。这套标准不管你是创业小团队还是成熟研发体系都能用,区别在于颗粒度和严格程度。适合测试工程师、测试负责人、研发项目经理、质量保障(QA)同学阅读参考,也适合刚转行做测试管理的朋友建立体系化思路。
我在这篇内容里会把准入准出的设计思路、具体指标怎么定、流程怎么落地、以及我踩过的坑全部梳理出来。不会给你讲那种"准入准出很重要"的空话,直接给你可以抄作业的标准模板和实操细节。
1. 测试准入准出标准背后的核心设计逻辑
1.1 没有准入门槛造成的混乱,你大概率遇到过
先说准入。很多团队测试工作乱,第一乱就乱在入口。开发说"代码写完了,可以测了",测试同学打开环境一跑,冒烟用例挂了三分之一,环境部署失败,数据库数据全是脏数据,接口文档和维护代码完全对不上。然后测试就只能一边等开发修,一边自己搭环境,一边还要同步给项目经理汇报进度"为什么还没测完"。这种事我见过太多次了。
没有准入标准的团队,表面上看起来是"敏捷",缩短了等待时间,实际上是拿测试的时间去补开发的进度。代码提交质量不稳定、环境不可用、数据不干净,这些问题不解决就硬着头皮开始测,最后测试报告的结论往往也是错的,因为底层数据不对,用例跑出来的结果根本不可信。
所以说,准入标准不是用来卡开发的,也不是测试团队给自己找存在感。它的真实作用是过滤掉不合格的交付物,保证测试活动从一开场就建立在相对健康的基线之上。这就像你做饭之前要先看看食材新不新鲜,锅碗瓢盆洗没洗干净,不会把发霉的菜直接下锅,对吧。
1.2 没有准出标准的版本发布,就是一场赌局
再说准出。准出条件决定了"这个版本能不能正常发布"。没有准出标准的团队,最常见的决策方式是"测试测了两周,好像没什么大问题了,开发也说改完了,要不就发吧"。听起来合理,但仔细一想就会发现漏洞:没什么大问题是什么标准?是主要用例通过率还行?还是线上反馈还没来?
我见过一个真实案例。某移动端App版本,测试执行率只有百分之六十多,性能测试没做,兼容性测试只覆盖了三台主流机型。但因为业务方催得紧,版本还是发了。上线一周后线上反馈各种卡顿和闪退,市场份额肉眼可见地掉。后来复盘才发现,问题根本不是"测试不够努力",而是"测试停止的条件从来没有被定义清楚"。
准出标准就是要解决这个"什么时候才算测完"的问题。它把模糊的"差不多了"变成具体、可量化、可以评审的指标。有了准出标准,测试团队可以挺直腰杆说"当前条件不满足,我不能签这个发布结论",而不是凭感觉来回拉扯。
1.3 准入和准出是一套完整闭环,缺一个都有问题
准入和准出不能分开看。准入管起始质量,准出管结束质量,它们是同一个过程的两个端点,中间是测试执行的质量。准入太松,准出再严格也没用,因为大量低质量用例跑出来的结果会让你误判;准出太松,准入卡得再严也没意义,因为测试本身偷工减料,最后照样拦不住问题。
我在实际推行这套标准的时候,一贯的主张是"准出比准入更值得花时间设计"。因为准入条件相对客观,代码编不编译得过、冒烟测试过没过、环境能不能起,这些都是非黑即白的。准出条件就复杂多了,它涉及覆盖率、缺陷趋势、遗留风险、性能指标、兼容性范围,需要结合业务判断,弹性空间大,也最容易被拍脑袋。
另外有一点要注意:准入准出标准不能是测试一个部门自己闭门造车定出来的。一定要拉上开发负责人、产品经理、项目经理一起评审确认。否则测试单方面定了标准,开发不认,产品不认,执行起来就是一张废纸。后面我会讲怎么联合评审。
2. 准入条件怎么定义才"既不卡人也不漏事"
2.1 准入条件设计的五个核心维度
准入条件到底应该包含哪些内容?根据我做过的多个项目,总结下来可以分成五个维度,每个维度下面对应有具体的检查项。
第一,代码维度的完成度。开发自测是否完成,单元测试是否编写并通过,代码是否符合项目的编码规范,有没有遗留的阻塞级问题。简单说,代码在功能层面已经实现了需求描述的内容,而不是"先提交上来测试帮忙看看还没写完的部分"。
第二,构建与冒烟测试。最新的代码能否在测试环境顺利编译构建,部署后能否正常启动,核心冒烟测试用例是否全部通过。这里强调"最新代码",是因为我见过太多测试环境跑的是上一个版本的包,测了半天发现根本不是这轮要测的功能,等于白忙活。
第三,测试环境的可用性。测试环境是否稳定,关联的依赖服务(数据库、缓存、第三方接口)是否就绪,测试数据是否准备完成。环境问题不解决,测试执行就会一直被环境故障打断,效率极低。
第四,需求与文档的确认。被测版本的需求范围是否确认过,产品文档、接口文档、设计文档是否已同步到位。这一条经常被忽略,但特别重要。文档缺失会导致测试用例本身就是错的,测试执行变成了自嗨。
第五,缺陷状态的确认。阻塞级(Blocker)问题是否已经修复并验证通过。如果还有阻塞主流程的缺陷没有解决,测试进去也跑不了两条完整的业务链路,这时候开始测试纯属浪费时间。
2.2 一份可以抄的准入检查单
下面这份准入检查单是我在多个团队实际用过的版本,你可以根据自己的项目复杂度做增删。它不是教科书式模板,而是经历过工程实践、能直接用的落地版。
| 检查项 | 通过标准 | 负责人 |
|---|---|---|
| 需求范围确认 | 本轮迭代需求清单已确认,无未明确项 | 产品经理 |
| 代码提交状态 | 功能代码已全部提交到指定分支,无未提交模块 | 开发工程师 |
| 单元测试执行 | 新增/修改模块单元测试编写完成,通过率100% | 开发工程师 |
| 静态扫描与代码规范 | 代码规范检查通过,无致命和严重告警 | 开发工程师 |
| 环境部署验证 | 测试环境部署成功,服务正常启动,无关键报错 | 测试工程师 |
| 冒烟测试执行 | 核心业务冒烟用例通过率100% | 测试工程师 |
| 测试数据准备 | 基础测试数据已准备完成,无脏数据阻塞 | 测试工程师 |
| 文档同步 | 接口文档、需求文档、设计文档已同步最新 | 开发工程师 |
| 阻塞缺陷处理 | 无Blocker级未关闭缺陷 | 测试工程师 |
每一行都很简单,但合在一起就是一道有效的过滤网。实际执行过程中,"冒烟测试通过率100%"这一条最容易引起争议,因为开发经常觉得冒烟用例太严苛了。我的建议是冒烟用例只覆盖核心业务链路和主流程,不要贪多,控制在20到30条左右。冒烟用例覆盖面太广会导致执行时间过长,反而失去了快速验证的意义。记住,冒烟测试的目的是"验证能不能开始深入测试",不是"验证所有功能都没问题"。
2.3 准入评审会议怎么开才高效
准入不是开发提交一个申请、测试默默检查一下就完事的,建议走一次简短的准入评审会议。这个会不需要很长,十五分钟到二十分钟足够,关键是固定节奏、固定参会人。
评审会议按这个流程走:开发负责人汇报本轮交付范围和自测情况,测试负责人反馈冒烟测试结果和环境检查结果,产品经理确认需求是否都可测,最后项目经理确认是否满足准入条件。如果有不满足的项目,直接明确阻塞项和修复时限,下次评审前必须完成修复。
这里有个实际心得:准入评审会议不要太频繁,更不要每轮迭代都走一个重型评审流程。对于迭代型项目,建议每周固定一个时间统一评审准入;对于版本型项目,建议在功能开发率达到80%到100%这个窗口期做一次准入评审。节奏太密集容易让团队厌烦,太松散又起不到拦截作用。
3. 准出条件怎么定才算是"真正测完了"
3.1 准出条件里最硬的三项硬指标
准出条件比准入条件复杂。我把它拆成几大类,第一类是执行度指标,第二类是缺陷指标,第三类是质量指标。先从最硬的说起。
执行度指标包括用例执行率和用例通过率。用例执行率的计算公式是:已执行用例数 ÷ 计划执行用例总数 × 100%。我见过很多项目用例执行率只有70%多就签发了,理由是"没执行的那部分用例不影响核心功能"。这话听着有道理,实际上经不起推敲。你没执行的那些用例,可能恰恰覆盖了出问题的模块。合理的执行率要求建议设置在95%以上,剩余未执行的原因要逐个说明,并且经过评审确认不影响发布。
用例通过率的计算公式是:通过的用例数 ÷ 已执行用例数 × 100%。这个指标要求达到多少合适?如果是核心业务模块,我建议100%通过;非核心模块最低也要95%以上。通过率不达标意味着遗留问题太多,此时强行发布就是把风险转嫁给真实用户。
缺陷指标里最核心的参考标准是"零致命缺陷、零严重缺陷",这个没有商量余地。致命缺陷在这里指的是会导致系统崩溃、数据丢失、主要功能无法使用的缺陷,这类缺陷一旦流到线上就是事故。不是零漏洞而是零问题,至于轻微缺陷和一般缺陷,可以根据实际情况评估是否豁免,但需要走正式豁免流程而不是口头拍板。
3.2 用缺陷收敛趋势判断"缺陷是否已经测透"
缺陷趋势分析是准出评估里最容易做假、也最容易被忽略的环节。很多团队只看"当前还有多少个Bug没关闭",却从不去看整个测试周期的缺陷分布趋势。
这里我要重点介绍一下缺陷收敛的判断方法。一个健康的测试周期中,缺陷发现数量曲线应该是这样的:测试初期缺陷数逐步上升,中期达到峰值,后期开始下降,并且在准出窗口期趋于平稳。如果到了测试周期的后半段,缺陷发现数量还在高位徘徊甚至上升,说明质量远远没有稳定,这时候绝对不满足准出条件,哪怕测试用例都执行完了也不行。
举一个具体例子。某Web系统测试计划三周,每周的缺陷发现数量分别是60、45、42,到最后一周还有35个新缺陷产生。这个趋势就是不收敛的,说明测试执行虽然是完整的,但代码质量波动很大,后面上线的风险不可控。我当时直接否掉了发布申请,让开发团队先解决影响核心流程的缺陷并做一轮自测,等下一轮缺陷趋势真正下落之后再评估准出。
实际操作中,你可以做一个简单的表格来辅助判断:每周记录新发现缺陷数、关闭缺陷数、遗留缺陷数。如果连续两周新发现缺陷数明显下降且遗留缺陷数持续减少,基本可以判断缺陷已经收敛。
3.3 遗留缺陷到底怎么处理:分级与豁免机制
准出标准不是要求所有缺陷都必须关闭,这种"零缺陷"主义在现实工程中不切实际。合理的做法是分级管理加豁免机制。
缺陷等级参考标准:A级(致命)指系统崩溃、数据丢失、核心功能不可用,必须全部清零;B级(严重)指主要功能受影响、无规避方案,必须全部清零;C级(一般)指功能受影响但有规避方案,可以留有少量但需要给出修复计划和评估影响;D级(轻微)指界面文案、交互优化类问题,允许带量上线但要登记下个版本修复计划。
这里我多讲一点实际心得。C级和D级缺陷的豁免不能由测试一个人说了算,必须经过缺陷评审会。评审会由项目经理主持,产品经理、开发负责人、测试负责人共同参与,逐条确认豁免理由和上线风险。豁免之后不意味着不管了,缺陷仍然要进入下个迭代的Backlog(待办清单)里,确保"带病上线但不带病遗忘"。
3.4 性能指标和兼容性范围怎么设定
除功能外,准出条件还必须覆盖性能测试和兼容性测试的结论。很多团队功能测试做得很细,一到性能测试就敷衍了事,甚至干脆不做。我理解性能测试成本高、门槛也高,但至少你要知道自己系统的核心业务指标是什么。
性能指标的设定思路是:核心接口的响应时间、吞吐量、错误率、资源利用率要在预期范围之内。具体阈值根据业务场景定,比如一个电商系统的核心接口,TP99响应时间建议不超过500毫秒,错误率不超过0.1%,在200并发下CPU使用率不超过70%,内存使用率保持稳定不出现持续增长。这些数值不能拍脑袋,最好基于线上历史数据和业务方的实际预期来定。
兼容性测试的准出标准应该提前定义"支持范围"。所谓兼容性不是所有设备和浏览器都要测一遍,而是明确规定要支持的操作系统版本、浏览器版本、分辨率范围或硬件平台,在这个范围内测试通过就算满足准出条件。范围之外的设备属于"尽力而为",在风险备注里写清楚即可。
4. 准入准出标准在团队里怎么落地执行
4.1 标准文档只是第一步,关键在共识
很多团队认为制定标准文档是核心工作,其实不对。真正难的是让标准在团队里被执行、被认同、被持续改进。文档定得再完美,如果开发不配合,产品不认可,项目经理不重视,那就是一张废纸。
落地第一步是拉通共识。我建议你在标准起草阶段就拉上开发负责人、产品经理、项目经理一起参与,而不是自己闷头写。起草完组织一次评审会议,逐条讲解为什么需要这个标准、每条标准具体怎么检查、达不到标准会有什么后果。让所有人理解这是降低团队整体风险的手段,而不是测试部门找事的工具。
落地第二步是试点先行。不要一上来就在所有项目上强制执行,选择一个执行力强、配合度高的项目先试运行一到两个迭代。试点期间收集反馈,评估标准是否有不合理的条目,及时调整,然后再逐步推广到其他项目。这样做的好处是可以控制变革风险,避免推行过程中大面积反弹。
落地第三步是持续运营。标准不是一成不变的,至少每季度回顾一次,看看哪些条件过于严格导致交付卡壳、哪些条件过松形同虚设,并结合项目实际进行调整。我见过一些团队标准定了之后就再也不动了,结果过了半年标准里的指标和业务现状早就对不上了。
4.2 借助现有工具把准入准出数据"跑起来"
标准落地不能靠手工填Excel表格,那样一方面效率低,另一方面也不透明、容易扯皮。今天稍微成熟一点的团队,都至少有用例管理工具(比如TestRail、Xray或者禅道)和缺陷管理工具(比如Jira、禅道、PingCode),这些工具天然支持准入准出执行数据的采集和追踪。
选型思路很简单:用例执行率和通过率从用例管理工具直接导出,缺陷相关的数据从缺陷管理工具导出,然后对这些数据进行汇总分析。如果你用的是Jira,还可以直接把准入准出项做成工作流里的检查项,让开发在流转单子时主动确认是否满足条件,测试在关闭任务前确认准出数据是否达标。
更进一步,如果你的团队有CI/CD流水线,可以把冒烟测试、静态扫描、单元测试这些环节接入自动化。比如构建结束后自动触发冒烟测试,执行结果自动回写,达到准入门槛才允许进入下一步流程。这种方式能最大限度减少人为干预,执行效果最稳定。没有自动化条件的小团队也不用焦虑,手工填写加评审会确认,一样能把标准跑起来,只是需要加入人工检查环节,确保数据不被遗漏。
4.3 准入准出评审会:节奏怎么定,结论怎么记录
准入准出评审会需要在项目中固定节奏。我的经验是建议把它作为版本评审的一个固定环节,而不是单独开会。比如敏捷迭代评审中,在迭代开发完成、测试启动前,花十分钟确认准入;在迭代测试完成、准备发布前,花十五到二十分钟确认准出。这样的方式不增加额外会议负担,也更容易让关键角色到场。
评审结论一定要有记录。记录内容包括:评审时间、迭代或版本号、参与人、准入/准出各检查项结论、不满足项及其修复责任人、最终结论(通过/不通过/有条件通过)。有条件通过也是一种常用结论,意思是主标准基本达标,但仍有个别非阻塞性问题需要上线前修复,修复后需要在指定时间内向测试反馈验证结果。这种情况下,一定要写明后续跟踪人和跟踪时间,避免"有条件通过"变成"无限期带病上线"。
5. 常见问题与避坑实录
5.1 准入太严,开发抵制怎么办
准入标准推行初期最容易遇到的问题是开发人员的抵制。抵触的原因通常来自两方面:一是觉得多了一套流程,增加了交付负担;二是觉得测试标准太高,影响了迭代节奏和绩效考核。
我的处理思路是:先区分"流程手段"和"业务目标"。我不建议直接和开发团队在流程上硬碰硬,而是讨论一个核心问题:"你是愿意在测试环境多花半天把自测做扎实,还是愿意在线上出了事故之后花三天处理客诉和复盘?"几乎所有做过线上事故处理的开发,都能快速理解这个对比的意义。
另外一个实际技巧是把准入检查里和开发强相关的项目尽量自动化。比如代码规范检查、单元测试覆盖率检查、构建结果校验,这些都可以在CI流水线上自动执行,开发提交代码后自动反馈结果,不需要人为通知、催促。工具自动化的检查结果比人催人更客观,也更容易被接受。
5.2 准出指标齐全但质量事故照发,问题出在哪
有一种情况最让测试团队崩溃:准出评审时所有指标都达标了,缺陷趋势也收敛了,性能也过了,但上线后还是出了事故。这到底是标准没用,还是执行出了问题?
我复盘过很多次类似案例,结论大多数时侯数据本身没问题,问题是"数据背后的验证深度"不够。比如用例执行率达到了98%,但那2%没执行的用例恰好覆盖了最核心的下单流程;缺陷趋势看着是收敛了,但新增的缺陷集中在某个并发模块,恰恰是这个模块在线上出了问题;性能测试通过了,但压测场景没有覆盖促销峰值流量特征。指标是健康的表象,深层次是理解不深。
要避免这种情况,你需要做两件额外的事。第一件事是在准出评审时不仅看数据,还要让测试负责人口头说明"本次测试覆盖了哪些风险点、哪些风险点还没完全覆盖、剩余的疑虑是什么"。第二件事是判断用例设计本身的合理性,对照需求清单确认每个需求点是否都有对应用例,而不是只看执行占比。
5.3 指标被"数字游戏"玩坏怎么破
标准有了,就一定会有人针对标准本身进行博弈。比如为了提高用例执行率,把某些大用例拆成很多小用例充数;为了缺陷收敛趋势好看,压低测试前期提交缺陷的数量;为了让通过率好看,把失败的用例标记为"环境问题"跳过。
这些动作看起来很高明,实际上是在摧毁整个准入准出体系的公信力。我的做法是建立"抽查机制",测试负责人定期对已关闭的用例和缺陷进行抽查复核,抽10%到15%的比例,重点核对失败用例的处理理由和缺陷关闭时的验证记录。一旦发现数据造假,不仅仅是纠正数据的问题,还要升级到绩效层面去沟通。长效机制是建立"数据质量文化",比建立"指标考核文化"更重要,宁可指标难看一点,也不要指标失去可信度。
5.4 标准定了却执行不下去,多半是缺少闭环复盘
最后一个常见问题是标准本身设计得很完美,但执行一段时间后大家就慢慢不看了。这种情况说明团队缺少"复盘—改进—再固化"的闭环机制。
我推荐每个版本结束后,都开一次简短的质量复盘会,议程包括:本轮准入准出执行情况回顾、各指标是否达标、未达标的原因分析、有哪些质量问题在前面环节没被拦截、下个周期准入准出标准需要做什么调整。这个复盘会不需要很长,重点在于把标准和实际结果持续对照,让标准不断进化。
如果连续几个版本都没有任何质量标准被触发或调整,我反而要警惕了。要么是你的标准定得太高导致大家直接放弃了,要么是标准定得太低已经完全失去了过滤作用。无论哪种情况,都需要及时介入和调整。
最后再分享几点个人心得
说到底,测试准入准出标准规范最终解决的是质量管理的"确定性"问题。它不会让你的测试工作变得轻松,甚至短期内会让流程感知上变得更重,但它能让你在发布决策面前少一些运气的成分。
我个人最大的体会是:标准不是用来束缚人的,而是用来帮助团队在压力面前保持一致和底线。没有标准的时候,业务催得紧,你很容易就松口了;有了标准,你可以把决策压力交还给流程本身,而不是靠个人意志硬扛。
如果你想从零开始引入这套体系,我的建议是从最小的闭环做起——不要追求一步到位,先把冒烟测试准入和缺陷清零准出这两条跑起来,再逐步完善性能、兼容性、覆盖率等各项指标。跑通一个版本之后,再拉上团队一起评估效果,逐步扩大标准范围,这样落地阻力最小,效果也最扎实。