一套 Skills,搞定需求评审 + 用例生成全流程

一套 Skills,搞定需求评审 + 用例生成全流程

读完这篇文章,你将能够在自己的项目里从零搭建一套完整的需求评审 + 用例生成 Skills。


整体架构:四个 Skill 如何协作

这套工具由 4 个 Skill 组成,按 3 个阶段 协作完成从需求到用例的全流程:

复制代码
                        ┌─────────────────────────┐
                        │    用户输入需求描述        │
                        └────────────┬────────────┘
                                     │
                                     ▼
┌──────────────────────────────────────────────────────────────┐
│                    📋 阶段一:需求评审                         │
│                                                              │
│  ┌──────────────────────────────────────────────────────┐   │
│  │  ① req-review(主协调器)                              │   │
│  │    Step 1: 解析需求 → 识别模块/类型                    │   │
│  │    Step 2: 委托 ② associator 做关联分析               │   │
│  │    Step 3: 委托 ③ challenger 做逐条审查 → 输出评审报告 │   │
│  └────────────┬───────────────────┬─────────────────────┘   │
│               │                   │                         │
│               ▼                   ▼                         │
│  ┌────────────────────┐  ┌────────────────────────────┐     │
│  │ ② associator       │  │ ③ challenger               │     │
│  │ · 语义搜索受影响     │  │ · 加载审查清单(15条通用     │     │
│  │   模块和用例        │  │   + 按类型加载专项清单)     │     │
│  │ · 输出关联分析      │  │ · 逐条命中→检查→分级        │     │
│  └────────────────────┘  │ · 输出分级问题清单          │     │
│                          └────────────────────────────┘     │
│                                     │                        │
│                                     ▼                        │
│                          评审报告输出                         │
│                    docs/req-review/<slug>-review.md          │
└──────────────────────────────────────────────────────────────┘
                                     │
                                     │  评审报告包含:
                                     │  · 🚨 阻塞问题 × N
                                     │  · ⚠️ 严重问题 × N
                                     │  · 📝 建议改进 × N
                                     │  · ℹ️ 信息确认 × N
                                     │
                                     ▼
┌──────────────────────────────────────────────────────────────┐
│                💬 阶段二:需求澄清与补充(用户参与)            │
│                                                              │
│   用户(PM/测试)针对评审报告中的问题逐条回复:                 │
│                                                              │
│   例:                                                        │
│   B-01. 追加时字段名称不匹配的处理策略未定义                   │
│   → 用户回复:报错阻止,大小写敏感,提示具体文案                │
│                                                              │
│   M-02. 追加时数据结构"不允许修改"的交互范围未明确             │
│   → 用户回复:全部置灰不可编辑,但能看到原表结构               │
│                                                              │
│   ...(逐条回复所有问题)...                                   │
│                                                              │
│                    │                                          │
│                    ▼                                          │
│           AI 自动处理所有回复:                                │
│           ① 将澄清结论同步补充到需求文档                       │
│           ② 更新评审报告,标记 ✅ 已解决                       │
│           ③ 对建议改进(Minor)给出设计方案                    │
│           ④ 生成新的衍生待澄清问题(如有)                     │
│                                                              │
│          ⚠️ 关键:这个阶段可能反复多轮                         │
│          直到所有阻塞和严重问题清零                            │
└──────────────────────────────────────────────────────────────┘
                                     │
                                     │  所有 Blocker 和 Major 清零
                                     │  需求文档已补充完整
                                     │
                                     ▼
┌──────────────────────────────────────────────────────────────┐
│                    📝 阶段三:用例生成                         │
│                                                              │
│  ┌──────────────────────────────────────────────────────┐   │
│  │  ④ req-test-cases(用例生成器)                        │   │
│  │    Phase 1: 生成测试点清单 → 等待用户确认              │   │
│  │    Phase 2: 展开完整手工用例                          │   │
│  └──────────────────────────────────────────────────────┘   │
│                                     │                        │
│                                     ▼                        │
│                          测试用例输出                         │
│                  docs/req-review/<slug>-test-cases.md         │
└──────────────────────────────────────────────────────────────┘

四个 Skill 的分工

Skill 角色 输入 输出 所属阶段
req-review 主协调器 需求文档路径或描述 评审报告文件 阶段一
req-review-associator 关联分析 需求描述 + 模块/类型 受影响模块和用例列表 阶段一
req-review-challenger 审查挑战 需求描述 + 类型 + 关联分析 分级问题清单 阶段一
(用户参与) 需求澄清 评审报告中的问题清单 逐条回复,AI 同步更新需求和报告 阶段二
req-test-cases 用例生成 已澄清的完整需求 结构化测试用例 阶段三

准备工作:创建目录结构

在你的项目根目录下创建以下文件夹结构:

复制代码
.codex/
└── skills/
    ├── req-review/
    │   └── references/
    │       └── review_checklist_by_type/
    ├── req-review-associator/
    ├── req-review-challenger/
    └── req-test-cases/
        └── references/

打开终端,在项目根目录执行:

bash 复制代码
mkdir -p .codex/skills/req-review/references/review_checklist_by_type
mkdir -p .codex/skills/req-review-associator
mkdir -p .codex/skills/req-review-challenger
mkdir -p .codex/skills/req-test-cases/references

第一步:搭建审查清单(整个体系的知识基础)

为什么先做这个? 审查清单是 AI 评审时逐条对照的"检查表"。没有清单,AI 只会泛泛而谈;有了清单,AI 才能不遗漏地逐条扫描。所有 Skill 都依赖它。

1.1 创建通用审查清单

创建文件 .codex/skills/req-review/references/review_checklist_common.md,写入以下完整内容:

markdown 复制代码
# 通用审查清单(review_checklist_common.md)

> 与具体业务无关的测试方法论,放之四海皆准的审查规则。
> 每条规则结构统一:id / 类别 / 默认严重度 / 适用范围 / 检查问题 / 命中条件 / 建议追问

---

## 一、输入字段类(CHK-IN)

