质量工程-05-质量度量体系的指标口径、采集方式和误区

一提到质量度量,第一反应就是做一张大盘:

  • 缺陷数
  • 用例数
  • 自动化通过率
  • 冒烟通过率
  • 发布次数
  • 线上故障数

数字看起来很多,周报也能写满,但真正到了版本决策、问题复盘和流程改进时,常见情况却是:

  • 指标不少,但没人知道哪些真的重要
  • 同一个指标,测试、研发、项目经理看的数字都不一样
  • 通过率很好看,版本还是频繁出问题
  • 缺陷数在下降,但只是因为提单门槛越来越高
  • 自动化覆盖率很高,关键链路仍然经常漏回归

这说明一个更根本的问题:

质量度量最难的部分,不是做图表,而是先把指标口径、采集方式和动作价值收稳。

这篇文章不讲空泛的“数据驱动质量”,只讲四个更实的问题:

  • 质量指标为什么不能乱堆
  • 哪些指标更值得长期看
  • 每个指标的口径和采集方式怎么定义
  • 怎么避免数字看起来漂亮,但对团队没有动作价值

一、质量指标最怕的,不是没有,而是失控

很多质量看板做着做着会变成“想到什么就加什么”:

  • 本周有人问覆盖率,就加覆盖率
  • 项目经理问缺陷趋势,就补缺陷趋势
  • 领导问发布质量,就再加上线事故数
  • 研发说想看回归效率,就又补一列执行耗时

这样堆下去的结果通常不是更全面,而是更混乱。

最常见的问题有三类:

1. 指标定义不统一

例如“缺陷修复率”这个指标,就经常出现至少三种算法:

  • 已关闭缺陷数 / 新增缺陷数
  • 已关闭缺陷数 / 当前总缺陷数
  • 计划周期内关闭缺陷数 / 计划周期内应关闭缺陷数

如果口径不统一,讨论本身就会失真。

2. 指标采集链路不稳定

例如“自动化通过率”如果有时取 Jenkins 构建结果,有时取测试平台任务结果,有时又把环境失败和脚本失败混在一起,那这个数字就没有横向比较价值。

3. 指标无法驱动动作

有些指标看起来很专业,但团队拿到之后并不知道下一步该做什么。

比如:

  • “本周一共执行了 1423 条用例”
  • “当前平台累计沉淀了 3874 条自动化脚本”

这类数字不是完全没用,但如果不能回答风险在哪、瓶颈在哪、应该改什么,那它们更像库存统计,不像质量度量。

所以质量指标体系的第一条原则不是“尽量全”,而是:

每加一个指标,都要先回答三个问题:定义是否统一、采集是否稳定、结果是否能驱动动作。

二、质量度量更适合拆成四层,不要把所有数字放在一个篮子里

如果从 0 到 1 建质量度量体系,更适合先按四层拆:

  1. 交付过程指标
  2. 测试执行指标
  3. 缺陷与风险指标
  4. 线上质量结果指标

这样做的好处是,团队可以区分:

  • 问题出在流程前面,还是后面
  • 风险停留在测试阶段,还是已经流到线上
  • 指标是在描述“忙不忙”,还是在描述“好不好”

1. 交付过程指标

这层回答的是:版本在进入测试和发布前,过程是否稳定。

更值得看的通常包括:

  • 提测准时率
  • 提测准入通过率
  • 构建成功率
  • 冒烟首轮通过率

2. 测试执行指标

这层回答的是:测试执行本身有没有形成有效覆盖和稳定回归。

更值得看的通常包括:

  • 核心回归通过率
  • 自动化稳定通过率
  • 阻塞问题发现时点
  • 关键链路覆盖率

3. 缺陷与风险指标

这层回答的是:问题主要集中在哪,风险有没有收敛。

更值得看的通常包括:

  • 阻塞缺陷数
  • 缺陷重开率
  • 缺陷逃逸率
  • 高频重复缺陷占比

