回归范围确定规则要解决的是:每次变更发生后,哪些既有功能必须重新验证、验证到什么深度。有效的做法是把变更影响面转成可判定的分级验证清单——先定义变更分类与影响维度,再圈定受影响功能与接口,用风险分级决定验证深度,最后以准入准出条件、责任人和证据记录固化到变更流程。本文聚焦规则本身的制定与运行,测试策略与计划制定、单缺陷复测跟踪不在讨论范围内。
要点总览(TL;DR)
- 回归范围规则的核心是把变更影响面转成可判定的分级验证清单,判定链路为:变更分类→影响维度→风险分级→验证深度。
- 先建两张输入表:变更分类表(需求新增、逻辑修改、配置调整、依赖升级、数据模型变更)和六类影响维度对照表,让每次判定有共同起点。
- 圈定范围时沿需求、代码、配置三条路径追溯,并向上向下各查一层依赖,候选回归项必须写明来源依据。
- 风险分级按业务影响、变更复杂度、历史缺陷密度、使用频率四维判定,对应全量、模块级、冒烟三级验证深度,并配置例外升级条件。
- 规则落地靠角色分工与留痕:变更说明、范围清单、分级结论、执行记录四类交付物可追溯,再按版本或季度核验并回写修订。
回归范围规则要解决什么问题:先定判定口径
回归范围规则的目标只有一个:对每一次进入测试的变更,给出“验证哪些既有能力、验证到什么程度”的明确结论,并让这个结论可以被复核。规则不管测试策略如何设计、测试计划如何排期,也不管单个缺陷修复后如何复测跟踪,这些属于其他环节的职责。
规则的基本判定逻辑是一条四段链路:变更分类 → 影响维度 → 风险分级 → 验证深度。变更分类回答“这次改的是什么类型”;影响维度回答“这类改动通常会波及哪些方面”;风险分级回答“波及面里哪些必须重点验证”;验证深度回答“用全量、模块级还是冒烟级来验证”。四段链路每一段都要有明确的判定依据和输出,不能停留在“根据影响评估确定范围”这类原则性表述。
制定规则时先明确三条口径,后续表格才有落点:
- 判定对象:以一次可识别的变更为单位,包括需求变更、代码修改、配置调整、依赖升级等,而不是以迭代或版本为单位。
- 判定时点:在变更进入测试之前完成范围判定,判定结论作为测试执行的输入。
- 判定留痕:每次判定都要留下变更依据、范围清单和分级结论,供事后复盘漏测或超范围回归。
第一步:建立变更分类与影响维度清单
变更分类是规则的输入端。分类过粗,影响分析没有抓手;分类过细,维护成本高且难以执行。建议按改动性质划分五类,并为每类预设默认影响维度,作为圈定范围的起点。
| 变更分类 | 典型情形 | 默认关联的影响维度 |
|---|---|---|
| 需求新增 | 新增功能点、新增页面或入口 | 功能路径、权限、上下游依赖 |
| 逻辑修改 | 业务规则调整、计算逻辑变更、状态流转修改 | 功能路径、接口契约、数据 |
| 配置调整 | 参数值、开关、阈值、路由配置变更 | 功能路径、非功能约束、上下游依赖 |
| 依赖升级 | 中间件、第三方库、外部服务版本升级 | 接口契约、非功能约束、上下游依赖 |
| 数据模型变更 | 表结构、字段、索引、数据迁移 | 数据、接口契约、功能路径 |
影响维度需要单独定义清楚,避免不同人理解不一致。常用六个维度:
- 功能路径:直接调用被改逻辑的页面、流程和操作入口。
- 接口契约:入参、出参、错误码、协议格式发生变化或被间接影响的接口。
- 数据:读写该数据的报表、导出、统计、历史数据兼容。
- 权限:角色、菜单、数据可见范围是否随变更调整。
- 上下游依赖:调用方与被调用方、消息生产与消费方。
- 非功能约束:性能、并发、超时、重试、缓存等受配置或依赖升级影响的约束。
默认关联只是起点,不是结论。每次变更仍需由变更提出人和开发补充实际影响说明,测试负责人据此确认或修正默认维度。这张对照表的价值在于让“这类变更通常要看哪些方面”成为团队共识,减少每次从零讨论。
第二步:按影响维度圈定受影响范围
圈定范围的动作是把影响维度落到具体的功能点和接口上,形成候选回归项清单。常用三条追溯路径:
- 从需求追溯:通过需求与功能点的关联关系,找到该需求覆盖的页面、流程和用例,再沿功能路径扩展到相邻功能。
- 从代码追溯:依据代码变更涉及的模块、类或函数,定位其对外暴露的接口和调用入口,映射到功能点。
- 从配置追溯:配置项通常被多个功能共用,需要列出读取该配置的功能清单,逐一确认是否受影响。
依赖关系与调用链排查是圈定范围时最容易遗漏的环节。对接口类变更,至少向上查一层调用方、向下查一层被调用方;对消息类变更,查清生产方与消费方;对共享数据变更,查清所有读写该数据的模块。排查结论要写进清单,而不是停留在口头确认。
候选回归项清单建议包含以下字段,保证每一项都能回答“为什么它在范围内”:
| 字段 | 填写要求 |
|---|---|
| 功能点/接口 | 具体到页面、流程节点或接口名 |
| 关联变更 | 指向本次变更的需求单、代码提交或配置项 |
| 影响类型 | 取自六个影响维度,可多选 |
| 来源依据 | 需求关联、代码调用链、配置读取清单等具体出处 |
| 初步判断 | 必测、抽测、暂不纳入,并注明理由 |
清单形成后由测试负责人复核一遍:范围明显偏大时检查是否把“同模块”误当“受影响”;范围明显偏小时重点检查上下游依赖和非功能约束是否被跳过。
第三步:用风险分级决定验证深度
范围清单回答“验什么”,分级回答“验多深”。分级建议从四个维度打分或分档:业务影响(出问题对用户和收入的损害程度)、变更复杂度(改动行数、涉及模块数、逻辑分支数)、历史缺陷密度(该模块近几个版本的缺陷数量)、使用频率(功能被调用的频次)。四个维度不必精确量化,按高、中、低三档判定即可执行。
| 分级结果 | 判定参考 | 验证深度 |
|---|---|---|
| 高 | 核心业务链路,或变更复杂度高,或历史缺陷密集,或高频使用 | 全量回归:覆盖该功能全部核心用例及关联接口 |
| 中 | 一般业务功能,变更中等复杂,缺陷密度和使用频率一般 | 模块级回归:覆盖该模块主流程与关键异常分支 |
| 低 | 边缘功能,改动简单,历史稳定,低频使用 | 冒烟验证:验证主流程可走通、关键接口返回正常 |
分级判定表要配例外升级条件,防止机械套用:涉及资金、权限、对外接口契约的变更,无论其他维度评分如何,至少按模块级回归执行;同一模块在一个版本内发生多次变更时,后续变更的分级不得低于前一次;线上出现过同类问题的模块,下一次相关变更自动升一级。例外条件写进规则,判定时直接引用,减少临场争论。
分级结论要落到执行计划:每个候选回归项标注分级结果和对应验证深度,测试执行时按此排期和分配人力。分级结论与范围清单一起归档,作为后续复盘“分级是否合理”的依据。
角色分工与交付物:谁判定、谁确认、谁执行
规则能否运行,取决于每个环节是否有人负责、有物可交。建议按以下分工组织:
| 角色 | 主要动作 | 交付物 |
|---|---|---|
| 变更提出人 | 提交变更说明,标注变更分类和初步影响维度 | 变更说明(含分类与影响初判) |
| 开发 | 补充代码与配置层面的影响说明,提供调用链和依赖排查结论 | 影响说明、依赖排查记录 |
| 测试负责人 | 复核影响维度,圈定候选回归项,完成风险分级,确认验证深度 | 范围清单、分级结论 |
| 业务确认人 | 对高分级变更和例外升级情形确认业务影响判断 | 分级确认记录 |
| 测试执行人 | 按范围清单和验证深度执行,记录结果与偏差 | 执行记录、偏差说明 |
四个环节的交接要有明确完成标志:变更说明缺少分类和影响初判时,测试负责人可以退回;范围清单中每一项都必须有来源依据,无依据项不得进入执行;分级结论需有测试负责人签字或系统记录,高分级和例外升级情形需业务确认人确认;执行记录要能对应到范围清单的每一项,未执行项需注明原因。范围清单、分级结论与执行记录之间保持可追溯关联,是规则长期运行的基础。在工具层面,这类关联可以借助 ONES 的工作项与测试用例关联、需求—测试—缺陷链路来承载,让每一条回归项都能回溯到变更依据和执行结果,减少线下表格对不齐的情况。
示例:一次接口逻辑修改的回归范围判定
以下为演示情景,用于说明规则从输入到输出的完整过程。
变更描述与分类:订单查询接口的优惠金额计算逻辑调整,由按比例计算改为按阶梯规则计算。变更分类为“逻辑修改”,默认关联影响维度为功能路径、接口契约、数据。
影响维度识别:功能路径方面,订单列表、订单详情、结算页均展示优惠金额;接口契约方面,接口出参新增阶梯标识字段,调用方需确认兼容;数据方面,历史订单的优惠金额展示与导出报表可能受影响;上下游依赖方面,结算服务调用该接口获取金额,需排查其处理逻辑。权限与非功能约束经确认不受影响。
候选回归项:订单列表优惠金额展示、订单详情优惠金额展示、结算页金额计算、订单查询接口出参校验、结算服务金额处理、订单导出报表、历史订单金额展示,共七项,每项标注来源依据。
分级结论:订单金额属于核心业务链路,且涉及对外接口出参变更,按例外升级条件直接定为高分级;导出报表与历史订单展示定为中分级;其余接口出参校验定为中分级。验证深度为:核心链路全量回归,报表与历史数据模块级回归,接口出参做契约校验。
执行结果记录:七项全部执行,其中历史订单展示发现一处金额取整偏差,记录为缺陷并回填至范围清单对应项;结算服务处理逻辑经确认无需修改,执行记录注明确认依据。该次判定过程归档,作为后续同类接口变更的参考。
完成检查:规则落地后的核验项
规则写完不等于在运行。建议每个版本或每季度按以下清单核验一次,逐项给出结论:
- 规则是否覆盖主要变更类型:抽查近期的变更记录,确认每类变更都能在分类表中找到对应项,且影响维度有默认关联。
- 范围清单是否可追溯到变更依据:随机抽取若干条回归项,检查其“关联变更”和“来源依据”字段是否完整、能否回溯到具体需求单或代码提交。
- 分级结论是否有确认记录:检查高分级变更和例外升级情形是否都有测试负责人与业务确认人的确认记录。
- 执行记录是否与范围清单对应:核对执行记录是否覆盖清单每一项,未执行项是否注明原因。
- 漏测与超范围回归是否有复盘机制:对线上漏测问题和明显超出必要范围的回归,是否在固定周期内复盘,并将结论回写到分类表、影响维度表或分级判定表中。
- 规则本身是否在更新:变更类型、依赖关系或业务重点发生变化后,分类表与分级判定表是否随之修订,修订是否有记录。
核验中发现的问题要落到具体修订动作:分类缺失就补分类,依据缺失就调整清单字段要求,分级偏差就修订判定表或例外条件。规则经过若干轮“判定—执行—复盘—修订”后,才会从文档变成团队的实际工作方式。
常见问题
变更很小,是否可以直接按冒烟验证处理,跳过范围判定?
不建议跳过判定,但可以简化判定。变更再小,也要先确认它属于哪类变更、默认影响维度是什么,再决定验证深度。实践中容易出问题的是“看起来小”的配置调整和依赖升级:一个参数值可能被多个功能共用,一次依赖升级可能改变接口超时或返回格式。规则里可以设置简化通道,例如改动行数少、不涉及接口契约与数据模型的变更,由开发在变更说明中声明影响维度为空或仅功能路径,测试负责人复核后按冒烟验证执行。简化的是判定工作量,判定结论和依据仍需留痕。
同一模块在一个版本内多次变更,分级怎么处理?
按规则中的例外升级条件处理:同一模块在一个版本内发生多次变更时,后续变更的分级不得低于前一次。这样做的原因是多次改动叠加后,模块内部状态和交互路径的复杂度往往超过单次变更的评估结果。执行时可以在范围清单中标注该模块本版本的变更次数,测试负责人据此直接引用升级条件,不必每次重新争论。如果后续变更实际影响面确实更小,也应由测试负责人记录降级理由并经业务确认人确认,保留判定依据。
范围清单里的“来源依据”具体要写到什么程度?
标准是:换一个人拿着这条依据,能独立找到对应的变更内容并判断相关性。可接受的写法包括需求单编号、代码提交记录中的模块或类名、配置项名称及其读取方清单、调用链排查结论。不可接受的写法是“同模块”“相关功能”“开发说影响”这类无法回溯的表述。核验时可以随机抽取若干条回归项,检查依据字段能否回溯到具体需求单或代码提交;回溯失败的条目要么补依据,要么从清单中移除。这一要求同时约束了范围偏大和偏小两种情况。
线上出现漏测后,规则应该怎么修订?
漏测复盘要回答三个问题:这个功能为什么不在范围清单里,是分类表缺了这类变更、影响维度没覆盖到,还是追溯路径走漏了;如果在清单里但没执行,是分级结论排期不足还是执行偏差;分级是否偏低,是否需要调整判定表或增加例外条件。结论要落到具体修订动作:补变更分类、补影响维度默认关联、调整清单字段要求、修订分级判定表或例外升级条件。修订本身要有记录,并在下一次核验时检查修订是否生效。只复盘不修订,同类漏测会重复出现。
团队规模较小、角色合并时,这套分工如何简化?
角色合并的原则是保留判定与确认两个动作的分离,而不是照搬岗位名称。小团队中开发可能同时承担变更提出人的职责,测试负责人可能同时执行测试,这些合并都可以接受。需要保留的是:范围清单的来源依据由提出变更的一方提供,分级结论由测试负责人确认,涉及资金、权限、对外接口契约的高分级变更由业务方确认。如果业务确认人难以固定,可以约定由产品负责人代行并在记录中注明。交付物不因角色合并而减少,变更说明、范围清单、分级结论、执行记录四类记录仍需保留,否则复盘和核验没有依据。