### CHK-IN-001 字符串字段的长度边界
- **类别**: boundary
- **默认严重度**: blocker
- **适用范围**: 任何用户输入的字符串字段(名称、描述、备注、标签等)
- **检查问题**:
  1. 是否明确了最小字符数?
  2. 是否明确了最大字符数?
  3. 空字符串、纯空格如何处理(拒绝/默认值/允许)?
  4. 超长输入是截断、报错还是拒绝?
- **命中条件**: 需求中提到"输入/名称/描述/备注/标签"等字段,但未给出长度范围
- **建议追问**: 请明确 <字段名> 的字符数范围(含上下界)、空值/纯空格的处理、超长输入的处理策略

### CHK-IN-002 字符串字段的字符集限制
- **类别**: boundary
- **默认严重度**: major
- **适用范围**: 任何用户输入的字符串字段
- **检查问题**:
  1. 是否明确了允许的字符集(中文/英文/数字/特殊符号/emoji)?
  2. 是否明确了禁止的字符?
  3. 特殊符号(如 `< > & " '`)如何处理(转义/过滤/拒绝)?
- **命中条件**: 需求中提到字符串输入字段,但未说明字符集限制
- **建议追问**: 请明确 <字段名> 支持的字符集,以及特殊符号的处理策略

### CHK-IN-003 数字字段的取值范围
- **类别**: boundary
- **默认严重度**: blocker
- **适用范围**: 任何用户输入的数字字段(数量、大小、时长等)
- **检查问题**:
  1. 是否明确了最小值?
  2. 是否明确了最大值?
  3. 是否支持小数?支持几位小数?
  4. 负数是否允许?
  5. 超出范围如何处理(截断/报错/拒绝)?
- **命中条件**: 需求中提到数字输入,但未给出取值范围
- **建议追问**: 请明确 <字段名> 的取值范围(含上下界)、小数位支持、超范围处理策略

### CHK-IN-004 URL/路径字段的格式校验
- **类别**: validation
- **默认严重度**: blocker
- **适用范围**: 任何 URL、文件路径、网络地址输入字段
- **检查问题**:
  1. 是否明确了合法格式(协议、域名格式、端口范围)?
  2. 是否禁止内网地址(SSRF 防护)?
  3. 是否禁止 localhost/127.0.0.1?
  4. 非法格式如何提示?
  5. 是否限制 URL 最大长度?
- **命中条件**: 需求中提到 URL/地址/路径输入,但未说明格式校验规则
- **建议追问**: 请明确 <字段名> 的合法格式、内网地址/本地地址的防护策略、非法格式的错误提示

### CHK-IN-005 枚举/下拉字段的选项完整性
- **类别**: completeness
- **默认严重度**: major
- **适用范围**: 任何枚举类型字段、下拉选择、单选/多选
- **检查问题**:
  1. 是否列出了所有可选值?
  2. 是否有默认值?
  3. 是否允许不选(空值)?
  4. 选项文案是否已确认?
  5. 选项之间是否互斥?
- **命中条件**: 需求中提到选择/下拉/枚举/类型,但未列出完整选项
- **建议追问**: 请列出 <字段名> 的所有可选值,确认默认值和是否允许空选

---

## 二、异常处理类(CHK-EX)

### CHK-EX-001 网络异常处理
- **类别**: exception
- **默认严重度**: major
- **适用范围**: 涉及外部服务调用、网络请求的功能
- **检查问题**:
  1. 外部服务超时如何处理(超时时间、重试次数、降级策略)?
  2. 外部服务返回错误(4xx/5xx)如何处理?
  3. 网络不可达时用户看到什么提示?
- **命中条件**: 需求涉及外部调用/API/连接/请求,但未说明异常处理
- **建议追问**: 请明确超时时间、重试策略、各异常状态码的处理方式和用户提示文案

### CHK-EX-002 并发/重复操作处理
- **类别**: exception
- **默认严重度**: major
- **适用范围**: 任何涉及创建、提交、删除的操作
- **检查问题**:
  1. 重复提交如何处理(幂等性)?
  2. 同名资源是否允许创建?
  3. 并发操作同一资源如何处理?
- **命中条件**: 需求涉及创建/提交/删除操作,但未说明重复/并发处理
- **建议追问**: 请明确重复提交的防重策略、同名资源的处理规则

### CHK-EX-003 资源引用/依赖处理
- **类别**: exception
- **默认严重度**: major
- **适用范围**: 资源之间存在引用关系的功能
- **检查问题**:
  1. 被其他资源引用的资源能否删除?
  2. 删除后引用方如何处理(级联删除/阻止删除/置空)?
  3. 删除前是否需要二次确认?
- **命中条件**: 需求涉及删除操作,且该资源可能被其他模块引用
- **建议追问**: 请明确 <资源名> 被引用时的删除策略和引用方的处理方式

### CHK-EX-004 数据为空/不存在处理
- **类别**: exception
- **默认严重度**: minor
- **适用范围**: 任何涉及列表/查询/展示的功能
- **检查问题**:
  1. 数据为空时展示什么(空状态文案/图示)?
  2. 资源不存在时(如访问已删除资源)如何提示?
  3. 加载中状态是否有展示?
- **命中条件**: 需求涉及列表/查询/展示,但未说明空状态和加载状态
- **建议追问**: 请确认空状态、加载中、资源不存在时的 UI 展示

---

## 三、权限与安全类(CHK-SEC)

### CHK-SEC-001 权限点定义
- **类别**: security
- **默认严重度**: blocker
- **适用范围**: 任何新增功能/页面
- **检查问题**:
  1. 是否定义了访问权限点(谁能访问)?
  2. 是否定义了操作权限点(谁能操作)?
  3. 无权限用户看到什么(隐藏入口/禁用按钮/提示无权限)?
  4. 是否涉及数据权限(只看自己的/看全部)?
- **命中条件**: 需求涉及新功能/页面/操作,但未说明权限
- **建议追问**: 请明确 <功能> 的访问权限和操作权限点,以及无权限时的 UI 表现