4. 线上质量结果指标

这层回答的是:前面那套流程和测试动作,最后有没有转化成上线结果。

更值得看的通常包括:

  • 发布后 24 小时线上故障数
  • 回滚次数
  • 严重告警命中数
  • 线上问题平均恢复时长

这四层并不是越多越好。第一版更适合每层只选 2 到 4 个核心指标,先把口径和采集链路收稳,再考虑扩展。

三、真正值得长期看的质量指标,不需要很多,但必须定义清楚

如果只保留一套最小可用指标体系,更适合优先保留下面这些。

指标 定义口径 采集方式 动作价值 常见误判
提测准入通过率 通过准入校验的版本数 / 发起提测版本数 提测单系统或平台准入记录 判断交付准备是否稳定 把“未执行准入校验”的版本也算通过
冒烟首轮通过率 首轮冒烟一次通过的版本数 / 进入冒烟的版本数 测试平台任务结果 + 版本维度归并 判断版本基础可用性 把重跑成功也算首轮通过
阻塞缺陷数 当前周期内新发现且判定为阻塞的缺陷数 缺陷平台按严重级别和版本过滤 判断当前版本真实风险 把环境问题、重复单都混进去
缺陷重开率 重开缺陷数 / 已关闭缺陷数 缺陷平台状态流转统计 判断修复质量和验收质量 关闭口径不统一,导致分母失真
缺陷逃逸率 上线后发现的问题数 / 该版本总问题数 线上问题单 + 测试阶段缺陷关联 判断测试拦截能力 把运营咨询、配置误用都当线上缺陷
自动化稳定通过率 去除环境类失败后的稳定通过任务数 / 自动化任务总数 测试平台任务结果 + 失败原因分类 判断自动化是否真能托底回归 把手工重试后的结果直接覆盖原始结果
发布后 24 小时故障数 版本发布后 24 小时内确认与本次变更相关的故障数 事故平台、监控告警、值班复盘汇总 判断上线质量 把历史遗留、依赖波动也挂到本次版本上

上面这组指标有一个共同点:

它们都能直接对应动作。

例如:

  • 提测准入通过率持续低,就要回头治版本交付准备和提测门槛
  • 冒烟首轮通过率持续低,就要回头治发布前自检和环境一致性
  • 缺陷重开率高,就要回头治修复验收标准和复测链路
  • 自动化稳定通过率低,就要回头治环境治理、脚本分层和失败分类

如果一个指标长期存在,却总是无法映射到具体改进动作,那就需要怀疑它是否值得保留。

四、指标口径不清,采再多数据也没有意义

质量度量里最容易被低估的工作,不是展示,而是“定义”。

一个能长期使用的质量指标,至少要补齐下面五项定义:

1. 统计对象

到底按什么统计:

  • 按版本
  • 按需求
  • 按任务
  • 按缺陷
  • 按环境

如果统计对象模糊,后面所有同比、环比都会失真。

2. 统计周期

到底按什么时间段统计:

  • 自然周
  • 双周迭代
  • 版本周期
  • 上线后 24 小时 / 72 小时

一个典型错误是:缺陷新增按周看,线上问题按版本看,自动化通过率按日看,然后把这些数字放在同一张周报里直接比较。

3. 计入条件

什么算进来,什么不算进来,必须先定义。

例如“阻塞缺陷数”至少要写清:

  • 是否包含重复单
  • 是否包含环境问题
  • 是否包含上线前已转非阻塞的问题
  • 是否包含已确认不是本次变更引入的问题

4. 数据来源

每个指标都要明确主数据源,不要多源混采。

例如:

  • 提测准入通过率以提测平台为准
  • 缺陷重开率以缺陷系统状态流转为准
  • 自动化稳定通过率以测试平台执行记录为准
  • 线上故障数以事故复盘结论为准

5. 解释规则

