BMAD-METHOD/bmad-core/tasks/trace-requirements.md

267 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 由 BMAD™ Core 驱动 -->
# 跟踪需求
使用Given-When-Then模式将故事需求映射到测试用例以实现全面的可追溯性。
## 目的
创建一个需求可追溯性矩阵,确保每个验收标准都有相应的测试覆盖。此任务有助于识别测试中的差距,并确保所有需求都得到验证。
**重要提示**此处使用Given-When-Then来记录需求和测试之间的映射而不是编写实际的测试代码。测试应遵循您项目的测试标准测试代码中不使用BDD语法
## 先决条件
- 具有明确验收标准的故事文件
- 访问测试文件或测试规范
- 理解实现
## 可追溯性流程
### 1. 提取需求
从以下来源识别所有可测试的需求:
- 验收标准(主要来源)
- 用户故事陈述
- 具有特定行为的任务/子任务
- 提到的非功能性需求
- 记录的边缘情况
### 2. 映射到测试用例
对于每个需求记录哪些测试对其进行验证。使用Given-When-Then描述测试验证的内容而不是如何编写
```yaml
requirement: 'AC1用户可以使用有效凭据登录'
test_mappings:
- test_file: 'auth/login.test.ts'
test_case: '应该使用有效的电子邮件和密码成功登录'
# Given-When-Then描述测试验证的内容而不是如何编码
given: '一个具有有效凭据的注册用户'
when: '他们提交登录表单'
then: '他们被重定向到仪表板并创建了会话'
coverage: full
- test_file: 'e2e/auth-flow.test.ts'
test_case: '完整的登录流程'
given: '用户在登录页面上'
when: '输入有效凭据并提交'
then: '仪表板加载用户数据'
coverage: integration
```
### 3. 覆盖率分析
评估每个需求的覆盖率:
**覆盖级别:**
- `full`:需求已完全测试
- `partial`:部分方面已测试,存在差距
- `none`:未找到测试覆盖
- `integration`:仅在集成/端到端测试中覆盖
- `unit`:仅在单元测试中覆盖
### 4. 差距识别
记录发现的任何差距:
```yaml
coverage_gaps:
- requirement: 'AC3密码重置邮件在60秒内发送'
gap: '没有测试邮件发送时间'
severity: medium
suggested_test:
type: integration
description: '测试邮件服务SLA合规性'
- requirement: 'AC5支持1000个并发用户'
gap: '未实现负载测试'
severity: high
suggested_test:
type: performance
description: '使用1000个并发连接进行负载测试'
```
## 输出
### 输出1门禁YAML块
**生成用于粘贴到门禁文件的`trace`下:**
```yaml
trace:
totals:
requirements: X
full: Y
partial: Z
none: W
planning_ref: 'qa.qaLocation/assessments/{epic}.{story}-test-design-{YYYYMMDD}.md'
uncovered:
- ac: 'AC3'
reason: '未找到密码重置时间的测试'
notes: '参见 qa.qaLocation/assessments/{epic}.{story}-trace-{YYYYMMDD}.md'
```
### 输出2可追溯性报告
**保存到:** `qa.qaLocation/assessments/{epic}.{story}-trace-{YYYYMMDD}.md`
创建具有以下内容的可追溯性报告:
```markdown
# 需求可追溯性矩阵
## 故事:{epic}.{story} - {title}
### 覆盖率摘要
- 总需求数X
- 完全覆盖Y (Z%)
- 部分覆盖A (B%)
- 未覆盖C (D%)
### 需求映射
#### AC1{验收标准1}
**覆盖率FULL**
Given-When-Then映射
- **单元测试**`auth.service.test.ts::validateCredentials`
- Given有效的用户凭据
- When调用验证方法
- Then返回true和用户对象
- **集成测试**`auth.integration.test.ts::loginFlow`
- Given具有有效帐户的用户
- When调用登录API
- Then返回JWT令牌并创建会话
#### AC2{验收标准2}
**覆盖率PARTIAL**
[继续所有AC...]
### 关键差距
1. **性能要求**
- 差距:没有针对并发用户的负载测试
- 风险:高 - 可能在生产负载下失败
- 措施使用k6或类似工具实施负载测试
2. **安全要求**
- 差距:未测试速率限制
- 风险:中 - 潜在的DoS漏洞
- 措施:向集成套件添加速率限制测试
### 测试设计建议
根据发现的差距,建议:
1. 需要额外的测试场景
2. 要实施的测试类型(单元/集成/端到端/性能)
3. 测试数据要求
4. 模拟/桩策略
### 风险评估
- **高风险**:没有覆盖的需求
- **中风险**:仅部分覆盖的需求
- **低风险**:具有完整单元+集成覆盖的需求
```
## 可追溯性最佳实践
### 使用Given-When-Then进行映射而非测试代码
使用Given-When-Then记录每个测试验证的内容
**Given**:测试设置的初始上下文
- 测试准备的状态/数据
- 模拟的用户上下文
- 系统先决条件
**When**:测试执行的操作
- 测试执行的内容
- 测试的API调用或用户操作
- 触发的事件
**Then**:测试断言的内容
- 验证的预期结果
- 检查的状态更改
- 验证的值
**注意**这仅用于文档记录。实际的测试代码遵循您项目的标准例如describe/it块无BDD语法
### 覆盖优先级
根据以下内容确定覆盖优先级:
1. 关键业务流程
2. 与安全相关的需求
3. 数据完整性需求
4. 面向用户的功能
5. 性能SLA
### 测试粒度
在适当的级别上进行映射:
- 业务逻辑的单元测试
- 组件交互的集成测试
- 用户旅程的端到端测试
- NFR的性能测试
## 质量指标
良好的可追溯性显示:
- 每个AC至少有一个测试
- 关键路径有多个测试级别
- 明确覆盖了边缘情况
- NFR有适当的测试类型
- 每个测试都有清晰的Given-When-Then
## 危险信号
注意:
- 没有测试覆盖的AC
- 未映射到需求的测试
- 模糊的测试描述
- 缺少边缘情况覆盖
- 没有特定测试的NFR
## 与质量门的集成
这种可追溯性为质量门提供信息:
- 严重差距 → FAIL
- 次要差距 → CONCERNS
- 缺少来自test-design的P0测试 → CONCERNS
### 输出3故事钩子行
**打印此行以供审查任务引用:**
```text
跟踪矩阵qa.qaLocation/assessments/{epic}.{story}-trace-{YYYYMMDD}.md
```
- 完全覆盖 → PASS贡献
## 关键原则
- 每个需求都必须是可测试的
- 使用Given-When-Then以求清晰
- 识别存在和缺失
- 基于风险进行优先级排序
- 使建议可操作