### CHK-SEC-002 敏感数据处理
- **类别**: security
- **默认严重度**: major
- **适用范围**: 涉及密码、Token、密钥、个人信息的功能
- **检查问题**:
  1. 敏感数据是否加密存储?
  2. 敏感数据是否脱敏展示?
  3. 传输过程是否加密?
  4. 日志中是否会记录敏感信息?
- **命中条件**: 需求涉及密钥/密码/Token/个人信息
- **建议追问**: 请确认敏感数据的存储加密、展示脱敏、传输加密策略

---

## 四、兼容性与环境类(CHK-ENV)

### CHK-ENV-001 多环境适配
- **类别**: compatibility
- **默认严重度**: minor
- **适用范围**: 任何新增功能
- **检查问题**:
  1. Private 环境(内网/私有化)是否可用?
  2. International 环境(国际化)是否可用?
  3. 不同环境下行为是否有差异?
- **命中条件**: 产品支持多环境部署,但需求未提及环境差异
- **建议追问**: 请确认 <功能> 在 Private/International 环境下的行为差异

### CHK-ENV-002 浏览器兼容性
- **类别**: compatibility
- **默认严重度**: minor
- **适用范围**: Web 前端功能
- **检查问题**:
  1. 是否明确了支持的浏览器及版本?
  2. 是否涉及特殊浏览器 API(可能不兼容)?
- **命中条件**: Web 前端功能,但未说明浏览器兼容
- **建议追问**: 请确认支持的浏览器及最低版本

---

## 五、数据与状态类(CHK-DT)

### CHK-DT-001 数据持久化与生命周期
- **类别**: data
- **默认严重度**: major
- **适用范围**: 任何涉及数据创建/修改的功能
- **检查问题**:
  1. 数据存储在哪里(数据库表/文件)?
  2. 数据是否有过期/删除机制?
  3. 数据量上限是多少?
  4. 数据是否需要备份/恢复?
- **命中条件**: 需求涉及数据创建/存储,但未说明生命周期
- **建议追问**: 请明确数据的存储方式、数量上限、过期策略

### CHK-DT-002 状态流转
- **类别**: data
- **默认严重度**: major
- **适用范围**: 资源有状态变化的功能
- **检查问题**:
  1. 是否定义了所有可能的状态?
  2. 状态之间如何流转(哪些是合法流转)?
  3. 各状态下允许哪些操作?
  4. 非法状态流转如何处理?
- **命中条件**: 需求涉及资源状态变化,但未给出完整状态机
- **建议追问**: 请给出 <资源名> 的完整状态流转图和各状态下的可用操作

---

## 六、审计与日志类(CHK-LOG)

### CHK-LOG-001 操作审计日志
- **类别**: audit
- **默认严重度**: major
- **适用范围**: 任何涉及创建/编辑/删除的功能
- **检查问题**:
  1. 是否需要记录审计日志?
  2. 日志记录哪些字段(操作人/时间/操作类型/操作对象/操作详情)?
  3. 日志 Content 格式是什么?
- **命中条件**: 需求涉及增删改操作,但未提及审计日志
- **建议追问**: 请确认是否需要记录审计日志,以及日志的 Content 格式

### CHK-LOG-002 统计/计费口径
- **类别**: audit
- **默认严重度**: major
- **适用范围**: 涉及资源消耗/调用的功能
- **检查问题**:
  1. 是否纳入用量统计?
  2. 统计颗粒度是什么(次数/Token/流量/时长)?
  3. 是否计费?
- **命中条件**: 需求涉及资源调用/消耗,但未说明统计口径
- **建议追问**: 请确认是否纳入资源看板统计,以及统计颗粒度和计费规则

---

## 七、交互与体验类(CHK-UX)

### CHK-UX-001 操作反馈与提示
- **类别**: ux
- **默认严重度**: minor
- **适用范围**: 任何用户操作
- **检查问题**:
  1. 操作成功是否有反馈(Toast/提示/跳转)?
  2. 操作失败是否有明确错误提示?
  3. 耗时操作是否有进度提示?
  4. 是否需要操作确认(如删除二次确认)?
- **命中条件**: 需求涉及用户操作,但未说明反馈方式
- **建议追问**: 请确认操作成功/失败的提示方式和文案

### CHK-UX-002 列表/表格功能
- **类别**: ux
- **默认严重度**: minor
- **适用范围**: 涉及列表/表格展示的功能
- **检查问题**:
  1. 是否支持分页?每页默认条数?
  2. 是否支持排序?支持哪些字段排序?
  3. 是否支持筛选/搜索?搜索范围是什么?
  4. 列表为空时展示什么?
- **命中条件**: 需求涉及列表/表格,但未说明分页/排序/筛选
- **建议追问**: 请确认列表的分页、排序、筛选需求

---

## 维护说明
- 每条规则的 id 格式:`CHK-<类别缩写>-<序号>`,确保唯一可追溯
- 修改审查行为只需编辑此文件,SKILL.md 无需改动(知识与流程解耦)
- 随着测试经验积累,可持续补充新规则

1.2 创建需求类型识别表

创建文件 .codex/skills/req-review/references/requirement_types.md

markdown 复制代码
# 需求类型识别表

> 用于 req-review-challenger 判断需求类型,按命中类型加载专项审查清单。

| type_id | 需求类型 | 关键词/特征 | 对应 checklist |
|---------|----------|-------------|---------------|
| TYPE-001 | 新增功能 | 新增、新建、增加、创建、添加 | `review_checklist_by_type/new_feature.md` |
| TYPE-002 | 功能优化 | 优化、改进、调整、修改 | `review_checklist_by_type/optimization.md` |
| TYPE-003 | 缺陷修复 | 修复、bug、问题、异常 | `review_checklist_by_type/bugfix.md` |
| TYPE-004 | 交互变更 | 交互、UI、页面、展示、样式 | `review_checklist_by_type/ui_change.md` |
| TYPE-005 | 权限变更 | 权限、角色、访问控制、可见性 | `review_checklist_by_type/permission.md` |