同一个数字,在什么情况下算正常,在什么情况下要触发动作,也要提前写清。

例如:

  • 冒烟首轮通过率低于 85%,需要专项回看提测前校验动作
  • 缺陷重开率高于 15%,需要抽样检查关闭标准和复测链路
  • 自动化稳定通过率连续两周低于 90%,需要拆环境失败和脚本失败做专项治理

没有解释规则的指标,很容易变成“只汇报,不动作”。

五、采集方式要优先选“稳定且可复现”,不要靠手工拼表

的质量度量之所以越做越累,不是指标太复杂,而是采集方式太脆。

最常见的脆弱做法包括:

  • 每周手工从多个系统导出 Excel 再合并
  • 群里数故障、数缺陷、数发布次数
  • 测试自己维护一份统计表,研发又维护另一份
  • 缺少唯一版本号,导致平台数据和缺陷数据无法关联

这类方式短期能跑,长期一定会出问题:

  • 统计口径悄悄漂移
  • 出数时间越来越长
  • 同一个数字每周都要解释
  • 一旦负责统计的人不在,整张报表就断了

更实用的采集方式通常分三步。

1. 先统一唯一关联键

质量数据要能串起来,至少要统一这些关键字段:

  • 版本号 / 构建号
  • 提测单号
  • 缺陷关联版本
  • 自动化任务批次号
  • 发布批次号

没有这些关联键,后面做版本维度分析几乎都得靠人工拼。

2. 再固定主数据源

更常见的主数据源组合是:

  • 提测数据:提测单系统、测试平台准入记录
  • 测试执行数据:测试平台、Jenkins、任务中心
  • 缺陷数据:缺陷管理系统
  • 发布与事故数据:发布系统、监控平台、事故复盘记录

固定主源的目的不是排斥其它信息,而是避免一个指标同时从两套系统取值。

3. 最后再做口径转换和聚合

反过来做,先画报表,再回头想数字从哪来,这样最容易出现字段定义混乱。

更稳的方式是先落一张指标定义表。

指标 主数据源 关联键 聚合维度 更新时间
提测准入通过率 提测平台 提测单号、版本号 版本 / 周 每次提测完成后
冒烟首轮通过率 测试平台 版本号、任务批次号 版本 / 周 每次冒烟完成后
缺陷重开率 缺陷系统 缺陷单号、版本号 版本 / 月 每日同步
自动化稳定通过率 测试平台 任务批次号 任务类型 / 周 每次任务结束后
线上故障数 事故复盘系统 发布批次号、版本号 版本 / 月 事故关闭后

有了这张表,后面的对账、排查和系统改造会轻很多。

六、最容易让数据“好看但没用”的,是下面这些误区

1. 只看总量,不看结构

例如“本月新增缺陷 120 个”这个数字本身信息量很低。

更值得看的是:

  • 哪些版本贡献了大头
  • 哪些模块集中爆发
  • 哪些问题属于阻塞
  • 哪些是重复性问题

总量只能说明热闹,结构才能说明问题。

2. 只看通过率,不看失败分类

自动化通过率 92% 看起来不错,但如果剩下的 8% 里有 5% 是环境失败、2% 是数据准备失败、1% 才是真业务失败,那动作方向就完全不同。

所以很多“通过率”指标必须同时配一列失败分类占比。

3. 只看缺陷数,不看发现时点

缺陷数下降并不一定说明质量变好,也可能只是:

  • 需求评审漏拦风险
  • 测试设计变浅
  • 提单门槛提高
  • 一部分问题直接流到线上

更有动作价值的补充指标通常是:

  • 阻塞缺陷在需求阶段、联调阶段、提测阶段、上线后的分布

这样才能看出风险到底前移了还是后移了。

4. 只看覆盖率,不看关键链路

很多自动化覆盖率指标之所以失真,是因为把低价值脚本也一起算进去了。

一个更有意义的问题是:

