356 lines
7.9 KiB
Markdown
356 lines
7.9 KiB
Markdown
<!-- 由 BMAD™ Core 驱动 -->
|
||
|
||
# 风险概况
|
||
|
||
使用概率×影响分析,为故事实施生成全面的风险评估矩阵。
|
||
|
||
## 输入
|
||
|
||
```yaml
|
||
required:
|
||
- story_id: '{epic}.{story}' # 例如, "1.3"
|
||
- story_path: 'docs/stories/{epic}.{story}.*.md'
|
||
- story_title: '{title}' # 如果缺少,则从故事文件的H1派生
|
||
- story_slug: '{slug}' # 如果缺少,则从标题派生(小写,连字符连接)
|
||
```
|
||
|
||
## 目的
|
||
|
||
识别、评估和优先处理故事实施中的风险。根据风险级别提供风险缓解策略和测试重点领域。
|
||
|
||
## 风险评估框架
|
||
|
||
### 风险类别
|
||
|
||
**类别前缀:**
|
||
|
||
- `TECH`: 技术风险
|
||
- `SEC`: 安全风险
|
||
- `PERF`: 性能风险
|
||
- `DATA`: 数据风险
|
||
- `BUS`: 业务风险
|
||
- `OPS`: 运营风险
|
||
|
||
1. **技术风险 (TECH)**
|
||
- 架构复杂性
|
||
- 集成挑战
|
||
- 技术债务
|
||
- 可扩展性问题
|
||
- 系统依赖
|
||
|
||
2. **安全风险 (SEC)**
|
||
- 认证/授权缺陷
|
||
- 数据泄露漏洞
|
||
- 注入攻击
|
||
- 会话管理问题
|
||
- 加密弱点
|
||
|
||
3. **性能风险 (PERF)**
|
||
- 响应时间下降
|
||
- 吞吐量瓶颈
|
||
- 资源耗尽
|
||
- 数据库查询优化
|
||
- 缓存失败
|
||
|
||
4. **数据风险 (DATA)**
|
||
- 数据丢失的可能性
|
||
- 数据损坏
|
||
- 侵犯隐私
|
||
- 合规性问题
|
||
- 备份/恢复差距
|
||
|
||
5. **业务风险 (BUS)**
|
||
- 功能不符合用户需求
|
||
- 收入影响
|
||
- 声誉损害
|
||
- 法规不合规
|
||
- 市场时机
|
||
|
||
6. **运营风险 (OPS)**
|
||
- 部署失败
|
||
- 监控差距
|
||
- 事件响应准备情况
|
||
- 文档不足
|
||
- 知识转移问题
|
||
|
||
## 风险分析流程
|
||
|
||
### 1. 风险识别
|
||
|
||
为每个类别识别具体风险:
|
||
|
||
```yaml
|
||
risk:
|
||
id: 'SEC-001' # 使用前缀:SEC, PERF, DATA, BUS, OPS, TECH
|
||
category: security
|
||
title: '用户表单输入验证不足'
|
||
description: '表单输入未正确清理可能导致XSS攻击'
|
||
affected_components:
|
||
- 'UserRegistrationForm'
|
||
- 'ProfileUpdateForm'
|
||
detection_method: '代码审查发现缺少验证'
|
||
```
|
||
|
||
### 2. 风险评估
|
||
|
||
使用概率×影响评估每个风险:
|
||
|
||
**概率级别:**
|
||
|
||
- `高 (3)`: 很可能发生 (>70%的几率)
|
||
- `中 (2)`: 可能发生 (30-70%的几率)
|
||
- `低 (1)`: 不太可能发生 (<30%的几率)
|
||
|
||
**影响级别:**
|
||
|
||
- `高 (3)`: 严重后果(数据泄露、系统宕机、重大财务损失)
|
||
- `中 (2)`: 中等后果(性能下降、轻微数据问题)
|
||
- `低 (1)`: 轻微后果(外观问题、轻微不便)
|
||
|
||
### 风险评分 = 概率 × 影响
|
||
|
||
- 9: 严重风险 (红色)
|
||
- 6: 高风险 (橙色)
|
||
- 4: 中风险 (黄色)
|
||
- 2-3: 低风险 (绿色)
|
||
- 1: 极小风险 (蓝色)
|
||
|
||
### 3. 风险优先级排序
|
||
|
||
创建风险矩阵:
|
||
|
||
```markdown
|
||
## 风险矩阵
|
||
|
||
| 风险ID | 描述 | 概率 | 影响 | 评分 | 优先级 |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| SEC-001 | XSS漏洞 | 高 (3) | 高 (3) | 9 | 严重 |
|
||
| PERF-001 | 仪表板查询缓慢 | 中 (2) | 中 (2) | 4 | 中 |
|
||
| DATA-001 | 备份失败 | 低 (1) | 高 (3) | 3 | 低 |
|
||
```
|
||
|
||
### 4. 风险缓解策略
|
||
|
||
为每个已识别的风险提供缓解措施:
|
||
|
||
```yaml
|
||
mitigation:
|
||
risk_id: 'SEC-001'
|
||
strategy: '预防性' # 预防性|检测性|纠正性
|
||
actions:
|
||
- '实施输入验证库(例如,validator.js)'
|
||
- '添加CSP头以防止XSS执行'
|
||
- '在存储前清理所有用户输入'
|
||
- '在模板中对所有输出进行转义'
|
||
testing_requirements:
|
||
- '使用OWASP ZAP进行安全测试'
|
||
- '对表单进行手动渗透测试'
|
||
- '验证函数的单元测试'
|
||
residual_risk: '低 - 可能仍存在一些零日漏洞'
|
||
owner: 'dev'
|
||
timeline: '部署前'
|
||
```
|
||
|
||
## 输出
|
||
|
||
### 输出1:门禁YAML块
|
||
|
||
生成用于粘贴到门禁文件的`risk_summary`下的内容:
|
||
|
||
**输出规则:**
|
||
|
||
- 仅包括评估的风险;不要输出占位符
|
||
- 在输出最高风险和任何表格列表时,按分数(降序)对风险进行排序
|
||
- 如果没有风险:总数全为零,省略最高风险,保持建议数组为空
|
||
|
||
```yaml
|
||
# risk_summary(粘贴到门禁文件):
|
||
risk_summary:
|
||
totals:
|
||
critical: X # 评分 9
|
||
high: Y # 评分 6
|
||
medium: Z # 评分 4
|
||
low: W # 评分 2-3
|
||
highest:
|
||
id: SEC-001
|
||
score: 9
|
||
title: '个人资料表单上的XSS'
|
||
recommendations:
|
||
must_fix:
|
||
- '添加入口清理和CSP'
|
||
monitor:
|
||
- '为认证端点添加安全警报'
|
||
```
|
||
|
||
### 输出2:Markdown报告
|
||
|
||
**保存到:** `qa.qaLocation/assessments/{epic}.{story}-risk-{YYYYMMDD}.md`
|
||
|
||
```markdown
|
||
# 风险概况:故事 {epic}.{story}
|
||
|
||
日期:{date}
|
||
审查员:Quinn(测试架构师)
|
||
|
||
## 执行摘要
|
||
|
||
- 已识别风险总数:X
|
||
- 严重风险:Y
|
||
- 高风险:Z
|
||
- 风险评分:XX/100(已计算)
|
||
|
||
## 需要立即关注的严重风险
|
||
|
||
### 1. [ID]:风险标题
|
||
|
||
**评分:9(严重)**
|
||
**概率**:高 - 详细理由
|
||
**影响**:高 - 潜在后果
|
||
**缓解**:
|
||
|
||
- 需要立即采取行动
|
||
- 要采取的具体步骤
|
||
**测试重点**:需要的具体测试场景
|
||
|
||
## 风险分布
|
||
|
||
### 按类别
|
||
|
||
- 安全性:X个风险(Y个严重)
|
||
- 性能:X个风险(Y个严重)
|
||
- 数据:X个风险(Y个严重)
|
||
- 业务:X个风险(Y个严重)
|
||
- 运营:X个风险(Y个严重)
|
||
|
||
### 按组件
|
||
|
||
- 前端:X个风险
|
||
- 后端:X个风险
|
||
- 数据库:X个风险
|
||
- 基础设施:X个风险
|
||
|
||
## 详细风险登记册
|
||
|
||
[包含所有风险、评分和缓解措施的完整表格]
|
||
|
||
## 基于风险的测试策略
|
||
|
||
### 优先级1:严重风险测试
|
||
|
||
- 严重风险的测试场景
|
||
- 所需的测试类型(安全、负载、混沌)
|
||
- 测试数据要求
|
||
|
||
### 优先级2:高风险测试
|
||
|
||
- 集成测试场景
|
||
- 边缘情况覆盖
|
||
|
||
### 优先级3:中/低风险测试
|
||
|
||
- 标准功能测试
|
||
- 回归测试套件
|
||
|
||
## 风险接受标准
|
||
|
||
### 生产前必须修复
|
||
|
||
- 所有严重风险(评分9)
|
||
- 影响安全/数据的高风险
|
||
|
||
### 可以在有缓解措施的情况下部署
|
||
|
||
- 有补偿控制的中等风险
|
||
- 有监控的低风险
|
||
|
||
### 已接受的风险
|
||
|
||
- 记录团队接受的任何风险
|
||
- 包括适当授权的签字
|
||
|
||
## 监控要求
|
||
|
||
部署后监控:
|
||
|
||
- PERF风险的性能指标
|
||
- SEC风险的安全警报
|
||
- 运营风险的错误率
|
||
- 业务风险的业务KPI
|
||
|
||
## 风险审查触发器
|
||
|
||
在以下情况下审查和更新风险概况:
|
||
|
||
- 架构发生重大变化
|
||
- 添加了新的集成
|
||
- 发现了安全漏洞
|
||
- 报告了性能问题
|
||
- 法规要求变更
|
||
```
|
||
|
||
## 风险评分算法
|
||
|
||
计算总体故事风险评分:
|
||
|
||
```text
|
||
基础分 = 100
|
||
对于每个风险:
|
||
- 严重 (9):扣20分
|
||
- 高 (6):扣10分
|
||
- 中 (4):扣5分
|
||
- 低 (2-3):扣2分
|
||
|
||
最低分 = 0(极度危险)
|
||
最高分 = 100(风险极小)
|
||
```
|
||
|
||
## 基于风险的建议
|
||
|
||
根据风险概况,建议:
|
||
|
||
1. **测试优先级**
|
||
- 首先运行哪些测试
|
||
- 需要哪些额外的测试类型
|
||
- 测试环境要求
|
||
|
||
2. **开发重点**
|
||
- 代码审查重点领域
|
||
- 需要额外的验证
|
||
- 要实施的安全控制
|
||
|
||
3. **部署策略**
|
||
- 对高风险更改进行分阶段推出
|
||
- 对有风险的功能使用功能标志
|
||
- 回滚程序
|
||
|
||
4. **监控设置**
|
||
- 要跟踪的指标
|
||
- 要配置的警报
|
||
- 仪表板要求
|
||
|
||
## 与质量门的集成
|
||
|
||
**确定性门映射:**
|
||
|
||
- 任何风险评分≥9 → 门 = 失败(除非豁免)
|
||
- 否则,如果任何评分≥6 → 门 = 关注
|
||
- 否则 → 门 = 通过
|
||
- 未缓解的风险 → 在门中记录
|
||
|
||
### 输出3:故事钩子行
|
||
|
||
**打印此行以供审查任务引用:**
|
||
|
||
```text
|
||
风险概况:qa.qaLocation/assessments/{epic}.{story}-risk-{YYYYMMDD}.md
|
||
```
|
||
|
||
## 关键原则
|
||
|
||
- 尽早并系统地识别风险
|
||
- 使用一致的概率×影响评分
|
||
- 提供可操作的缓解策略
|
||
- 将风险与具体的测试要求联系起来
|
||
- 跟踪缓解后的剩余风险
|
||
- 随着故事的发展更新风险概况
|