## 维护说明
- 随着产品迭代,可新增更多类型
- 每个类型对应 `review_checklist_by_type/` 下一个 md 文件
- 类型表为空或未命中时,challenger 仅使用通用清单

1.3 创建 5 个专项审查清单

创建 review_checklist_by_type/new_feature.md(新增功能专项):

markdown 复制代码
# 新增功能专项审查清单

> 当需求类型识别为"新增功能"时,在通用清单基础上补充加载本清单。

### CHK-NF-001 与已有功能的边界
- **类别**: completeness
- **默认严重度**: blocker
- **适用范围**: 任何新增功能
- **检查问题**:
  1. 新功能与已有类似功能的关系是什么(替换/并存/子集)?
  2. 如果替换旧功能,旧功能的迁移路径是什么?
  3. 旧入口是否保留?旧 API 是否兼容?
  4. 新功能是否影响已有功能的枚举/配置项?
- **命中条件**: 新增功能与已有功能存在重叠或替代关系
- **建议追问**: 请明确新功能与已有 <功能名> 的关系,以及旧功能的处理策略

### CHK-NF-002 入口与导航
- **类别**: completeness
- **默认严重度**: major
- **适用范围**: 任何新增页面/功能入口
- **检查问题**:
  1. 功能入口放在哪个菜单/页面?
  2. 是否需要独立的导航路由?
  3. 是否需要在多处入口(如快捷入口)?
  4. 移动端/不同分辨率下入口是否可见?
- **命中条件**: 新增功能需要页面入口,但未说明入口位置
- **建议追问**: 请确认功能入口位置、导航路径和是否需要在多处露出

### CHK-NF-003 数据初始化与默认值
- **类别**: completeness
- **默认严重度**: major
- **适用范围**: 新增功能涉及数据
- **检查问题**:
  1. 系统初始化时是否有默认数据?
  2. 首次使用时用户看到什么(引导/空状态)?
  3. 历史数据是否需要迁移/初始化?
- **命中条件**: 新增功能,但未说明初始状态
- **建议追问**: 请确认功能的初始状态、默认数据和首次使用引导

创建 review_checklist_by_type/optimization.md(功能优化专项):

markdown 复制代码
# 功能优化专项审查清单

> 当需求类型识别为"功能优化"时,在通用清单基础上补充加载本清单。

### CHK-OP-001 优化范围与兼容性
- **类别**: compatibility
- **默认严重度**: blocker
- **适用范围**: 任何功能优化
- **检查问题**:
  1. 优化是否改变已有行为(Breaking Change)?
  2. 旧数据/旧配置是否需要迁移?
  3. 旧 API 是否保持兼容?
  4. 是否有灰度/回滚方案?
- **命中条件**: 需求涉及功能优化,但未说明兼容性和回滚策略
- **建议追问**: 请确认本次优化的 Breaking Change 清单、数据迁移方案和回滚策略

### CHK-OP-002 性能影响
- **类别**: performance
- **默认严重度**: major
- **适用范围**: 涉及查询/计算/批量操作的功能优化
- **检查问题**:
  1. 优化后性能是否有预期提升?
  2. 大数据量下表现如何?
  3. 是否需要性能基准测试?
- **命中条件**: 需求涉及性能相关优化或影响查询效率
- **建议追问**: 请确认性能优化的预期指标和大数据量下的表现

创建 review_checklist_by_type/bugfix.md(缺陷修复专项):

markdown 复制代码
# 缺陷修复专项审查清单

> 当需求类型识别为"缺陷修复"时,在通用清单基础上补充加载本清单。

### CHK-BF-001 影响范围
- **类别**: completeness
- **默认严重度**: major
- **适用范围**: 任何缺陷修复
- **检查问题**:
  1. 修复是否只影响报告的场景,还是影响更广?
  2. 是否有类似场景也存在同样问题?
  3. 修复是否引入了新问题(回归风险)?
- **命中条件**: 缺陷修复,但未说明影响范围
- **建议追问**: 请确认修复的影响范围和是否存在类似问题需要一并修复

### CHK-BF-002 回归测试范围
- **类别**: completeness
- **默认严重度**: major
- **适用范围**: 任何缺陷修复
- **检查问题**:
  1. 修复涉及哪些模块/接口?
  2. 需要回归哪些已有功能?
  3. 是否需要更新自动化用例?
- **命中条件**: 缺陷修复,但未说明回归范围
- **建议追问**: 请确认需要回归的功能清单

创建 review_checklist_by_type/ui_change.md(交互变更专项):

markdown 复制代码
# 交互变更专项审查清单

> 当需求类型识别为"交互变更"时,在通用清单基础上补充加载本清单。

### CHK-UI-001 多端适配
- **类别**: compatibility
- **默认严重度**: major
- **适用范围**: 任何 UI/交互变更
- **检查问题**:
  1. 不同分辨率下表现是否一致?
  2. 移动端/平板端是否需要适配?
  3. 不同浏览器渲染是否一致?
- **命中条件**: UI 变更,但未说明多端适配
- **建议追问**: 请确认多分辨率/多设备/多浏览器的适配方案

### CHK-UI-002 文案与国际化
- **类别**: completeness
- **默认严重度**: minor
- **适用范围**: 涉及文案变更的 UI 改动
- **检查问题**:
  1. 新增/修改的文案是否需要国际化翻译?
  2. 不同语言下文案长度是否会导致布局问题?
  3. 是否有英文/中文文案已确认?
- **命中条件**: UI 变更涉及文案,但未说明国际化
- **建议追问**: 请确认文案的国际化需求和不同语言下的文案内容

创建 review_checklist_by_type/permission.md(权限变更专项):

markdown 复制代码
# 权限变更专项审查清单

> 当需求类型识别为"权限变更"时,在通用清单基础上补充加载本清单。

