判断缺陷修复进展是否健康,需要同时观察四类信号:存量与流入流出是否平衡、修复时效是否在约定时限内、修复后验证是否及时闭环、重开与积压结构是否恶化。做法是先固定统计口径,再用趋势和分层数据交叉判断,最后结合版本节奏与严重级别解读,避免用单一指标下结论。本文的评估范围是缺陷从确认到验证关闭这一段。
要点总览(TL;DR)
- 判断缺陷修复是否健康,要同时看四类信号:存量与流入流出是否平衡、修复时效是否可控、验证是否及时闭环、重开与积压结构是否恶化。
- 每个比率指标都要写清公式、分子分母、时间窗和缺失值规则;分母为零或样本过少时记为不适用,不用 0 替代。
- 评估按取数清洗、算存量与流动、算时效、看结构与趋势、交叉判断五步推进,多个信号一致才下结论。
- 示例中重开率 12%、净流入 20 个、修复时长中位数 2 天而 90 分位 9 天,说明存量上升叠加长尾,需按严重级别拆分定位堵点。
- 指标反映流程状态,不能直接归因于个人或团队能力;跨团队比较前先对齐严重级别定义和状态机。
评估目标:健康指的是什么
“健康”在缺陷修复语境下可以拆成三层含义,每一层回答不同的问题,也需要不同的数据支撑。把这三层分开评估,比笼统地问“修复得快不快”更能定位问题。
- 流动是否通畅:新发现的缺陷与已关闭的缺陷是否大致平衡,未关闭存量是在收敛还是在持续膨胀。这一层回答“团队是在追赶还是在被淹没”。
- 时效是否可控:从缺陷确认到修复完成、从修复完成到验证关闭,各花了多长时间,长尾有多长。这一层回答“处理速度是否匹配版本节奏”。
- 闭环是否真实:修复后是否经过验证才关闭,关闭后是否频繁被重开。这一层回答“关闭动作是否可信”。
评估对象限定为缺陷从确认进入流程,到修复、验证、关闭的完整段落。变更后的整体回归测试如何组织、代码层面如何修复,属于另外的管理与技术话题,不在本文展开。评估结论的用途主要有三个:提前发现积压风险、为版本能否发布提供依据、定位流程中的具体堵点(例如修复快但验证排队久)。
指标与范围:看哪些数、统计谁
常用指标可以归为存量、流动、时效、结构四类。每类指标回答的问题不同,单独看任何一类都容易得出片面结论。下表给出指标集合及其用途。
| 维度 | 指标 | 回答的问题 |
|---|---|---|
| 存量 | 未关闭缺陷数;按严重级别、按状态的分布 | 当前还有多少待处理,集中在哪些级别和环节 |
| 流动 | 新增数、修复数、验证关闭数、重开数 | 流入与流出是否平衡,关闭是否真实 |
| 时效 | 平均修复时长、修复周期分位数、验证等待时长 | 处理速度是否可控,长尾有多长 |
| 结构 | 重开率、积压账龄分布、超期未处理占比 | 积压是否在老化,闭环质量是否下降 |
统计范围需要在评估开始前明确写下来:纳入哪些项目或产品线、覆盖哪些严重级别(通常建议至少单独统计致命与严重级别)、是否包含已延期和挂起状态的缺陷。挂起缺陷如果混入存量,会让积压看起来比实际严重;如果完全剔除,又可能掩盖真实风险。常见做法是单列挂起数量,存量指标同时给出“含挂起”和“不含挂起”两个口径。
可视化方面,存量与流动适合用按周的趋势折线或堆叠柱状图,直观看出流入流出缺口;时效适合用分位数趋势或分布图,避免平均值掩盖长尾;账龄分布适合用分桶柱状图,例如按 1 天内、1 至 3 天、3 至 7 天、7 天以上分桶。图表的作用是让趋势可见,判断仍要回到口径和数据本身。
数据口径:公式、分母与时间窗
指标能否被复算和比较,取决于口径是否写清楚。每个比率类指标至少要写明公式、分子、分母、时间窗和单位,并约定缺失值规则。
| 指标 | 公式 | 分母与时间窗 | 缺失值规则 |
|---|---|---|---|
| 重开率 | 统计期内重开缺陷数 ÷ 同期关闭缺陷数 × 100% | 分母为关闭数,按周或按版本统计 | 无关闭记录时记为“不适用”,不记 0 |
| 净流入 | 统计期内新增数 − 同期关闭数 | 按周或按版本,单位为个 | 数据缺失时标注缺口,不按 0 处理 |
| 修复时长 | 修复完成时间 − 确认时间 | 按缺陷逐条计算后取中位数与 90 分位 | 未修复缺陷不纳入,单独报告在途数量 |
| 验证等待时长 | 验证关闭时间 − 修复完成时间 | 仅统计已进入验证环节的缺陷 | 未验证缺陷不纳入,单独报告待验证数量 |
| 超期未处理占比 | 超过约定时限仍未处理的缺陷数 ÷ 期末未关闭缺陷数 × 100% | 时限由团队按严重级别约定,期末快照 | 分母为零时记为“不适用” |
时间窗的起止时点要与缺陷进入统计的状态节点对齐。例如按周统计时,明确以缺陷“确认”状态的时间戳作为进入时点,以“关闭”状态的时间戳作为退出时点,避免用创建时间代替确认时间造成口径漂移。重开率的分母尤其容易混淆:用关闭数作分母衡量的是“关闭动作中有多少被推翻”,用修复数作分母衡量的则是“修复成果中有多少不合格”,两者含义不同,选定后应在报告中固定并注明。
跨项目或跨团队比较前,先对齐严重级别定义和状态机。不同团队对“严重”的判定标准、缺陷录入的颗粒度、状态流转的环节数量都可能不同,直接横向比较重开率或修复时长会失真。可行的做法是先在同一团队内部看趋势,跨团队比较时只比同级别、同口径的指标,并说明差异来源。
计算与评估步骤:从取数到判断
评估按五步推进,每一步都有明确的输入、动作和输出判断,前一步的输出是后一步的输入。
- 取数与清洗:按既定口径导出缺陷状态流转记录,剔除测试数据、重复单和明显误录的记录。输出一份可用于计算的缺陷明细,字段至少包含严重级别、确认时间、修复完成时间、验证关闭时间、重开次数和当前状态。
- 算存量与流动:统计期初存量、期内新增、期内关闭、期末存量,计算净流入。判断标准是看存量是否持续上升、上升速度是否在加快。存量小幅波动属于正常,连续多个周期单边上升则需要警惕。
- 算时效:分别计算修复时长和验证等待时长的中位数与 90 分位。中位数反映典型情况,90 分位反映长尾。两者差距明显拉大时,说明少数缺陷处理严重滞后,需要按严重级别和模块拆分定位。
- 看结构与趋势:计算重开率、账龄分布和超期未处理占比,与上一周期或上一版本对比。重开率上升、账龄向长区间迁移、超期占比扩大,都是结构恶化的信号。
- 交叉判断:多个信号指向同一方向时才下结论。例如存量上升、长尾拉长、重开率同时上升,可以判断修复与验证环节存在系统性堵点;若只有单个指标异常,先核查口径和数据质量,再决定是否调整判断。
这套流程可以在缺陷管理工具中承载。以 ONES 为例,ONES 测试管理解决方案覆盖缺陷的全生命周期管理,缺陷可关联至迭代,便于按版本周期取数;ONES Project 支持一键提交 Bug 至对应项目或迭代,并统计缺陷状态分布,配合多种图表形态和自定义数据范围、维度呈现趋势。评估所需的明细数据从状态流转记录中导出后,仍按上述口径自行计算,工具提供的是数据来源和可视化基础,指标定义与判断标准由团队约定。
例子:一个版本周期的健康判断
以下为演示情景,数据仅用于说明计算过程,不代表任何真实团队或产品的达标线。
设定某版本周期内:期初未关闭缺陷 40 个,期内新增 120 个,期内关闭 100 个,其中重开 12 个,期末未关闭 60 个。修复时长中位数 2 天,90 分位 9 天。
- 重开率:12 ÷ 100 × 100% = 12%,即每 100 个关闭的缺陷中有 12 个被重新打开。
- 净流入:120 − 100 = 20 个,期末存量 60 个,相比期初 40 个上升 20 个,与净流入一致。
- 时效:中位数 2 天说明多数缺陷处理较快,90 分位 9 天说明约一成缺陷的修复时长达到 9 天以上,长尾明显。
综合解读:存量单边上升叠加修复长尾,提示处理能力跟不上流入速度,或高优先级缺陷在修复环节排队。此时应进一步按严重级别拆分:如果长尾集中在致命与严重级别,问题在修复优先级安排;如果长尾集中在低级别,可能是资源被高优先级占满后的正常取舍,需要结合版本目标判断是否可接受。重开率 12% 是否偏高,取决于团队历史水平和缺陷录入粒度,应与前几个版本的趋势对比后再下结论,不宜套用统一阈值。
解读与限制:指标说明什么、不说明什么
指标反映的是流程状态,不能直接归因于个人或团队能力。修复时长长,可能是缺陷本身复杂、依赖外部条件,也可能是排期优先级低;重开率高,可能是修复质量问题,也可能是验证标准变严或需求在修复期间发生变更。把指标当作绩效结论之前,先回到具体缺陷记录中看原因。
样本过少时比率不稳定。一个周期只关闭了 5 个缺陷,重开 1 个就是 20%,这个数字的参考价值有限。此时应看绝对数,或延长统计窗口到多个周期合并计算。分母为零时比率记为“不适用”,不要用 0 替代,否则趋势图上会出现虚假的“改善”。
版本节奏和需求变更会显著影响缺陷流入。临近发布时集中提测、需求范围扩大,都会推高新增数,此时存量上升未必是流程恶化。解读时需要把指标放回版本上下文,说明当期是否有特殊事件。健康判断应定期复算并对比趋势,单次快照只能说明当下状态,连续多个周期的走向才更能支撑“健康”或“不健康”的判断。
常见问题
缺陷修复健康度有没有通用的达标线,比如重开率不能超过多少?
没有适用于所有团队的统一阈值。重开率、修复时长上限这类数值与业务类型、缺陷录入粒度、验证标准松紧直接相关,套用外部数字容易得出错误结论。更稳妥的做法是用团队自身的历史数据建立基线,看当前周期相对前几个版本是改善还是恶化,再结合版本目标判断是否可接受。如果一定要设内部参考线,应由团队根据过往数据约定,并注明适用条件和统计口径。
存量在上升,但团队说最近需求变更很多,这种情况算不算不健康?
需要结合上下文判断。需求范围扩大、临近发布集中提测,都会推高新增缺陷数,此时存量上升可能只是短期波动。判断时可以看两点:一是新增缺陷是否集中在特定模块或新功能,二是存量上升的同时修复时效和重开率是否同步恶化。如果只是流入增加而处理速度和闭环质量保持稳定,更可能是节奏问题;如果多个信号同时变差,则提示流程存在堵点。
缺陷挂起或延期后,统计存量时应该算进去吗?
建议单列挂起数量,存量指标同时给出“含挂起”和“不含挂起”两个口径。挂起缺陷混入存量会让积压看起来比实际严重,完全剔除又可能掩盖真实风险。延期缺陷同理,需要明确它是否仍计入超期未处理占比。口径一旦确定,应在报告中固定并注明,避免不同周期之间因统计范围变化导致趋势失真。
修复时长中位数看起来正常,但 90 分位很高,应该先查什么?
先按严重级别和模块拆分长尾缺陷,看滞后集中在哪一类。如果长尾集中在致命与严重级别,问题多半出在修复优先级安排或依赖阻塞;如果集中在低级别,可能是资源被高优先级占满后的正常取舍,需要结合版本目标判断。同时核对验证等待时长,区分是修复慢还是修复完成后排队等验证。拆分之后再回到具体缺陷记录看原因,比直接调整整体排期更有针对性。
用缺陷管理工具能直接算出这些健康度指标吗?
工具通常提供缺陷状态流转记录、状态分布统计和图表展示,可以作为取数和可视化的基础。以 ONES 为例,ONES 测试管理解决方案覆盖缺陷的全生命周期管理,缺陷可关联至迭代,便于按版本周期取数;ONES Project 支持一键提交 Bug 至对应项目或迭代,并统计缺陷状态分布,配合多种图表形态和自定义数据范围、维度呈现趋势。重开率、净流入、分位数时长这些指标的具体公式和分母仍需团队按本文口径自行计算,工具不替代指标定义。
