质量工程-05-质量度量体系的指标口径、采集方式和误区
一提到质量度量,第一反应就是做一张大盘:
- 缺陷数
- 用例数
- 自动化通过率
- 冒烟通过率
- 发布次数
- 线上故障数
数字看起来很多,周报也能写满,但真正到了版本决策、问题复盘和流程改进时,常见情况却是:
- 指标不少,但没人知道哪些真的重要
- 同一个指标,测试、研发、项目经理看的数字都不一样
- 通过率很好看,版本还是频繁出问题
- 缺陷数在下降,但只是因为提单门槛越来越高
- 自动化覆盖率很高,关键链路仍然经常漏回归
这说明一个更根本的问题:
质量度量最难的部分,不是做图表,而是先把指标口径、采集方式和动作价值收稳。
这篇文章不讲空泛的“数据驱动质量”,只讲四个更实的问题:
- 质量指标为什么不能乱堆
- 哪些指标更值得长期看
- 每个指标的口径和采集方式怎么定义
- 怎么避免数字看起来漂亮,但对团队没有动作价值
一、质量指标最怕的,不是没有,而是失控
很多质量看板做着做着会变成“想到什么就加什么”:
- 本周有人问覆盖率,就加覆盖率
- 项目经理问缺陷趋势,就补缺陷趋势
- 领导问发布质量,就再加上线事故数
- 研发说想看回归效率,就又补一列执行耗时
这样堆下去的结果通常不是更全面,而是更混乱。
最常见的问题有三类:
1. 指标定义不统一
例如“缺陷修复率”这个指标,就经常出现至少三种算法:
- 已关闭缺陷数 / 新增缺陷数
- 已关闭缺陷数 / 当前总缺陷数
- 计划周期内关闭缺陷数 / 计划周期内应关闭缺陷数
如果口径不统一,讨论本身就会失真。
2. 指标采集链路不稳定
例如“自动化通过率”如果有时取 Jenkins 构建结果,有时取测试平台任务结果,有时又把环境失败和脚本失败混在一起,那这个数字就没有横向比较价值。
3. 指标无法驱动动作
有些指标看起来很专业,但团队拿到之后并不知道下一步该做什么。
比如:
- “本周一共执行了 1423 条用例”
- “当前平台累计沉淀了 3874 条自动化脚本”
这类数字不是完全没用,但如果不能回答风险在哪、瓶颈在哪、应该改什么,那它们更像库存统计,不像质量度量。
所以质量指标体系的第一条原则不是“尽量全”,而是:
每加一个指标,都要先回答三个问题:定义是否统一、采集是否稳定、结果是否能驱动动作。
二、质量度量更适合拆成四层,不要把所有数字放在一个篮子里
如果从 0 到 1 建质量度量体系,更适合先按四层拆:
- 交付过程指标
- 测试执行指标
- 缺陷与风险指标
- 线上质量结果指标
这样做的好处是,团队可以区分:
- 问题出在流程前面,还是后面
- 风险停留在测试阶段,还是已经流到线上
- 指标是在描述“忙不忙”,还是在描述“好不好”
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%,大量版本在首轮冒烟失败后通过重跑进入“通过”状态
也就是说,看起来漂亮的自动化通过率,掩盖了两个事实:
- 回归托底的主要是低波动脚本
- 很多版本在正式进入回归之前,基础可用状态就不稳定
排查
继续往下查三个方向:
首轮冒烟失败原因
发现大量失败集中在配置中心未刷新、依赖服务未完全启动、测试数据版本不一致。自动化覆盖对象
发现大部分自动化脚本覆盖的是常规查询、列表和只读页面,真正高风险的交易链路、权限分支、异步状态流转覆盖不足。线上问题来源
发现线上故障大多不是“脚本没执行”,而是“关键链路没被纳入稳定回归”和“版本交付准备不充分”。
修复
后续没有继续盲目追总体覆盖率,而是做了三件更有效的事:
- 把自动化指标拆成“总体通过率”和“关键链路稳定通过率”两列
- 把冒烟首轮通过率从周报次级指标提升为发布前必看指标
- 在提测准入层增加配置校验、依赖探活、测试数据版本检查
两次版本之后,虽然总体自动化通过率从 95% 降到了 89%,但指标解释反而更准确,发布后 24 小时故障数明显下降。这个变化说明:
质量度量的价值,不是让数字更好看,而是让风险更早暴露,让动作更准确。
八、第一版质量度量体系,先做到“少而准”,不要一开始就铺满
如果现在要落第一版质量度量,更适合先做下面这套最小骨架:
- 先选 6 到 8 个能驱动动作的核心指标
- 给每个指标补齐口径定义、主数据源、统计周期、解释规则
- 保证版本号、提测单号、任务批次号、缺陷单号这些关联键可追溯
- 每个指标都能回答“异常时下一步找谁、查什么、改什么”
- 周期性淘汰没有动作价值、没有解释一致性的指标
质量度量体系做得成熟与否,不取决于报表有多少页,而取决于:
- 指标是否统一
- 采集是否稳定
- 解释是否一致
- 异常是否能触发动作
只有满足这四点,质量数字才不会停留在汇报层,而会真正进入治理层。