164 lines
3.6 KiB
Markdown
164 lines
3.6 KiB
Markdown
<!-- 由 BMAD™ Core 驱动 -->
|
||
|
||
# qa-gate
|
||
|
||
根据审查结果为故事创建或更新质量门禁决策文件。
|
||
|
||
## 目的
|
||
|
||
生成一个独立的质量门禁文件,提供明确的通过/失败决策和可操作的反馈。此门禁作为团队了解质量状态的咨询性检查点。
|
||
|
||
## 先决条件
|
||
|
||
- 故事已经过审查(手动或通过review-story任务)
|
||
- 审查结果可用
|
||
- 了解故事需求和实现
|
||
|
||
## 门禁文件位置
|
||
|
||
**始终**检查`bmad-core/core-config.yaml`中的`qa.qaLocation/gates`
|
||
|
||
**别名规则:**
|
||
|
||
- 转换为小写
|
||
- 用连字符替换空格
|
||
- 去除标点符号
|
||
- 示例:“User Auth - Login!”变为“user-auth-login”
|
||
|
||
## 最低要求的模式
|
||
|
||
```yaml
|
||
schema: 1
|
||
story: '{epic}.{story}'
|
||
gate: PASS|CONCERNS|FAIL|WAIVED
|
||
status_reason: '1-2句话解释门禁决策'
|
||
reviewer: 'Quinn'
|
||
updated: '{ISO-8601时间戳}'
|
||
top_issues: [] # 如果没有问题则为空数组
|
||
waiver: { active: false } # 仅在WAIVED时设置active: true
|
||
```
|
||
|
||
## 带有问题的模式
|
||
|
||
```yaml
|
||
schema: 1
|
||
story: '1.3'
|
||
gate: CONCERNS
|
||
status_reason: '认证端点上缺少速率限制,存在安全风险。'
|
||
reviewer: 'Quinn'
|
||
updated: '2025-01-12T10:15:00Z'
|
||
top_issues:
|
||
- id: 'SEC-001'
|
||
severity: high # 仅限:low|medium|high
|
||
finding: '登录端点上没有速率限制'
|
||
suggested_action: '在生产前添加速率限制中间件'
|
||
- id: 'TEST-001'
|
||
severity: medium
|
||
finding: '认证流程没有集成测试'
|
||
suggested_action: '添加集成测试覆盖'
|
||
waiver: { active: false }
|
||
```
|
||
|
||
## 豁免时的模式
|
||
|
||
```yaml
|
||
schema: 1
|
||
story: '1.3'
|
||
gate: WAIVED
|
||
status_reason: '为MVP版本接受了已知问题。'
|
||
reviewer: 'Quinn'
|
||
updated: '2025-01-12T10:15:00Z'
|
||
top_issues:
|
||
- id: 'PERF-001'
|
||
severity: low
|
||
finding: '有1000+个项目时仪表板加载缓慢'
|
||
suggested_action: '在下一个冲刺中实现分页'
|
||
waiver:
|
||
active: true
|
||
reason: 'MVP版本 - 性能优化已推迟'
|
||
approved_by: '产品负责人'
|
||
```
|
||
|
||
## 门禁决策标准
|
||
|
||
### PASS
|
||
|
||
- 所有验收标准均已满足
|
||
- 没有高严重性问题
|
||
- 测试覆盖率符合项目标准
|
||
|
||
### CONCERNS
|
||
|
||
- 存在非阻塞性问题
|
||
- 应进行跟踪和安排
|
||
- 可以在知情的情况下继续进行
|
||
|
||
### FAIL
|
||
|
||
- 未满足验收标准
|
||
- 存在高严重性问题
|
||
- 建议返回到进行中状态
|
||
|
||
### WAIVED
|
||
|
||
- 问题已明确接受
|
||
- 需要批准和理由
|
||
- 尽管存在已知问题,仍继续进行
|
||
|
||
## 严重性等级
|
||
|
||
**固定值 - 无变体:**
|
||
|
||
- `low`: 次要问题,外观问题
|
||
- `medium`: 应尽快修复,非阻塞性
|
||
- `high`: 严重问题,应阻止发布
|
||
|
||
## 问题ID前缀
|
||
|
||
- `SEC-`: 安全问题
|
||
- `PERF-`: 性能问题
|
||
- `REL-`: 可靠性问题
|
||
- `TEST-`: 测试差距
|
||
- `MNT-`: 可维护性问题
|
||
- `ARCH-`: 架构问题
|
||
- `DOC-`: 文档差距
|
||
- `REQ-`: 需求问题
|
||
|
||
## 输出要求
|
||
|
||
1. **始终**在`bmad-core/core-config.yaml`中的`qa.qaLocation/gates`创建门禁文件
|
||
2. **始终**将此确切格式附加到故事的QA结果部分:
|
||
|
||
```text
|
||
Gate: {STATUS} → qa.qaLocation/gates/{epic}.{story}-{slug}.yml
|
||
```
|
||
|
||
3. 将status_reason保持在最多1-2句话
|
||
4. 完全使用严重性值:`low`、`medium`或`high`
|
||
|
||
## 示例故事更新
|
||
|
||
创建门禁文件后,附加到故事的QA结果部分:
|
||
|
||
```markdown
|
||
## QA结果
|
||
|
||
### 审查日期:2025-01-12
|
||
|
||
### 审查员:Quinn(测试架构师)
|
||
|
||
[...现有审查内容...]
|
||
|
||
### 门禁状态
|
||
|
||
Gate: CONCERNS → qa.qaLocation/gates/{epic}.{story}-{slug}.yml
|
||
```
|
||
|
||
## 关键原则
|
||
|
||
- 保持最小化和可预测性
|
||
- 固定的严重性等级(低/中/高)
|
||
- 始终写入标准路径
|
||
- 始终用门禁参考更新故事
|
||
- 清晰、可操作的发现
|