BMAD-METHOD/docs/working-in-the-brownfield.md

598 lines
18 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.

# 在棕地中工作:完整指南
> **强烈推荐使用Gemini Web或Gemini CLI进行棕地文档生成**
>
> Gemini Web的1M+令牌上下文窗口或Gemini CLI当它工作时可以一次性分析您的整个代码库或其关键部分当然是在合理范围内
>
> - 通过GitHub URL上传或在项目文件夹中使用gemini cli
> - 如果在Web中工作使用`npx bmad-method flatten`将您的项目展平为单个文件然后将该文件上传到您的Web代理。
## 什么是棕地开发?
棕地开发是指为现有软件项目添加功能、修复错误或进行现代化改造。与绿地(新)项目不同,棕地工作需要理解现有代码、尊重约束,并确保新更改无缝集成而不会破坏现有功能。
## 何时为棕地使用BMad
- 向现有应用程序添加重要的新功能
- 现代化遗留代码库
- 集成新技术或服务
- 重构复杂系统
- 修复需要架构理解的错误
- 记录未记录的系统
## 何时不使用棕地流程
如果您刚刚用BMad完成了MVP并且想继续进行MVP后的工作那么与PM交谈并要求他与您合作创建一个新的史诗以添加到PRD中分片史诗与架构师一起更新任何架构文档然后从那里开始会更容易。
## 完整的棕地工作流
1. **遵循[<ins>用户指南-安装</ins>](user-guide.md#installation)步骤在Web中设置您的代理。**
2. **生成整个代码库的“扁平化”单个文件** 运行:`npx bmad-method flatten`
### 选择您的方法
#### 方法APRD优先推荐用于添加非常大和复杂的新功能、单个或多个史诗或大规模更改
**最适合**大型代码库、monorepos或者当您确切知道要构建什么时
1. **首先创建PRD**来定义需求
2. **仅根据PRD需求记录相关区域**
3. **更高效** - 避免记录未使用的代码
#### 方法B文档优先适用于较小项目
**最适合**:较小的代码库、未知的系统或探索性更改
1. **首先记录整个系统**
2. **用完整的上下文创建PRD**
3. **更彻底** - 捕获所有内容
### 方法APRD优先工作流推荐
#### 阶段1首先定义需求
**在Gemini Web中上传了您的flattened-codebase.xml**
```bash
@pm
*create-brownfield-prd
```
PM将
- **询问您的增强**需求
- **探索代码库**以了解当前状态
- **识别需要文档的受影响区域**
- **创建具有明确范围的专注PRD**
**主要优势**PRD确定了您的monorepo/大型代码库的哪些部分实际上需要文档!
#### 阶段2专注文档
**仍在Gemini Web中现在有了PRD上下文**
```bash
@architect
*document-project
```
架构师将:
- **如果未提供PRD则询问您的重点**
- **提供选项**创建PRD、提供需求或描述增强功能
- **引用PRD/描述**以了解范围
- **专注于PRD或您的描述中识别的相关模块**
- **跳过不相关的区域**以保持文档精简
- **为所有环境生成一个架构文档**
架构师创建:
- **一个遵循fullstack-architecture模板的综合架构文档**
- **在一个文件中涵盖所有系统方面**
- **易于复制并另存为**`docs/architecture.md`
- **如果需要以后可以在IDE中分片**
例如,如果您说“向用户服务添加支付处理”:
- 仅记录用户服务、API端点、数据库模式、支付集成
- 创建仅显示与支付相关的代码路径的专注源树
- 跳过:管理面板、报告模块、不相关的微服务
### 方法B文档优先工作流
#### 阶段1记录现有系统
**最佳方法 - 具有1M+上下文的Gemini Web**
1. **转到Gemini Web** (gemini.google.com)
2. **上传您的项目**
- **选项A**直接粘贴您的GitHub存储库URL
- **选项B**上传您的flattened-codebase.xml文件
3. **加载架构师代理**:上传`dist/agents/architect.txt`
4. **运行文档**:输入`*document-project`
架构师将生成所有内容的综合文档。
#### 阶段2规划您的增强功能
##### 选项A完整的棕地工作流推荐用于重大更改
**1. 创建棕地PRD**
```bash
@pm
*create-brownfield-prd
```
PM代理将
- **分析来自阶段1的现有文档**
- **向您请求具体的增强细节**
- **评估复杂性**并推荐方法
- **为增强功能创建史诗/故事结构**
- **识别风险和集成点**
**PM代理如何获取项目上下文**
- 在Gemini Web中已经从阶段1的文档中获得了完整的项目上下文
- 在IDE中会问“请提供您现有项目文档的路径”
**您会遇到的关键提示**
- “您想添加什么具体的增强或功能?”
- “这是否需要与任何现有系统或API集成
- “我们必须遵守哪些关键约束?”
- “您的时间表和团队规模是多少?”
**2. 创建棕地架构**
```bash
@architect
*create-brownfield-architecture
```
架构师将:
- **审查棕地PRD**
- **设计集成策略**
- **如果需要,规划迁移方法**
- **识别技术风险**
- **定义兼容性要求**
##### 选项B快速增强用于专注的更改
**对于没有完整PRD的单个史诗**
```bash
@pm
*create-brownfield-epic
```
在以下情况下使用:
- 增强功能定义明确且孤立
- 现有文档全面
- 更改不影响多个系统
- 您需要快速周转
**对于单个故事**
```bash
@pm
*create-brownfield-story
```
在以下情况下使用:
- 错误修复或微小功能
- 非常孤立的更改
- 没有架构影响
- 清晰的实施路径
### 阶段3验证规划工件
```bash
@po
*execute-checklist-po
```
PO确保
- 与现有系统兼容
- 没有计划中的重大更改
- 风险缓解策略到位
- 清晰的集成方法
### 阶段4保存和分片文档
1. 将您的PRD和架构另存为
docs/prd.md
docs/architecture.md
注意如果管理多个版本您可以选择性地以“brownfield-”为前缀)
2. 分片您的文档:
在您的IDE中
```bash
@po
shard docs/prd.md
```
```bash
@po
shard docs/architecture.md
```
### 阶段5过渡到开发
**遵循[<ins>增强的IDE开发工作流</ins>](enhanced-ide-development-workflow.md)**
## 棕地最佳实践
### 1. 始终先记录
即使您认为自己了解代码库:
- 运行`document-project`以捕获当前状态
- AI代理需要这个上下文
- 发现未记录的模式
### 2. 尊重现有模式
棕地模板专门寻找:
- 当前的编码约定
- 现有的架构模式
- 技术约束
- 团队偏好
### 3. 规划逐步推出
棕地更改应:
- 支持功能标志
- 规划回滚策略
- 包括迁移脚本
- 保持向后兼容性
### 4. 彻底测试集成
#### 为什么测试架构师对棕地至关重要
在棕地项目中测试架构师Quinn成为您防止破坏现有功能的安全网。与您从头开始构建的绿地不同棕地需要仔细验证新更改不会破坏已经正常工作的内容。
#### 棕地特定的测试挑战
测试架构师解决了独特的棕地复杂性:
| **挑战** | **测试架构师如何帮助** | **命令** |
| --- | --- | --- |
| **回归风险** | 识别哪些现有功能可能会中断 | `*risk` |
| **遗留依赖** | 映射集成点和隐藏的依赖关系 | `*trace` |
| **性能下降** | 验证现有流程没有减速 | `*nfr` |
| **覆盖差距** | 查找新更改触及的未经测试的遗留代码 | `*design` |
| **重大更改** | 检测API/合同违规 | `*review` |
| **迁移安全** | 验证数据转换和回滚计划 | `*risk` + `*review` |
#### 棕地的完整测试架构师工作流
##### 阶段1开发前风险与策略
**对棕地至关重要 - 首先运行这些:**
```bash
# 1. 风险评估(故事创建后立即运行)
@qa *risk {brownfield-story}
# 识别:遗留依赖、重大更改、集成点
# 输出docs/qa/assessments/{epic}.{story}-risk-{YYYYMMDD}.md
# 棕地重点:
# - 回归概率评分
# - 受影响的下游系统
# - 数据迁移风险
# - 回滚复杂性
# 2. 测试设计(风险评估后)
@qa *design {brownfield-story}
# 创建:回归测试策略+新功能测试
# 输出docs/qa/assessments/{epic}.{story}-test-design-{YYYYMMDD}.md
# 棕地重点:
# - 需要回归测试的现有功能
# - 集成测试要求
# - 要维持的性能基准
# - 功能标志测试场景
```
##### 阶段2开发期间持续验证
**在编码时监控集成健康状况:**
```bash
# 3. 需求跟踪(开发中期检查点)
@qa *trace {brownfield-story}
# 映射:新需求+现有功能保留
# 输出docs/qa/assessments/{epic}.{story}-trace-{YYYYMMDD}.md
# 棕地重点:
# - 必须仍然工作的现有功能
# - 新/旧功能交互
# - API合同保留
# - 缺失的回归测试覆盖
# 4. NFR验证考虑“完成”之前
@qa *nfr {brownfield-story}
# 验证:性能、安全性、可靠性不变
# 输出docs/qa/assessments/{epic}.{story}-nfr-{YYYYMMDD}.md
# 棕地重点:
# - 性能回归检测
# - 集成的安全影响
# - 向后兼容性验证
# - 对遗留组件的负载/压力
```
##### 阶段3代码审查深度集成分析
**全面的棕地审查:**
```bash
# 5. 全面审查(开发完成时)
@qa *review {brownfield-story}
# 执行:深度分析+主动重构
# 输出:
# - 故事文件中的QA结果
# - 门禁文件docs/qa/gates/{epic}.{story}-{slug}.yml
```
审查特别分析:
- **API重大更改**:验证所有现有合同是否得到维护
- **数据迁移安全**:检查转换逻辑和回滚程序
- **性能回归**:与基准指标进行比较
- **集成点**:验证与遗留代码的所有接触点
- **功能标志逻辑**:确保正确的切换行为
- **依赖影响**:映射受影响的下游系统
##### 阶段4审查后门禁更新
```bash
# 6. 门禁状态更新(解决问题后)
@qa *gate {brownfield-story}
# 更新:修复后的质量门禁决策
# 输出docs/qa/gates/{epic}.{story}-{slug}.yml
# 棕地考虑:
# - 可能会豁免某些遗留代码问题
# - 记录技术债务接受情况
# - 跟踪迁移进度
```
#### 棕地特定的风险评分
测试架构师对棕地使用增强的风险评分:
| **风险类别** | **棕地因素** | **对门禁的影响** |
| --- | --- | --- |
| **回归风险** | 集成点数量×代码年龄 | 评分≥9 = FAIL |
| **数据风险** | 迁移复杂性×数据量 | 评分≥6 = CONCERNS |
| **性能风险** | 当前负载×增加的复杂性 | 评分≥6 = CONCERNS |
| **兼容性风险** | API消费者×合同更改 | 评分≥9 = FAIL |
#### 棕地测试标准
Quinn对棕地强制执行额外的标准
- **回归测试覆盖率**:每个接触到的遗留模块都需要测试
- **性能基准**:必须维持或改进当前的指标
- **回滚程序**:每个更改都需要一个回滚计划
- **功能标志**:所有有风险的更改都在切换开关后面
- **集成测试**:覆盖所有遗留接触点
- **合同测试**验证API兼容性
- **数据验证**:迁移正确性检查
#### 快速参考:棕地测试命令
| **场景** | **要运行的命令** | **顺序** | **为何关键** |
| --- | --- | --- | --- |
| **向遗留代码添加功能** | `*risk``*design``*trace``*review` | 顺序 | 首先映射所有依赖 |
| **API修改** | `*risk``*design``*nfr``*review` | 顺序 | 防止破坏消费者 |
| **性能关键的更改** | `*nfr`早期并经常→ `*review` | 持续 | 立即发现性能下降 |
| **数据迁移** | `*risk``*design``*trace``*review``*gate` | 完整周期 | 确保数据完整性 |
| **复杂系统中的错误修复** | `*risk``*trace``*review` | 专注 | 防止副作用 |
#### 与棕地场景的集成
**特定场景指南:**
1. **遗留代码现代化**
- 从`*risk`开始以映射所有依赖关系
- 使用`*design`规划绞杀者无花果方法
- 经常运行`*trace`以确保没有任何东西损坏
- `*review`时专注于逐步迁移
2. **向单体添加功能**
- `*risk`识别集成复杂性
- `*design`规划隔离策略
- `*nfr`监控性能影响
- `*review`验证没有单体性能下降
3. **微服务提取**
- `*risk`映射服务边界
- `*trace`确保功能保留
- `*nfr`验证网络开销可接受
- `*gate`记录接受的权衡
4. **数据库模式更改**
- `*risk`评估迁移复杂性
- `*design`规划向后兼容的方法
- `*trace`映射所有受影响的查询
- `*review`验证迁移安全性
### 5. 沟通更改
记录:
- 更改了什么以及为什么
- 迁移说明
- 引入的新模式
- 弃用通知
## 常见棕地场景
### 场景1添加新功能
1. 记录现有系统
2. 创建专注于集成的棕地PRD
3. **测试架构师早期参与**
- 在草稿故事上运行`@qa *risk`以识别集成风险
- 使用`@qa *design`规划回归测试策略
4. 架构强调兼容性
5. 故事包括带有测试要求的集成任务
6. **开发期间**
- 开发人员运行`@qa *trace`以验证覆盖率
- 使用`@qa *nfr`监控性能影响
7. **审查阶段**`@qa *review`验证集成安全性
### 场景2现代化遗留代码
1. 广泛的文档阶段
2. PRD包括迁移策略
3. **测试架构师策略规划**
- `@qa *risk`评估现代化复杂性
- `@qa *design`规划并行测试方法
4. 架构规划逐步过渡(绞杀者无花果模式)
5. 故事遵循增量现代化,并带有:
- 未触及的遗留代码的回归测试
- 新/旧边界的集成测试
- 每个阶段的性能基准
6. **持续验证**:每个增量后运行`@qa *trace`
7. **门禁管理**:使用`@qa *gate`跟踪技术债务接受情况
### 场景3复杂系统中的错误修复
1. 记录相关子系统
2. 使用`create-brownfield-story`进行专注修复
3. **测试架构师风险评估**:运行`@qa *risk`以识别副作用的可能性
4. 包括来自`@qa *design`输出的回归测试要求
5. **修复期间**:使用`@qa *trace`映射受影响的功能
6. **提交前**:运行`@qa *review`进行全面验证
7. 测试架构师使用以下方法验证无副作用:
- 用于副作用分析的风险分析(概率×影响评分)
- 跟踪矩阵以确保修复不会破坏相关功能
- NFR评估以验证性能/安全性不变
- 门禁决策记录修复安全性
### 场景4API集成
1. 记录现有的API模式
2. PRD定义集成要求
3. **测试架构师合同分析**
- `@qa *risk`识别重大更改的可能性
- `@qa *design`创建合同测试策略
4. 架构确保一致的模式
5. **API测试重点**
- 用于向后兼容性的合同测试
- 新端点的集成测试
- 增加负载的性能测试
6. 故事包括API文档更新
7. **验证检查点**
- `@qa *trace`映射所有API消费者
- `@qa *nfr`验证响应时间
- `@qa *review`确保没有重大更改
8. **门禁决策**:记录任何接受的重大更改以及迁移路径
## 故障排除
### “AI不理解我的代码库”
**解决方案**:用更具体的关键文件路径重新运行`document-project`
### “生成的计划不符合我们的模式”
**解决方案**:在规划阶段之前,用您的特定约定更新生成的文档
### “小更改的样板太多”
**解决方案**:使用`create-brownfield-story`代替完整的工作流
### “集成点不清楚”
**解决方案**在PRD创建期间提供更多上下文特别强调集成系统
## 快速参考
### 棕地特定命令
```bash
# 记录现有项目
@architect *document-project
# 创建增强PRD
@pm *create-brownfield-prd
# 创建具有集成重点的架构
@architect *create-brownfield-architecture
# 快速创建史诗
@pm *create-brownfield-epic
# 创建单个故事
@pm *create-brownfield-story
```
### 用于棕地的测试架构师命令
注意:下面显示的是简写形式。完整命令:`*risk-profile`、`*test-design`、`*nfr-assess`、`*trace-requirements`
```bash
# 开发前(规划)
@qa *risk {story} # 评估回归和集成风险
@qa *design {story} # 规划回归+新功能测试
# 开发期间(验证)
@qa *trace {story} # 验证新旧覆盖率
@qa *nfr {story} # 检查性能下降
# 开发后(审查)
@qa *review {story} # 深度集成分析
@qa *gate {story} # 更新质量决策
```
### 决策树
```text
您有大型代码库或monorepo吗
├─ 是 → PRD优先方法
│ └─ 创建PRD → 仅记录受影响的区域
└─ 否 → 您是否熟悉代码库?
├─ 是 → PRD优先方法
└─ 否 → 文档优先方法
这是一个影响多个系统的重大增强吗?
├─ 是 → 完整的棕地工作流
│ └─ 始终首先运行测试架构师*risk + *design
└─ 否 → 这是否比简单的错误修复更复杂?
├─ 是 → *create-brownfield-epic
│ └─ 为集成点运行测试架构师*risk
└─ 否 → *create-brownfield-story
└─ 如果触及关键路径,仍运行*risk
更改是否触及遗留代码?
├─ 是 → 测试架构师是强制性的
│ ├─ *risk → 识别回归可能性
│ ├─ *design → 规划测试覆盖率
│ └─ *review → 验证无中断
└─ 否 → 推荐测试架构师
└─ *review → 确保质量标准
```
## 结论
在修改现有系统时使用BMad方法的棕地开发提供了结构和安全性。测试架构师成为您防止破坏现有功能的关键安全网使用风险评估、回归测试和持续验证来确保新更改不会破坏现有功能。
**棕地成功公式:**
1. **首先记录** - 了解存在什么
2. **尽早评估风险** - 在编码前使用测试架构师`*risk`
3. **规划测试策略** - 设计回归+新功能测试
4. **持续验证** - 在开发期间检查集成健康状况
5. **全面审查** - 在提交前进行深度分析
6. **果断地进行门禁** - 记录质量决策
请记住:**在棕地中,测试架构师不是可选的——它是您防止生产中断的保险单。**