缺陷逃逸率口径偏差:阶段归属、重开与严重级别怎么规避
缺陷逃逸率看似只是一个比值,偏差却往往藏在口径里:阶段归属把缺陷记到发现环节还是引入环节、重新打开是否重复计数、严重级别用首次定级还是当前级别,都会让同一批缺陷算出不同结果。本文围绕这三类偏差,给出可写入文档、可固化到字段和脚本、可用抽样复核验证的口径改进方案,适用于正在做指标口径评审的研发质量度量团队。
Table of Contents
要点总览(TL;DR)
- 缺陷逃逸率的偏差集中在三处口径:阶段归属把缺陷记到发现环节还是引入环节、重新打开是否重复计数、严重级别用首次定级还是当前级别。
- 阶段归属应把引入阶段与发现阶段拆成两个字段,并固定线上缺陷的判定时点与来源渠道,避免同一缺陷跨阶段重复计入。
- 重新打开以缺陷单为计数单位、按创建时间锁定归属周期,重开率单独统计,不混入逃逸率。
- 严重级别锁定首次定级并保留变更记录,在口径文档中写明纳入统计的等级范围与可核对的判定依据。
- 改进按书面定义、字段与脚本固化、抽样复核与趋势对照三步推进,用一致率、变更记录和趋势稳定性验证效果。
现有统计做法与要达成的目标
多数团队统计缺陷逃逸率时,采用“线上缺陷数 ÷(测试阶段发现缺陷数 + 线上缺陷数)”或“线上缺陷数 ÷ 测试阶段发现缺陷数”的简化算法,按发现阶段把缺陷分为测试内和线上两类。这个做法上手快,但在口径评审中经常暴露出三个问题:同一缺陷在不同报表里归属不同阶段、重开缺陷被重复计入、严重级别随修复过程变化导致分子波动。
本次口径优化要达成的目标可以归纳为三条:
- 口径可复现:任何人按文档规则重算同一统计周期,得到相同结果。
- 跨周期可比:口径变更前后能通过版本标注区分,趋势对比有明确边界。
- 能支撑质量评审:指标能回答“缺陷是否越过了测试环节”“哪个环节引入的问题更多”,而不只是一个升降数字。
在动手改口径前,需要先明确两个基础定义。统计对象是缺陷单,以缺陷单为最小计数单位,同一缺陷的多次状态变化不产生新的计数对象。统计周期按团队评审节奏确定,常见为自然月或发布周期;周期一旦确定,跨期缺陷的归属规则必须同步写清楚,否则后续所有对比都会失去基准。
现状基线可以用一张简单表格记录:当前使用的分子分母定义、阶段字段取值、重开处理方式、严重级别取值来源、统计周期。这张表是后续评审和变更记录的起点。
阶段归属上的偏差与规避
阶段归属是逃逸率偏差最集中的环节。常见偏差有两类。第一类是按发现阶段归属:缺陷在测试阶段被发现就记为测试内缺陷,在上线后被发现就记为线上缺陷。这种做法忽略了缺陷的引入环节,一个在需求评审阶段就埋下、直到线上才暴露的问题,会被完整记入线上缺陷,而一个开发阶段引入、测试阶段即被拦截的问题则完全不进入分子。当团队测试左移程度不同,或需求变更频繁时,逃逸率会因引入环节的分布变化而虚高或虚低,无法反映测试拦截能力的真实变化。
第二类偏差出现在线上反馈与测试阶段的边界上。灰度发布期间用户反馈的问题、监控告警发现的异常、客服转来的故障,判定时点和来源渠道不统一时,同一缺陷可能先在测试环境被记录一次,上线后又被当作线上缺陷记录一次,分子被重复放大;反过来,部分线上问题因为“测试阶段已有关联单”而被排除在分子之外,逃逸率被压低。
规避的核心是把“引入阶段”和“发现阶段”拆成两个独立字段分别记录,而不是只保留一个阶段字段。引入阶段回答缺陷在哪个环节被引入,发现阶段回答在哪个环节被发现,逃逸与否由两个字段的组合判断:发现阶段晚于约定的质量门禁环节,才计入逃逸。字段定义建议如下:
| 字段 | 取值示例 | 填写时点 | 用途 |
|---|---|---|---|
| 引入阶段 | 需求、设计、编码、构建、配置 | 缺陷分析确认后回填 | 定位问题来源,支撑左移分析 |
| 发现阶段 | 单元测试、集成测试、系统测试、验收、线上 | 缺陷创建时填写 | 判断是否越过质量门禁 |
| 发现来源 | 测试执行、代码评审、监控告警、用户反馈、客服工单 | 缺陷创建时填写 | 区分线上缺陷的判定渠道 |
| 线上判定时点 | 首次全量发布、灰度发布、热修复上线 | 口径文档统一约定 | 固定线上缺陷的时间边界 |
线上缺陷的判定需要同时固定时点和渠道。时点上,建议以团队发布流程中的某个明确节点为界,例如首次全量发布时间;灰度期间发现的问题是否计入线上,需在口径评审时结合自身发布流程确定并写入文档。渠道上,明确哪些来源算线上缺陷,例如监控告警、用户反馈、客服工单,测试环境执行发现的问题即使发生在上线后也按测试内处理。规则写清楚后,同一缺陷跨阶段重复计入的空间会被大幅压缩。
重新打开缺陷的计数偏差与规避
重新打开对逃逸率的影响体现在分子和分母两侧。偏差之一是重复计数:一个线上缺陷被修复后验证不通过、重新打开,如果统计脚本按状态变更事件计数,同一缺陷单会被计为两条甚至多条线上缺陷,分子虚高,逃逸率随之偏高。偏差之二是跨期漂移:缺陷在统计周期 A 内创建,周期 B 内被重新打开,若按“最后更新时间”归属周期,这条缺陷会从 A 期移动到 B 期,两个周期的指标同时失真,趋势对比失去意义。
规避规则可以归纳为三条:
- 以缺陷单为计数单位:一条缺陷单在统计中只计一次,重新打开只更新状态、重开次数和重开时间,不新增计数。
- 归属周期按创建时间锁定:缺陷计入其创建时间所在的统计周期,后续重开、关闭、再重开都不改变归属周期。若团队需要观察重开对质量的影响,另设“重开率”指标单独统计,不混入逃逸率。
- 保留重开记录:重开次数、每次重开的时间和操作人作为缺陷单的属性保留,供复核和根因分析使用,但不参与逃逸率计算。
需要说明的是,重开率本身是有价值的指标,它反映修复质量和验证充分性。把重开率与逃逸率分开统计,两个指标各自口径清晰,也避免了一个指标承担两种解释。统计脚本中应显式排除状态变更事件作为计数来源,只按缺陷单创建记录取数。
严重级别处理上的偏差与规避
严重级别偏差主要来自两个方向。第一,用当前级别替代首次定级。缺陷在修复过程中可能因为影响范围缩小、临时方案上线而被下调级别,若统计时读取当前级别,原本应计入分子的高等级线上缺陷会从统计中消失,逃逸率被系统性压低。第二,只统计高等级缺陷但等级判定标准不统一。不同测试人员对“严重”和“一般”的边界理解不同,同一类问题在不同人手里定级不同,筛选后的分子规模随人员变化而波动,指标失去可比性。
规避做法是锁定首次定级字段,并保留级别变更记录。具体规则包括:
- 缺陷创建时完成首次定级,首次定级字段创建后不可覆盖,只能追加变更记录。
- 统计时读取首次定级,而不是当前级别;如需观察级别调整情况,单独统计降级率和降级原因。
- 在口径文档中明确纳入统计的等级范围,例如只统计致命和严重两级,并给出每一级的判定依据,包括影响用户范围、是否有可用规避方案、是否影响核心流程等可核验条件。
- 定级责任落到具体角色,例如由测试负责人或缺陷评审小组确认,减少个人判断差异。
等级判定依据写成可核对的条目,比写成形容词更有效。例如“影响全部用户且无规避方案”对应致命,“影响部分用户但有临时规避方案”对应严重,评审时按条目对照,定级分歧会明显减少。
优先改进动作与落地顺序
口径修正按“先定义、再固化、后验证”的顺序推进,避免先改脚本再补文档导致规则和实现脱节。
第一步:口径评审会形成书面定义。由质量负责人牵头,测试、开发、产品各出一名代表,逐条确认阶段字段取值、线上判定时点与渠道、重开计数规则、严重级别范围与判定依据。产出物是一份口径定义文档,包含字段清单、判定规则表、统计公式和生效时间。评审结论需要当场确认分歧点,未达成一致的部分标注为待定,不带着模糊规则进入下一步。
第二步:在缺陷字段与统计脚本中固化。把引入阶段、发现阶段、发现来源、首次定级、重开次数等字段配置到缺陷单模板中,设为必填或按流程节点必填;统计脚本按文档规则取数,计数单位锁定为缺陷单,归属周期锁定为创建时间。字段和脚本的修改需要有变更记录,与口径文档版本对应。在缺陷管理与度量工具中,这类字段配置和按口径取数的报表可以集中承载,例如 ONES 的缺陷管理支持自定义字段与状态流转,度量报表可按项目和时间范围统计缺陷分布,便于把评审确认的规则落到日常数据里,减少人工汇总时的口径漂移。
第三步:抽样复核与趋势对照。口径上线后,每月抽取一定数量的缺陷单,由未参与统计的人员按文档规则独立重算,与系统结果比对,记录不一致的条目和原因。同时观察口径切换前后趋势是否出现无法解释的跳变,跳变若来自口径变更而非质量变化,应在报表中标注。
| 动作 | 责任角色 | 交付物 | 完成标志 |
|---|---|---|---|
| 口径评审 | 质量负责人牵头,测试/开发/产品代表参与 | 口径定义文档 v1.0 | 分歧点全部确认或标注待定 |
| 字段与脚本固化 | 工具管理员、测试负责人 | 缺陷字段配置、统计脚本 | 新缺陷按新字段录入,脚本输出与文档公式一致 |
| 抽样复核 | 质量分析师 | 月度复核记录 | 一致率达到约定阈值,不一致条目有原因说明 |
| 趋势对照 | 质量负责人 | 口径变更标注后的趋势报表 | 跳变可归因,报表标注口径版本 |
适用前提、代价与效果验证
口径优化有前提条件。团队需要有统一的缺陷单作为统计对象,缺陷字段可维护、可配置,历史缺陷的阶段和级别信息有一定完整度。若历史数据缺失严重,回溯重算的成本可能高于收益,此时可以选择从某个时间点起按新口径统计,并在报表中标注切换点,而不是强行补齐全部历史。
代价主要来自两方面。一是口径切换期数据不可比,新旧口径下的逃逸率不能直接连成一条趋势线,需要在报表中标注口径版本和生效时间,跨期对比时以切换点为界分段解读。二是字段必填会增加缺陷录入的工作量,尤其是引入阶段需要缺陷分析后回填,团队需要接受短期内的填写负担,并通过字段说明和培训降低理解成本。回溯重算若涉及历史缺陷字段补录,还需评估人力投入和数据可得性。
效果验证不看指标数值本身的升降,而看口径是否稳定。可核验的验证方式包括:
- 抽样复核一致率:独立重算结果与系统结果的一致比例,按月记录,一致率稳定说明规则可复现。
- 口径变更记录完整性:每次口径调整都有文档版本、生效时间和影响范围说明,变更可追溯。
- 趋势稳定性:排除真实质量事件后,指标波动幅度收窄,跨周期对比不再出现无法解释的跳变。
三项验证同时成立,说明阶段归属、重开计数和严重级别三类偏差已被有效控制,缺陷逃逸率可以作为质量评审的稳定输入,而不是每次开会都要重新争论口径的争议指标。
常见问题
缺陷逃逸率的分母到底该用测试阶段发现的缺陷数,还是全部缺陷数?
两种分母都有团队在用,差别在于指标回答的问题不同。用“测试阶段发现缺陷数 + 线上缺陷数”作分母,衡量的是缺陷在测试与线上之间的分布,适合观察整体拦截效果;用“测试阶段发现缺陷数”作分母,更接近“线上缺陷相对测试拦截量的比例”,数值对测试发现量敏感。
关键不在选哪一种,而在选定后写进口径文档并保持稳定。分母定义一旦变化,历史趋势就不可直接比较,需要在报表中标注口径版本和生效时间。评审时建议同时记录选择理由,避免下次评审重新争论。
灰度发布期间发现的问题,算测试内缺陷还是线上缺陷?
这取决于团队发布流程中如何定义“线上”。常见做法是以首次全量发布时间为界,全量之后通过监控告警、用户反馈、客服工单等渠道发现的问题计入线上;灰度期间的问题是否计入,需要结合灰度范围和真实用户暴露程度在口径评审时确定。
无论选哪种,都要把判定时点和来源渠道同时写清楚,并保持稳定。规则模糊时,同一类问题会被不同人归到不同阶段,逃逸率随之波动。
缺陷被重新打开后,应该算一条新缺陷还是原缺陷?
统计逃逸率时按原缺陷单计一次,重新打开只更新状态、重开次数和重开时间,不新增计数。归属周期按缺陷创建时间锁定,跨周期重开不改变归属,避免指标在两个周期之间漂移。
重开本身反映修复质量和验证充分性,值得单独观察。可以另设重开率指标,统计重开次数与缺陷单数量的比例,与逃逸率分开解读,两个指标各自口径清晰。
严重级别在修复过程中被下调,统计时该用哪个级别?
统计时读取首次定级,而不是当前级别。缺陷创建时完成首次定级,该字段创建后不可覆盖,只能追加变更记录;级别调整情况可单独统计降级率和降级原因。
同时要在口径文档中写明纳入统计的等级范围,例如只统计致命和严重两级,并为每一级给出可核对的判定条目,比如影响用户范围、是否有临时规避方案、是否影响核心流程。定级责任落到具体角色,能减少个人判断差异带来的分子波动。
口径切换后,历史数据要不要按新规则回溯重算?
取决于历史缺陷字段的完整度。若引入阶段、首次定级等字段在历史缺陷中缺失严重,回溯补录的成本可能高于收益,此时可以从某个时间点起按新口径统计,并在报表中标注切换点,跨期对比以切换点为界分段解读。
若历史数据较完整,回溯重算能让趋势连续,但要评估人力投入,并把重算规则与口径文档版本对应记录,避免新旧结果混用。