关键交易链路、高频主流程、高风险权限动作是否被稳定覆盖。

如果关键链路覆盖不够,80% 的总体覆盖率也可能没有托底能力。

5. 用单一数字评价团队质量

质量度量最危险的做法之一,是把一个指标直接变成团队好坏的唯一标签。

例如只看:

  • 线上问题数
  • 测试用例数
  • 缺陷数

这种做法很容易逼出错误行为:

  • 为了少线上问题,延迟发布
  • 为了提高用例数,拆出大量低价值用例
  • 为了降低缺陷数,减少提单或合并问题

指标一旦和激励机制直接绑定,就更需要防止“为了指标而优化行为”。

七、真实案例:通过率很好看,但版本还是连续出问题,最后卡点不在测试执行

下面这类情况,在版本节奏快的团队里很常见。

场景

某业务线连续三个版本的自动化回归通过率都在 95% 以上,周报看起来很稳定,但每次发布后的 24 小时内都能收到 1 到 2 个线上高优先级问题。最初的判断是自动化覆盖还不够,需要继续补脚本。

执行

先把最近三个版本的关键指标拉到同一个版本维度里对照:

  • 提测准入通过率
  • 冒烟首轮通过率
  • 自动化稳定通过率
  • 阻塞缺陷数
  • 发布后 24 小时故障数

同时把自动化失败任务按原因重新分类,拆成:

  • 环境类失败
  • 数据类失败
  • 脚本类失败
  • 业务缺陷类失败

再把线上故障按来源回溯到对应版本的提测记录和变更模块。

现象

对照之后出现了两个异常点:

  • 自动化总体通过率高,但关键链路覆盖率只有 52%
  • 冒烟首轮通过率只有 68%,大量版本在首轮冒烟失败后通过重跑进入“通过”状态

也就是说,看起来漂亮的自动化通过率,掩盖了两个事实:

  • 回归托底的主要是低波动脚本
  • 很多版本在正式进入回归之前,基础可用状态就不稳定

排查

继续往下查三个方向:

  1. 首轮冒烟失败原因
    发现大量失败集中在配置中心未刷新、依赖服务未完全启动、测试数据版本不一致。

  2. 自动化覆盖对象
    发现大部分自动化脚本覆盖的是常规查询、列表和只读页面,真正高风险的交易链路、权限分支、异步状态流转覆盖不足。

  3. 线上问题来源
    发现线上故障大多不是“脚本没执行”,而是“关键链路没被纳入稳定回归”和“版本交付准备不充分”。

修复

后续没有继续盲目追总体覆盖率,而是做了三件更有效的事:

  • 把自动化指标拆成“总体通过率”和“关键链路稳定通过率”两列
  • 把冒烟首轮通过率从周报次级指标提升为发布前必看指标
  • 在提测准入层增加配置校验、依赖探活、测试数据版本检查

两次版本之后,虽然总体自动化通过率从 95% 降到了 89%,但指标解释反而更准确,发布后 24 小时故障数明显下降。这个变化说明:

质量度量的价值,不是让数字更好看,而是让风险更早暴露,让动作更准确。

八、第一版质量度量体系,先做到“少而准”,不要一开始就铺满

如果现在要落第一版质量度量,更适合先做下面这套最小骨架:

  1. 先选 6 到 8 个能驱动动作的核心指标
  2. 给每个指标补齐口径定义、主数据源、统计周期、解释规则
  3. 保证版本号、提测单号、任务批次号、缺陷单号这些关联键可追溯
  4. 每个指标都能回答“异常时下一步找谁、查什么、改什么”
  5. 周期性淘汰没有动作价值、没有解释一致性的指标

质量度量体系做得成熟与否,不取决于报表有多少页,而取决于:

  • 指标是否统一
  • 采集是否稳定
  • 解释是否一致
  • 异常是否能触发动作

只有满足这四点,质量数字才不会停留在汇报层,而会真正进入治理层。