### CHK-PM-001 权限点全量覆盖
- **类别**: completeness
- **默认严重度**: blocker
- **适用范围**: 任何权限变更
- **检查问题**:
  1. 新增/修改的权限点是否覆盖所有受影响的入口?
  2. 是否有遗漏的页面/按钮/操作?
  3. 权限点之间的继承/包含关系是否清晰?
- **命中条件**: 权限变更,但未列出完整的受影响入口
- **建议追问**: 请列出所有受权限变更影响的页面入口和操作按钮

### CHK-PM-002 越权验证
- **类别**: security
- **默认严重度**: blocker
- **适用范围**: 任何权限变更
- **检查问题**:
  1. 无权限用户是否被正确拦截?
  2. 通过 URL 直接访问是否能绕过权限?
  3. 通过 API 直接调用是否能绕过权限?
  4. 低权限角色能否越权执行高权限操作?
- **命中条件**: 权限变更,需验证越权防护
- **建议追问**: 请确认无权限用户的拦截策略(隐藏入口/提示无权限/返回 403)

1.4 创建关联规则表(初始为空,预留结构)

创建文件 .codex/skills/req-review/references/association_rules.md

markdown 复制代码
# 关联规则表

> 定义模块间隐式依赖关系,帮助关联分析时发现需求中未提及但可能受影响的模块。
> 起步为空,随着评审实践逐步补充。

| rule_id | trigger_module | trigger_keywords | affected_modules | reason |
|---------|---------------|------------------|------------------|--------|
| | | | | |

## 维护说明
- `trigger_module`:触发模块名
- `trigger_keywords`:触发关键词(需求中出现这些词时可能影响其他模块)
- `affected_modules`:可能受影响的模块列表
- `reason`:关联原因说明
- 每次评审后如发现新的隐式关联,可补充到表中

## 填写示例(根据你的实际产品调整)
| rule_id | trigger_module | trigger_keywords | affected_modules | reason |
|---------|---------------|------------------|------------------|--------|
| AR001 | 配置中心 | 标签、标签管理 | 探索发现-市场, 我的资源-分类 | 标签变更影响市场筛选和资源分类 |

1.5 创建产品特性关联规则(初始为空,预留结构)

创建文件 .codex/skills/req-test-cases/references/feature_impact_rules.md

markdown 复制代码
# 产品特性关联规则(feature_impact_rules.md)

> 业务规则:编码产品特有的隐式依赖关系。
> 当某个模块发生变更时,必须连带验证哪些下游特性。
> 起步为空,随着测试实践逐步补充。

| rule_id | trigger_module | trigger_action | must_test_features | reason |
|---------|---------------|----------------|--------------------|--------|
| | | | | |

## 维护说明
- `rule_id`:规则唯一标识,格式 `FR<序号>`
- `trigger_module`:触发模块名(对应产品模块)
- `trigger_action`:触发动作描述
- `must_test_features`:必须连带验证的特性列表
- `reason`:关联原因说明
- 每条规则帮助 req-test-cases 在生成测试点时自动补充必测点

## 填写示例(根据你的产品特性调整)
| rule_id | trigger_module | trigger_action | must_test_features | reason |
|---------|---------------|----------------|--------------------|--------|
| FR001 | 配置中心-标签管理 | 新增/修改标签 | 探索发现-市场-筛选, 我的资源-标签展示 | 标签是市场和资源列表的筛选维度 |
| FR002 | 配置中心-扩展属性 | 新增/修改扩展属性 | 对应资源的详情页, 对应资源的编辑页 | 扩展属性绑定到具体资源类型 |
| FR003 | 消息中心 | 新增消息类型 | 对应触发模块-消息发送, 消息中心-消息列表 | 消息类型变更需验证发送和接收全链路 |

第一步完成:你现在有了 15 条通用审查规则 + 5 类专项审查清单(共 11 条专项规则),覆盖了输入字段、异常处理、权限安全、兼容性、数据状态、审计日志、交互体验 7 大维度。


第二步:创建 4 个 Skill 文件

2.1 创建 req-review(主协调器)

创建文件 .codex/skills/req-review/SKILL.md

markdown 复制代码
# 需求评审主 Skill (req-review)

## 概述
本 Skill 负责对产品需求进行结构化评审,通过主从编排串联关联分析和审查挑战两个子 Skill,最终产出评审报告。

## 输入
- 需求描述文本(用户直接输入或粘贴)
- 可选:需求文档路径(`产品需求文档/` 下的 md 文件)

## 工作流(3 步)

### Step 1: 输入理解与需求解析
1. 理解用户输入的需求内容,提取关键信息:
   - 需求所属模块(根据你的产品模块列表填写,如:数据集成 / 工作台 / 我的资源 / 探索发现 / 数据质量 / 配置中心 / 消息中心)
   - 需求类型(新增功能 / 功能优化 / 缺陷修复 / 交互变更 / 权限变更)
   - 涉及的字段、接口、页面入口
2. 生成一个 `slug`(需求简称,英文小写+连字符,如 `connector-create`),用于后续文件命名。
3. 向用户确认解析结果(模块、类型、slug),确认无误后进入 Step 2。

### Step 2: 关联分析(委托 req-review-associator)
1. 调用子 Skill `req-review-associator`,将需求描述和已确认的模块/类型传入。
2. 子 Skill 返回关联分析结果(受影响模块列表 + 受影响用例列表)。
3. 将关联分析结果暂存,进入 Step 3。

### Step 3: 审查挑战(委托 req-review-challenger)
1. 调用子 Skill `req-review-challenger`,将以下内容传入:
   - 原始需求描述
   - Step 1 确认的需求类型
   - Step 2 关联分析结果
2. 子 Skill 返回评审报告内容。
3. 将评审报告写入 `docs/req-review/<slug>-review.md`。
4. 向用户展示评审报告摘要,标记阻塞问题数量和严重问题数量。

## 输出
- 评审报告文件:`docs/req-review/<slug>-review.md`
- 对话中展示的摘要信息

