# 在棕地中工作:完整指南
> **强烈推荐:使用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. **遵循[用户指南-安装](user-guide.md#installation)步骤在Web中设置您的代理。**
2. **生成整个代码库的“扁平化”单个文件** 运行:`npx bmad-method flatten`
### 选择您的方法
#### 方法A:PRD优先(推荐用于添加非常大和复杂的新功能、单个或多个史诗或大规模更改)
**最适合**:大型代码库、monorepos,或者当您确切知道要构建什么时
1. **首先创建PRD**来定义需求
2. **仅根据PRD需求记录相关区域**
3. **更高效** - 避免记录未使用的代码
#### 方法B:文档优先(适用于较小项目)
**最适合**:较小的代码库、未知的系统或探索性更改
1. **首先记录整个系统**
2. **用完整的上下文创建PRD**
3. **更彻底** - 捕获所有内容
### 方法A:PRD优先工作流(推荐)
#### 阶段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:过渡到开发
**遵循[增强的IDE开发工作流](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评估以验证性能/安全性不变
- 门禁决策记录修复安全性
### 场景4:API集成
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. **果断地进行门禁** - 记录质量决策
请记住:**在棕地中,测试架构师不是可选的——它是您防止生产中断的保险单。**