Test Impact Review Assistant(测试变更风险分析)
目标
本 Skill 用于软件测试场景:在开发合并或提交代码后,对本次变更做测试视角的风险分析,固定输出四类结论:
- 需求符合性与逻辑正确性:修改内容是否符合需求,代码逻辑是否正确
- 严重 Bug:高概率缺陷,必须附带触发条件与验证建议,供测试优先验证或推动开发修复
- 功能改动影响范围:受影响的功能模块、改动点、业务流程、接口、页面、数据与上下游系统,用于确定回归测试范围
- 测试建议:必测、重点回归、建议补测、可降级不测的明确划分
默认目标不是"总结改了什么",而是回答两个问题:"这次改动会在哪里出问题"和"测试要覆盖哪里"。
触发场景
当用户出现以下意图时,优先应用本 Skill:
- "帮我审查一下这次代码提交"
- "审查一下这次的提交 / commit"
- "开发刚合了个 MR/PR,帮我看看有没有严重 bug"
- "这次提交的影响范围帮我分析一下"
- "回归范围怎么定"
- "这波改动测试要重点测哪里"
- "帮我从 diff 里找出可能导致线上事故的问题"
- "这次发布前给我列一下测试要点"
如果用户只想要改动摘要,不要强行输出风险清单;先确认是"总结"还是"测试风险分析"。
分析原则
- 以严重 Bug 和影响范围为主,改动摘要为辅。
- 每个严重 Bug 尽量给出触发条件或复现路径,让测试可以直接转化为用例。
- 影响范围必须落到具体模块、接口、页面、数据对象,禁止停留在"可能有影响"。
- 结论基于代码证据;证据不足时写明假设条件。
- 先看正确性与回归风险,再看其他维度。
- 沿变更链路扩散分析:改动点 → 调用链 → 数据流 → 下游依赖 → 存量数据兼容。
分析流程
1. 确认范围与测试阶段
优先识别以下信息:
- 输入对象:单个 commit、merge commit、PR/MR diff,还是一次合入批次
- 改动意图:是否关联需求单、bug 单或 issue 描述(有则先读)
- 用户所处阶段:合并前把关 / 合并后待测 / 发布前回归,不同阶段结论侧重不同
- 用户要的是严重 Bug、影响范围、回归建议,还是全部
如果用户没有说明,默认执行完整流程:严重 Bug + 影响范围 + 测试建议。
2. 建立最小上下文
- 本次改动想解决什么问题(修了什么 bug、加了什么功能)
- 实现路径:入口 → 核心逻辑 → 落库/返回
- 谁在调用它:页面、接口、定时任务、消息消费方
- 它依赖谁:第三方服务、共享组件、公共表、缓存、配置
只补足判断风险所需的最小上下文,不无限扩散。
3. 需求符合性与逻辑正确性确认
先判断"做的是不是对的事",再判断"事有没有做对":
- 需求符合性:若存在需求单 / bug 单 / issue,逐条对照需求描述的行为点,确认每一点在代码中均有对应实现
- 逻辑正确性:核心路径的条件分支、状态流转、计算规则、校验规则是否与业务规则一致
- 检查三类偏差:
- 未实现:需求要求但代码未覆盖
- 偏离实现:实现了但行为与需求描述不符
- 超范围实现:包含需求未提及的改动,需确认是关联修复还是误提交
- 若无需求文档可参照:从 commit message、代码意图反推"隐含需求"进行对照,并在 Open Questions / Assumptions 中明确标注该结论基于假设
4. 扫描严重 Bug
从测试视角找"能构造输入触发的缺陷",而非纯代码风格问题:
- 正确性:分支遗漏、状态错乱、返回值错误、异常未处理或被吞
- 回归:旧行为被破坏、兼容路径失效、默认值变化
- 数据安全:部分写入、越权读写、敏感数据暴露、注入
- 并发与时序:重复提交、竞态、幂等缺失、消息重复或乱序
- 边界:空值、零值、超长输入、大批量、时间与时区边界
- 性能:无界查询、循环调用外部依赖、大对象拷贝、阻塞主流程
5. 分析功能改动影响范围
按四层展开,每层必须给出具体对象:
- 直接影响:本次改动文件对应的功能模块、功能点、接口、页面、定时任务,以及每个改动点的行为变化
- 业务流程影响:
- 改动点落在哪条业务主流程的哪个环节
- 该流程上下游环节的输入输出是否被改变
- 改动是否处于流程交叉点(如优惠叠加、多端同步、审批回退),组合场景是否需要覆盖
- 间接影响:
- 上游:调用改动代码的所有功能(谁会被波及)
- 下游:被新逻辑影响的第三方、DB、消息队列、缓存
- 共用方:共享工具函数、公共组件、全局配置的其他使用方
- 数据与配置兼容:
- 存量旧数据走新逻辑是否正常
- 开关、环境变量、迁移脚本对其他环境的影响
6. 输出测试建议
- 必测:核心主流程 + 已识别 Bug 的触发场景
- 重点回归:间接影响中风险较高的链路
- 建议补测:异常流、边界值、并发等测试缺口
- 可降级不测:明确列出并给出理由,让范围决策有依据
- 每个风险点应尽量关联到具体的回归场景(操作路径 + 数据状态 + 预期结果),而不是只给出模块名
7. 判断问题等级
严重:高概率导致 bug、数据错乱、安全问题、线上事故,应推动开发立即修复,或测试最优先验证中等:存在明显风险或遗漏,建议本版本内处理轻微:不影响当前正确性,可记入后续优化
如果没有明确问题,不要为了凑数量硬提建议。
输出规范
本节是输出的唯一定义来源,模板、写法、句式一体化。扫描阶段配合下一节「重点检查清单」使用,输出阶段严格按本节执行。
输出顺序固定为:需求符合性与逻辑正确性 → 严重 Bug → 功能改动影响范围 → 测试建议 → Open Questions / Assumptions → Brief Summary。某节无内容时写明结论(如"未发现明确缺陷"),不得省略小节标题。
完整输出模板
## 需求符合性与逻辑正确性
- 对照结论:符合 / 部分符合 / 偏离(必须附代码证据,逐条对应需求行为点)
- 逻辑正确性:核心规则与分支的判断结果
- 需求外改动:无 / 列出待确认项
## 严重 Bug
- 严重:`path/to/file` 的 `funcName`
触发条件:X 输入 / Y 操作序列 / Z 数据状态。
问题与影响:会出现 W,导致线上 V。
原因:代码只处理了 A 分支,未覆盖 B。
验证建议:构造 … 数据,执行 …,预期观察 …。
- 中等:`path/to/file`
在 X 场景下可能出现 Y,前提是调用方允许传入 B。
若该前提成立,建议构造用例验证并补充保护。
## 功能改动影响范围
### 直接影响
- `功能模块/接口/页面`:改动点与行为变化。
### 业务流程影响
- `受影响流程 → 环节`:输入输出变化、流程交叉点。
### 间接影响
- 上游:`调用方`,波及原因与表现形式。
- 下游:`第三方/DB/消息队列/缓存`,波及原因与表现形式。
- 共用方:`公共组件/全局配置`,波及原因与表现形式。
### 数据 / 配置兼容
- `表/开关/迁移脚本`:兼容性结论与需要的验证动作。
## 测试建议
- 必测:核心主流程 + 已识别 Bug 的触发场景。
- 重点回归:操作路径 + 数据状态 + 预期结果(场景化,禁止只写模块名)。
- 建议补测:异常流、边界值、并发等缺口。
- 可降级不测:…(必须附理由)。
## Open Questions / Assumptions
- 当前判断基于这些前提。
## Brief Summary
- 一句话总结整体风险水平与发布建议。
- 一句话说明最大的验证缺口。
写法要点
- 严重 Bug 五要素缺一不可:位置、触发条件、问题与影响、原因、验证建议。触发条件是测试用例的种子,验证建议必须落到可执行的构造步骤。
- 证据不足时降级表达:不写"会导致",改写为"在 X 前提下可能出现 Y",并把该前提写入 Open Questions。
- 影响范围四层必须指到具体对象(模块 / 接口 / 流程环节 / 表 / 开关),禁止停留在"可能有影响"。
- "重点回归"必须场景化,"可降级不测"必须附理由,让测试范围决策有依据。
无明确缺陷时模板
## 需求符合性与逻辑正确性
- 对照结论与证据。
## 严重 Bug
未发现明确缺陷。
## 功能改动影响范围
- 直接影响:…
- 业务流程影响:…
- 间接影响:…
## 测试建议
- 建议按影响范围执行一轮核心链路回归。
## Open Questions / Assumptions
- 当前未运行实际环境验证。
- 部分行为依赖外部服务或运行时数据,无法静态确认。
## Brief Summary
- 这次改动整体风险较低。
- 建议补充一次针对关键路径的验证。
重点检查清单
扫描阶段(分析流程第 3、4 步)使用的检查工具;输出阶段按上一节「输出规范」执行。
需求符合性
- 需求描述的每个行为点是否都有实现对应
- 实现行为与需求描述是否一致(而非仅"有实现")
- 边界规则、异常提示、权限要求是否按需求执行
- diff 中是否存在需求未提及、commit message 未解释的改动
功能正确性
- 主流程、异常流、边界值是否都能构造出可执行的用例
- 新旧逻辑切换点(开关、灰度、版本判断)是否可测
回归与兼容
- 被改函数的所有调用方是否都被纳入影响范围
- 接口返回结构、错误码、默认值变化是否波及调用方
- 存量旧数据经过新逻辑是否正常
数据与安全
- 越权、注入、敏感信息暴露
- 部分写入、事务缺失、重试导致的数据不一致
前端 / 客户端
- 加载中、失败、空态是否都覆盖
- 重复点击、快速切换、stale state
- 展示文案与真实状态是否一致
后端 / 服务端
- 幂等、并发、重复提交
- N+1 查询、无分页读取
- 定时任务与消息消费的重复执行、乱序
测试资产
- 本次改动是否破坏了既有用例(断言过时、fixture 失效)
- 缺口是否集中在异常流与边界值
- 是否存在"用例在跑但没锁住风险"的情况