## 知识库引用
- `references/requirement_types.md` --- 需求类型识别表
- `references/review_checklist_common.md` --- 通用审查清单
- `references/review_checklist_by_type/` --- 按类型的专项审查清单
- `references/association_rules.md` --- 关联规则表
- `产品需求文档/` --- 已有产品需求文档
- `cases/` --- 已有测试用例

2.2 创建 req-review-associator(关联分析子 Skill)

创建文件 .codex/skills/req-review-associator/SKILL.md

markdown 复制代码
# 关联分析子 Skill (req-review-associator)

## 概述
单一职责:根据新需求描述,找出受影响的已有模块和相关测试用例。

## 输入
- 需求描述文本
- 已确认的需求所属模块
- 已确认的需求类型

## 工作流

### Step 1: 语义搜索受影响模块
1. 在 `产品需求文档/` 目录下执行语义检索(优先使用语义搜索,搜索词从需求描述中提取关键概念)。
2. 语义搜索失效时降级为文本关键词搜索。
3. 识别出与新需求有功能重叠、数据依赖、流程关联的已有模块。
4. 列出受影响模块清单,附上引用证据(文档路径 + 关键段落摘要)。

### Step 2: 搜索受影响用例
1. 在 `cases/` 目录下搜索与受影响模块相关的已有测试用例。
2. 优先使用语义搜索,失效时降级为文本搜索。
3. 读取 Top 3 匹配用例的文件头(类名、用例描述、测试步骤摘要),了解已有测试覆盖范围。
4. 列出受影响用例清单,附上引用证据(文件路径 + 用例描述摘要)。

### Step 3: 读取关联规则表
1. 读取 `req-review/references/association_rules.md`(如存在)。
2. 如果关联规则表中有匹配的规则,补充到关联分析结果中。

## 输出
返回 Markdown 格式的关联分析结果(不落盘,由主 Skill 合并到评审报告):

```markdown
## 关联分析

### 受影响模块
| 模块 | 关联原因 | 引用证据 |
|------|----------|----------|
| <模块名> | <原因> | <文档路径> |

### 受影响用例
| 用例文件 | 关联原因 | 引用证据 |
|----------|----------|----------|
| <文件路径> | <原因> | <用例描述摘要> |

### 关联规则匹配(如有)
| 规则 ID | 触发条件 | 建议验证点 |
|---------|----------|------------|
```

## 知识库引用
- `产品需求文档/` --- 已有产品需求文档(语义搜索目标)
- `cases/` --- 已有测试用例(语义搜索目标)
- `req-review/references/association_rules.md` --- 关联规则表

2.3 创建 req-review-challenger(审查挑战子 Skill)

创建文件 .codex/skills/req-review-challenger/SKILL.md

markdown 复制代码
# 审查挑战子 Skill (req-review-challenger)

## 概述
单一职责:按照审查清单逐条挑战需求,发现缺失、矛盾、模糊之处,组装评审报告。

## 输入
- 原始需求描述
- 需求类型(来自主 Skill Step 1 确认结果)
- 关联分析结果(来自 associator 子 Skill)

## 工作流

### Step 1: 加载审查清单
1. 读取 `req-review/references/requirement_types.md`,确认需求类型是否命中已知类型。
2. 始终加载 `req-review/references/review_checklist_common.md`(通用审查清单)。
3. 如果需求类型命中,加载 `req-review/references/review_checklist_by_type/<type>.md`(专项审查清单)。
4. 如果类型表为空或未命中,仅使用通用清单。

### Step 2: 逐条挑战
对加载的每一条审查规则:
1. 读取规则的"命中条件",判断当前需求是否触发该规则。
2. 如果触发,按规则的"检查问题"逐条分析需求中是否已有明确说明。
3. 如果需求未覆盖该检查点,记录为 finding。
4. 结合关联分析结果,判断是否需要跨模块验证。

### Step 3: 分级归类
将发现的 finding 按严重度分级:
- **🚨 阻塞问题(Blocker)**:需求缺失导致无法设计用例
- **⚠️ 严重问题(Major)**:影响范围大,需 PM 确认
- **📝 建议改进(Minor)**:不影响用例设计,但建议完善
- **ℹ️ 信息确认(Info)**:关联模块影响,需确认

### Step 4: 组装报告
按以下结构组装评审报告:

```markdown
# <需求名称> 需求评审报告

## 基本信息
- 需求 slug: <slug>
- 所属模块: <模块>
- 需求类型: <类型>
- 评审日期: <日期>

## 关联分析
<来自 associator 的结果>

## 🚨 阻塞问题(Blocker)
### B<N>. <问题标题>
- **命中规则**: <规则 ID 和名称>
- **问题**: <问题描述>
- **引用证据**: <相关文档/用例路径>
- **给 PM 的追问**: <具体追问>

## ⚠️ 严重问题(Major)
...

## 📝 建议改进(Minor)
...

## ℹ️ 信息确认(Info)
...

## 评审统计
- 阻塞问题: <数量>
- 严重问题: <数量>
- 建议改进: <数量>
- 信息确认: <数量>
```

## 输出
完整的评审报告 Markdown 内容,由主 Skill 写入文件。

## 知识库引用
- `req-review/references/review_checklist_common.md` --- 通用审查清单(必加载)
- `req-review/references/requirement_types.md` --- 需求类型识别表
- `req-review/references/review_checklist_by_type/` --- 按类型的专项审查清单

2.4 创建 req-test-cases(用例生成器)

创建文件 .codex/skills/req-test-cases/SKILL.md

markdown 复制代码
# 手工用例生成 Skill (req-test-cases)

## 概述
两阶段工作流:先生成测试点清单(轻量),用户确认后再展开为详细手工用例。

## 输入
- 需求评审报告(`docs/req-review/<slug>-review.md`)或原始需求描述
- 可选:用户对测试点的补充说明

## 工作流

### Phase 1: 生成测试点清单

