重复缺陷识别需要三类依据:缺陷描述中的可复现事实、可对照的痕迹证据,以及缺陷库中的历史记录。判定时先检索比对,再按“现象一致、触发条件一致、根因指向一致”逐项核对,三项都成立才合并为重复;仅现象相似时标注疑似重复并挂关联,交由缺陷责任人确认。以下给出依据分类、操作步骤、角色分工、完整示例与完成检查。
要点总览(TL;DR)
- 重复缺陷识别需要三类依据:可复现事实(复现步骤、环境版本、实际与预期结果)、痕迹证据(日志、堆栈、截图录屏、请求响应、数据条件)、库内记录(历史缺陷、关联需求、已知问题)。
- 判定成立采用三项核对:现象一致、触发条件一致、根因指向一致;三项全中才合并为重复,仅现象相似时标注疑似重复并挂关联,由缺陷责任人确认。
- 操作顺序为受理检索、逐项比对、判定处置、合并通知、升级处理,每步留下检索记录与比对记录,判定过程随缺陷单留存。
- 角色分工上,报告人提供事实与痕迹,受理人做检索与初步比对,模块负责人或缺陷责任人确认根因并决定合并或拆分。
- 判定完成后按清单核对依据完整性、比对记录、信息保留、报告人通知与疑似重复跟踪,误合并与漏合并分开统计复盘。
判定重复缺陷的三类依据
重复缺陷判定容易陷入两种偏差:凭标题相似就合并,或凭印象认为“见过类似问题”而挂起。要减少这类偏差,需要把依据分成事实、痕迹、库内记录三层,每层承担不同的证明任务,并明确它单独使用时能证明到什么程度。
事实类依据回答“问题是什么、在什么条件下出现”。复现步骤要写到可被他人照做的粒度,环境与版本要具体到构建号或配置项,实际结果与预期结果要分开写清。这类依据能证明现象存在且可复现,但无法证明两个缺陷由同一原因引起。
痕迹类依据回答“系统内部发生了什么”。错误日志、堆栈、截图录屏、请求响应报文、触发问题所需的数据条件,都属于这一类。日志与堆栈能支撑技术层面的比对,截图录屏适合界面类问题,请求响应与数据条件适合接口和数据处理类问题。痕迹证据能提高根因比对的可靠性,但缺少库内对照对象时,仍无法单独得出“重复”的结论。
库内依据回答“以前是否有人报过、当时怎么处理”。历史缺陷单、关联需求、已知问题记录与发布说明,提供了对照对象。检索结果能证明存在相似记录,但历史单本身也可能描述不全,需要回到事实与痕迹层面逐项比对,不能仅凭标题或模块相同就认定重复。
| 依据类别 | 具体内容 | 能证明什么 | 不能单独证明什么 | 采集人 |
|---|---|---|---|---|
| 事实类 | 复现步骤、环境与版本、实际结果与预期结果 | 现象真实存在且可复现 | 两个缺陷根因相同 | |
| 痕迹类 | 错误日志、堆栈、截图录屏、请求响应、数据条件 | 故障发生位置与技术特征 | 库内是否已有同问题记录 | |
| 库内依据 | 历史缺陷单、关联需求、已知问题、发布说明 | 存在可对照的既往记录 | 记录与当前缺陷完全同一 |
从受理到判定的操作步骤
判定流程的目标是让每一次“重复”结论都有检索记录和比对记录可查。以下五步按顺序执行,每步都有明确的输入、动作、输出与完成标志。
| 步骤 | 输入 | 动作 | 输出 | 完成标志 | 负责人 |
|---|---|---|---|---|---|
| 1. 受理检索 | 新提交缺陷单 | 提取模块、关键词、版本、错误特征,在缺陷库中检索,记录检索词与命中结果 | 检索记录(检索词、范围、命中单号) | 检索记录已附在缺陷单中 | |
| 2. 逐项比对 | 检索记录、候选历史单 | 按现象、触发条件、根因指向三项逐项比对,写明一致项与差异项 | 比对记录 | 三项均有明确结论 | |
| 3. 判定处置 | 比对记录 | 三项全中判重复并合并;部分命中标疑似重复并挂关联 | 判定结论与处置动作 | 缺陷单状态与关联关系已更新 | |
| 4. 合并与通知 | 判定结论 | 合并时保留原单信息、补充差异说明、通知报告人 | 合并记录与通知记录 | 报告人已收到处理说明 | |
| 5. 升级处理 | 无法判定的缺陷单 | 提交模块负责人或缺陷责任人裁定,设定答复时限 | 裁定结论 | 在约定时限内给出合并、挂关联或独立的结论 |
第1步的检索范围要覆盖当前项目与相关历史项目,检索词至少包含模块名、报错关键词和版本号三类,避免只用标题检索造成漏检。第2步的三项比对中,现象一致看实际结果是否相同,触发条件一致看操作路径、环境、数据条件是否吻合,根因指向一致看日志、堆栈或代码路径是否指向同一处。三项全中才合并;只有现象相似、触发条件或根因无法确认时,标注疑似重复并挂关联,保留独立跟踪,等责任人确认后再决定合并或拆分。
第5步的时限建议由团队在缺陷管理规范中约定,例如一个工作日内给出初步结论。时限本身不是判定依据,但能防止疑似重复长期悬空。缺陷受理、检索比对、关联与判定记录需要在工作项中承载时,可以在缺陷工作项上记录检索词、候选单号、比对结论和处置动作,让判定过程随缺陷单一起留存;ONES Project 支持缺陷跟踪与质量统计,可一键提交 Bug 至对应项目或迭代,并记录和跟踪缺陷修复情况,适合承载这类受理与判定记录。
角色分工与各环节交付物
重复缺陷判定悬空的常见原因是“谁都能看,但没人负责下结论”。把收集、比对、确认三类动作分到具体角色,并为每个角色规定交付物,判定才有落点。
| 角色 | 动作 | 交付物 |
|---|---|---|
| 缺陷报告人 | 提交可复现事实与痕迹证据,补充缺失信息 | 完整的缺陷描述、日志或截图、复现环境 |
| 受理人/分诊人 | 执行检索与初步比对,给出初步判定 | 检索记录、比对记录、初步结论 |
| 模块负责人或缺陷责任人 | 确认根因指向,决定合并、挂关联或拆分 | 最终判定结论与理由 |
| 测试人员 | 在疑似重复阶段补充复现条件与差异说明 | 补充复现记录、差异点说明 |
| 开发人员 | 从日志、堆栈、代码路径判断根因是否同一 | 根因判断意见 |
测试与开发在疑似重复上的协作方式是:测试负责把现象和触发条件对齐,开发负责判断技术根因是否同一,两边结论都写入比对记录,由模块负责人做最终确认。判定记录作为可追溯交付物留存,内容包括检索词、候选单号、三项比对结论、处置动作和确认人。记录随缺陷单保存,后续复盘误判时可以直接调取。
判定记录需要与缺陷单一起被检索和追溯时,可以借助工作项与文档的关联方式承载:ONES Project 的缺陷跟踪管理与 TestCase 数据互通,支持一键提 Bug;ONES Wiki 支持文档关联任务,并支持插入 ONES Project 的工作项列表,适合把判定规范、检索记录与缺陷单放在同一协作上下文中查阅。
示例:一条缺陷如何被判为重复
以下为演示情景,用于说明依据收集与比对过程,不对应真实项目数据。
某版本提交一条缺陷,标题为“订单列表页翻页后数据重复”,描述只有一句“翻到第二页出现重复订单”,缺少环境、版本、复现步骤和日志。受理人先做检索,用“订单列表”“翻页”“重复”三个关键词检索,命中三条历史单,其中两条属于其他模块,一条属于同一模块的上一版本。
受理人要求报告人补充信息。报告人补充:环境为测试环境,版本为当前迭代构建,复现步骤为进入订单列表、点击下一页、观察首行数据;实际结果为第二页首行与第一页末行相同,预期结果为两页数据不重叠;附带了浏览器控制台截图和接口响应片段。痕迹证据显示分页参数在第二页请求中未正确递增。
受理人将当前缺陷与同模块历史单逐项比对:现象一致,都是翻页后出现重复行;触发条件一致,都是第二页请求、相同分页参数;根因指向一致,历史单的接口响应片段显示同一处分页参数问题,且该问题在上一版本已记录、尚未修复。三项全部成立,判定为重复。
处置时把当前缺陷合并到历史单,保留原报告人信息和补充的截图、响应片段,在历史单中补充“当前版本仍可复现”的差异说明,并通知报告人处理结果。这个示例的可迁移规律是:检索先行、缺失信息回补、三项逐项比对、合并时保留原单信息并通知报告人。
判定质量的完成检查
判定完成后,用一张检查清单逐项核对,可以把误合并和漏合并挡在流程内。检查项与通过标准如下。
| 检查项 | 通过标准 | 证据 | 负责人 |
|---|---|---|---|
| 依据完整性 | 事实、痕迹、库内检索三类依据齐全,缺失项有说明 | 缺陷单附件与检索记录 | 受理人 |
| 比对记录 | 写明一致项与差异项,三项均有结论 | 比对记录 | 受理人 |
| 合并信息保留 | 原单信息、报告人、补充证据均已保留 | 合并后的缺陷单 | 模块负责人 |
| 报告人通知 | 报告人已收到处理说明与后续跟踪方式 | 通知记录 | 受理人 |
| 疑似重复跟踪 | 挂关联的疑似单有责任人和关闭条件,未长期悬空 | 关联关系与跟踪记录 | 缺陷责任人 |
| 误判复盘 | 误合并与漏合并分开统计,分别定位原因 | 复盘记录 | 质量负责人 |
疑似重复的关闭条件建议写清:责任人确认根因同一则合并,确认不同则拆分并保留关联说明,超过约定时限未确认则升级处理。误判复盘时把误合并与漏合并分开统计,误合并多说明比对过松或检索范围过窄,漏合并多说明检索词覆盖不足或依据收集不全,两类问题的改进动作不同,混在一起统计会掩盖真实原因。
常见问题
缺陷描述信息不全时,还能先做重复判定吗?
可以先做检索,但不宜直接下重复结论。受理人可先用模块、关键词、版本检索缺陷库,把命中的候选单记录下来,同时向报告人回补复现步骤、环境版本、实际与预期结果以及日志或截图。候选单与当前缺陷在现象上相似、触发条件或根因指向无法确认时,标注疑似重复并挂关联,保留独立跟踪,等补充信息到位或责任人确认后再决定合并或拆分。
三项核对中根因指向无法确认,应该合并还是挂关联?
三项核对要求现象、触发条件、根因指向都成立才合并。根因指向无法确认时,按疑似重复处理:挂关联、保留独立跟踪,并请开发人员从日志、堆栈或代码路径给出根因判断意见,由模块负责人或缺陷责任人做最终确认。这样既避免误合并丢失独立信息,也避免疑似单长期悬空。
合并重复缺陷后,原报告人的信息和补充证据怎么处理?
合并时把原单信息、报告人、补充的截图与响应片段保留到目标缺陷单中,并补充差异说明,例如当前版本仍可复现或触发条件略有不同。随后通知报告人处理结果与后续跟踪方式,让报告人知道问题已并入哪条缺陷、由谁跟进。这一步是判定记录可追溯的一部分,也避免沟通断点。
疑似重复的缺陷单什么时候可以关闭?
建议在缺陷管理规范中写清关闭条件:责任人确认根因同一则合并到目标单;确认根因不同则拆分并保留关联说明;超过约定时限未确认则升级处理。疑似单应明确责任人和关闭条件,避免长期挂在关联关系里无人跟进。时限本身不是判定依据,作用是防止判定悬空。
误合并和漏合并为什么要分开统计?
两类误判的原因不同,改进动作也不同。误合并多来自比对过松或检索范围过窄,需要收紧三项核对、扩大检索范围;漏合并多来自检索词覆盖不足或依据收集不全,需要补充检索词类别、要求报告人补齐事实与痕迹证据。混在一起统计会掩盖真实原因,分开统计才能定位到具体环节。