#### Step 1: 读取需求与评审结果
1. 如果提供了评审报告路径,读取报告内容。
2. 如果只有需求描述,直接使用需求描述。
3. 提取需求中的功能点、字段、交互入口。

#### Step 2: 加载业务规则
1. 读取 `references/feature_impact_rules.md`(如存在且非空)。
2. 匹配当前需求涉及的模块和动作,找出 `must_test_features`(必测特性)。
3. 将命中的必测特性纳入测试点规划。

#### Step 3: 语义搜索已有用例
1. 在 `cases/` 目录下执行 2-3 次语义搜索,关键词为需求涉及的模块名和功能关键词。
2. 读取 Top 3 匹配用例的文件头,了解步骤粒度和写法风格。
3. 标记"关联用例参考"用于后续用例编写。

#### Step 4: 生成测试点清单
按优先级分层生成测试点:

- **🟥 最高 - 核心功能**:核心功能的正常路径
- **🟧 较高 - 边缘功能 & 核心功能的异常路径 & 核心功能的边界值**
- **🟦 一般 - 边缘功能的边界值 & 边缘功能的异常路径**
- **🟨 低 - 兼容性 & 权限 & 多环境**
- **⬜ 暂不测试 / 待澄清**:依赖 PM 澄清的测试点

#### Step 5: 写入文件并等待确认
1. 将测试点清单写入 `docs/req-review/<slug>-test-cases.md`。
2. 文件头设置 `status: 测试点待确认`。
3. 在对话中展示测试点清单摘要,明确告知用户:
   - "请确认以上测试点,你可以:直接回复「确认,生成用例」/ 删除不需要的测试点 / 补充新的测试点"
4. **停止执行,等待用户反馈。**

### Phase 2: 展开手工用例(用户确认后执行)

#### Step 1: 读取测试点清单
1. 读取 `docs/req-review/<slug>-test-cases.md`。
2. 解析用户确认后的测试点列表。

#### Step 2: 加载业务规则(补充验证)
1. 再次读取 `references/feature_impact_rules.md`。
2. 检查业务规则中是否有"测试要点"需要在用例步骤中体现。

#### Step 3: 展开手工用例
为每个测试点生成结构化手工用例,使用以下表格格式:

```markdown
| 用例名称 | 前置条件 | 关键词 | 优先级 | 用例类型 | 适用阶段 | 用例状态 | 步骤 | 预期 |
| -------- | -------- | ------ | ------ | -------- | -------- | -------- | ---- | ---- |
| <一级目录>-<二级目录>-<功能点序号><功能点>-<测试点>功能测试 | - <条件1><br/>- <条件2> |  | 最高/较高/一般/低 | 功能测试/安全测试/界面测试/其他 |  | 待评审 | 1. <步骤1><br/>2. <步骤2><br/>... | 1. <结果1><br/>2. <结果2><br/>... |
```

#### Step 4: 覆写文件
1. 将完整用例覆写 `docs/req-review/<slug>-test-cases.md`。
2. 更新 `status: 已生成`。
3. 向用户展示生成结果摘要(用例总数、最高/较高/一般/低 分布)。

## 输出
- 测试用例文件:`docs/req-review/<slug>-test-cases.md`

## 知识库引用
- `references/feature_impact_rules.md` --- 产品特性关联规则(业务规则)
- `cases/` --- 已有测试用例(语义搜索参考)
- `产品需求文档/` --- 已有产品需求文档

第二步完成 :你现在有了完整的 4 个 Skill 文件。req-review 作为主协调器,associatorchallenger 各司其职,req-test-cases 负责两阶段用例生成。


第三步:准备需求文档和用例目录

Skill 需要读写以下目录,确保它们存在:

bash 复制代码
mkdir -p "产品需求文档"
mkdir -p cases
mkdir -p docs/req-review
  • 产品需求文档/:存放你的产品需求 MD 文件(按模块组织)
  • cases/:存放已有测试用例(AI 会参考写法风格)
  • docs/req-review/:AI 输出的评审报告和用例文件

第四步:验证------跑一次完整流程

现在来完整演示一次。假设你有一个需求文档 产品需求文档/4.我的资源/数据资源/数据资源.md,其中 §2.2.5 描述了"上传数据-替换、追加"功能。

4.1 阶段一:触发需求评审

在 codex 对话框中输入:

复制代码
@req-review 请评审 产品需求文档/4.我的资源/数据资源/数据资源.md 中 §2.2.5 上传数据-替换、追加 的需求

AI 会执行 3 个步骤:

Step 1 --- 解析需求 :AI 提取出模块="我的资源 > 数据资源",类型="功能优化"(因为关键词"替换/追加"属于"调整/修改"范畴),生成 slug=upload-replace-append,然后向你确认。

Step 2 --- 关联分析 :AI 搜索 产品需求文档/cases/ 目录,找出受影响模块。例如发现:

  • 消息中心(上传任务进度通知)
  • 数据建模(替换后的数据作为建模输入)
  • 数据市场(已发布数据被替换后的同步)

Step 3 --- 逐条审查:AI 加载通用清单 15 条 + 优化专项清单 2 条,逐条判断命中条件。命中的规则触发检查,未覆盖的检查点记录为问题。

最终输出评审报告 docs/req-review/upload-replace-append-review.md,包含类似这样的问题清单:

严重度 数量 示例
🚨 阻塞 3 追加字段不匹配策略未定义、替换结构不一致边界未定义、目标表范围兼容性
⚠️ 严重 5 已发布市场冲突校验、追加交互范围、替换交互定义、不匹配提示文案、空间不足
📝 建议 4 清空二次确认、行数超限、敏感数据校验、目标表选择交互
ℹ️ 确认 3 已有评审关联、数据结构刷新、审计日志

4.2 阶段二:需求澄清(最关键的人机协作环节)

评审报告给出了 12 个问题,但 AI 不知道答案。你需要把问题丢给 PM。PM 在问题后面直接回复(不需要写完整句子):

复制代码
B-01. 追加时字段名称不匹配的处理策略未定义:
  报错阻止,大小写敏感,提示具体文案

B-02. 替换时数据结构"可以不一致"的边界未定义:
  列名必须一致,字段类型可重新定义,字段数量不减少

B-03. 目标表选择范围缩小为仅「离线上传」,是否存在兼容性问题:
  仅限于离线上传

M-01. 追加/替换时"已发布到市场"的冲突校验仍然缺失:
  自动同步更新,不需要二次确认

M-02. 追加时数据结构"不允许修改"的交互范围未明确:
  全部置灰不可编辑,但能看到原表结构

M-03. 替换模式下用户手动修改数据结构的交互定义不完整:
  交互规则与离线上传(新增)一致

M-04. 追加时字段名称对应失败后的用户引导不明确:
  需要具体的提示文案(多余列/缺失列/名称不匹配/格式不匹配四种场景)

M-05. 替换/追加操作的空间不足处理:
  暂不考虑

📝 建议改进(Minor):帮我改进

将以上回复发给 AI,AI 自动完成 5 件事:

动作 效果
① 整理澄清结论 将简短回复展开为结构化结论,标注命中规则
② 同步更新需求文档 将规则、文案、交互细节补充到需求文档对应章节
③ 更新评审报告 问题标记 ✅ 已解决,附上澄清结论
④ 处理 Minor 建议 "帮我改进"的建议自动给出设计方案(二次确认弹窗、行数上限校验等)
⑤ 生成衍生问题 如有新模糊点,生成衍生待澄清问题

这一轮之后:3 个阻塞 + 5 个严重全部清零,4 个建议全部设计完成。 需求文档从"模糊"变成"完整"。

这就是这套工具价值最大的一步:以前测试工程师要分 3-4 次、在 IM 上零散地追问 PM,现在所有问题一次性列出来,PM 一次性回复,文档一次性补全。

4.3 阶段三:生成测试用例

需求已经完整了,现在生成用例:

复制代码
@req-test-cases 帮我生成这部分的功能用例:#### 2.2.5 上传数据-替换、追加
(粘贴已澄清后的需求内容)

Phase 1:AI 生成测试点清单(56 条),按优先级分层展示,等待确认。

Phase 2:你确认后(可以说"确认,生成用例",也可以"删除 T15"或"补充 XX 场景"),AI 展开为 54 条完整手工用例,格式统一:

用例名称 前置条件 关键词 优先级 用例类型 适用阶段 用例状态 步骤 预期

第五步:适配到你自己的项目

5.1 改模块列表

编辑 req-review/SKILL.md 的 Step 1,把模块列表改成你产品的模块:

复制代码
- 需求所属模块(你的模块A / 你的模块B / 你的模块C / ...)

5.2 补充关联规则(重要!)

association_rules.mdfeature_impact_rules.md 初始为空。但你可以根据对自己产品的了解,把模块间的隐式依赖填进去。例如:

association_rules.md 中补充:

复制代码
| AR001 | 配置中心 | 标签变更 | 探索发现-市场, 我的资源-分类 | 标签是市场和资源列表的筛选维度 |
| AR002 | 消息中心 | 新增消息类型 | 所有触发模块 | 消息类型变更影响所有发送方 |

feature_impact_rules.md 中补充:

复制代码
| FR001 | 数据集成-连接管理 | 新增连接类型 | 工作台-数据源选择, 我的资源-数据列表 | 连接类型是所有数据操作的入口 |

这些规则填得越全,AI 的关联分析和必测点推荐就越准。

5.3 调整用例格式

如果你的团队用不同的用例模板(比如多了一列"测试数据"),编辑 req-test-cases/SKILL.md 中 Phase 2 Step 3 的表格格式即可。


常见问题

Q: 审查清单会不会太长,导致 AI 输出太多无用问题?

A: 每条规则都有"命中条件",只有命中的规则才会触发检查。比如"URL 字段格式校验"只在需求出现 URL 相关描述时才触发。15 条通用规则在单次评审中通常只命中 5-8 条。

Q: 关联规则表是空的,AI 怎么找受影响模块?

A: AI 会通过语义搜索在 产品需求文档/ 中找相关内容。关联规则表的作用是补充 AI 搜索不到的"隐式依赖"(比如改标签配置会影响市场筛选,这种依赖很难通过文本搜索发现)。建议每次评审后把发现的隐式关联补进去。

Q: 我没有任何技术背景,能搭建这套 Skills 吗?

A: 可以。所有文件都是纯 Markdown 格式的自然语言指令,不需要写任何代码。本文每一步都给出了完整的文件内容,复制粘贴即可。

Q: 搭建后怎么分享给团队?

A: .codex/skills/ 目录在项目仓库里,提交到 Git 后团队成员 clone 下来就能用。审查规则(references)也可以让团队成员共同维护。


总结

环节 以前 搭建这套 Skills 后
需求评审 逐字读文档,凭经验找遗漏 AI 按 15 条通用 + 11 条专项规则逐条扫描
需求澄清 IM 上零散追问 PM,容易遗漏 所有问题一次性列出来,PM 一次性回复,文档一次性补全
写测试用例 正常流程居多,异常路径靠记忆 异常路径和边界值自动覆盖,54 条用例覆盖 7 个维度
经验传承 靠人传人,离职即流失 沉淀在审查清单和关联规则中,越用越强

这套工具的核心不是 AI 有多聪明,而是把测试工程师的审查方法结构化、可复用、不遗漏。当你的审查清单覆盖了 15 条规则,AI 每次评审都会逐一扫描------不会因为加班太晚漏掉"权限校验",不会因为需求太长忘了"空数据处理"。

相关推荐
oscar9991 个月前
Katalon Studio 11.2.0 发布:AI 对话历史、智能录制器进阶配置与工具链大整合
ai 测试·katalon
顾三殇2 年前
【AI 测试】Linux 查看日志与压测命令:FinalShell 查看 AI 语言大模型问答实时日志与 TTS 压测
linux·人工智能·jmeter·nmon·ai 测试·语言大模型测试