graph TD A[阶段一:项目上下文建设<br/>一次性投入] --> B[阶段二:需求对齐<br/>每次迭代] B --> C[阶段三:约束建立<br/>一次性投入+持续更新] C --> D[阶段四:开发执行<br/>每次迭代] D --> E[阶段五:验证与沉淀<br/>每次迭代] E -.-> A C -.-> C E -.-> C
痛点×阶段映射矩阵
阶段
解决的痛点
主要/辅助
项目上下文建设
项目背景丢失、多组件协同盲区
★
需求对齐
需求黑箱
★
约束建立
技术栈失控、重复造轮子
★
开发执行
多组件协同盲区、回归恐惧
★
验证与沉淀
工程化断层、回归恐惧
★
标注:★=主要解决,○=辅助解决
三、阶段一:项目上下文建设
目标
建立项目的”百科全书”,让CC在第一句话就知道:这是什么项目、用啥技术、有什么约束。
具体步骤
步骤1:扫描项目生成CLAUDE.md
使用CC的扫描能力生成根级和模块级CLAUDE.md:
1 2
# 根级CLAUDE.md(项目整体信息) claude @. --init-project --output CLAUDE.md
生成的CLAUDE.md包含:
项目名称、用途、业务领域
技术栈(语言、框架、数据库、中间件)
目录结构说明
关键模块职责
对于多模块项目,还要生成模块级CLAUDE.md:
1 2 3
# 模块级CLAUDE.md(模块特定信息) claude @modules/user-service --init-project --output modules/user-service/CLAUDE.md claude @modules/order-service --init-project --output modules/order-service/CLAUDE.md
graph TD A[项目扫描] --> B{项目类型?} B -->|单模块| C[生成根级CLAUDE.md] B -->|多模块| D[生成根级+模块级CLAUDE.md] C --> E[补充业务术语表] C --> F[补充软硬件约束] D --> E D --> F E --> G[建立模块索引] F --> G G --> H[验证: 用CLAUDE.md回答项目问题]
检查清单
CLAUDE.md包含项目基本信息
技术栈版本明确标注
业务术语表完整
软硬件约束无遗漏
多模块项目建立索引
测试:询问CC”这个项目用什么数据库”,能从CLAUDE.md得到正确答案
四、阶段二:需求对齐
目标
从散落的代码中”逆向”出完整的PRD,消除需求黑箱。
具体步骤
步骤1:多维度扫描生成PRD初稿
关键原则:四个维度分别扫描,不要用一个大prompt。
维度一:从API入口追踪完整调用链
1 2 3
claude @controllers/OrderController.java @services/OrderService.java \ "分析订单创建的完整调用链,从Controller到Service到Repository到数据库操作。 输出到 docs/order-create-flow.md,不要修改任何代码。"
维度二:从数据模型反推业务规则
1 2 3
claude @entities/Order.java @migrations/V2__create_order.sql \ "分析订单表结构和字段约束,反推业务规则(如订单状态机、金额精度要求)。 输出到 docs/order-business-rules.md。"
维度三:从异常处理和校验逻辑挖掘边界条件
1 2 3
claude @services/OrderService.java \ "提取所有异常处理和参数校验逻辑,总结边界条件和异常场景。 输出到 docs/order-edge-cases.md。"
维度四:从配置文件和外部依赖发现隐藏行为
1 2 3
claude @application.yml @resources/config/payment.properties \ "分析配置项和外部依赖,总结隐藏的开关、限流、降级等行为。 输出到 docs/order-hidden-behaviors.md。"
步骤2:合并去重 + 生成覆盖度自检表
1 2 3
claude @docs/order-*.md \ "合并四个维度的扫描结果,生成完整的订单功能PRD,并生成覆盖度自检表(已识别/待确认)。 输出到 docs/order-prd-complete.md。"
覆盖度自检表示例:
功能点
调用链
业务规则
边界条件
配置行为
状态
订单创建
✅
✅
⚠️
✅
待确认边界条件
订单支付
✅
✅
✅
❌
待确认配置
订单取消
✅
⚠️
✅
✅
待确认业务规则
步骤3:用Git历史和已有测试交叉补充
1 2 3 4 5 6 7 8 9
# 从Git提交历史补充隐性需求 claude --git-history 20 \ "分析最近20次提交,总结新增的需求和Bug修复,补充到PRD。 输出到 docs/order-prd-history.md。"
# 从测试用例补充边界条件 claude @tests/OrderServiceTest.java \ "分析测试用例,提取隐含的业务规则和边界条件,补充到PRD。 输出到 docs/order-prd-test-coverage.md。"
步骤4:用PRD反向生成测试,跑测试验证PRD准确性
1 2 3 4
claude @docs/order-prd-complete.md @src/ \ "基于PRD生成测试用例(使用JUnit 5),然后运行这些测试。 如果测试通过,说明PRD准确;如果失败,说明PRD有误或代码有bug。 输出到 tests/generated/OrderServicePrdTest.java。"
这是最关键的验证机制:测试通过=PRD准确,测试失败=需要修正PRD或代码。
步骤5:人工补充隐性规则
5类典型隐性规则:
规则类型
为什么代码里看不到
示例
业务潜规则
某些做法约定俗成,不写在代码里
订单金额不能包含税费,税费单独计算
历史决策
早期技术债务,无法追溯
用户ID必须是偶数,为了与老系统兼容
外部依赖约束
第三方API限制
支付接口每秒最多调用10次
合规要求
安全、审计规定
所有用户操作必须记录日志
性能红线
非功能性需求
批量导入单次不超过1000条
将这些规则写入@docs/implicit-rules.md。
流程图(三角验证)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
graph TD A[现有代码] --> B[维度一: API调用链] A --> C[维度二: 数据模型] A --> D[维度三: 异常处理] A --> E[维度四: 配置依赖] B --> F[合并生成PRD初稿] C --> F D --> F E --> F F --> G[Git历史补充] F --> H[测试用例补充] G --> I[完整PRD] H --> I I --> J[反向生成测试] J --> K{测试通过?} K -->|是| L[✅ PRD准确] K -->|否| M[❌ 修正PRD或代码] M --> J
检查清单
四个维度分别扫描,非单一prompt
覆盖度自检表已生成
Git历史已分析
测试用例已补充
PRD反向生成测试并验证通过
隐性规则已文档化
五、阶段三:约束建立
目标
建立三层防线,确保CC遵守项目规范。
具体步骤
三层防线架构
1 2 3
graph LR A[CLAUDE.md<br/>告知层] --> B[.claude/rules/<br/>禁止层] B --> C[Hooks<br/>拦截层]
graph TD A[CLAUDE.md] --> B{违反告知?} B -->|否| C[生成代码] B -->|是| D[提示遵循CLAUDE.md] C --> E{违反Rules?} E -->|否| F[生成代码] E -->|是| G[拒绝生成] F --> H{违反Hooks?} H -->|否| I[✅ 允许] H -->|是| J[拒绝提交]
检查清单
CLAUDE.md包含技术约束
.claude/rules/目录已创建
关键规则已写成Rules文件(格式:✅做法+❌做法+示例)
Hooks已配置(pre-commit)
测试:故意违反规则,验证CC能拦截
六、阶段四:开发执行
目标
在约束下安全开发,控制风险。
具体步骤
步骤1:计划先行,人工批准
推荐使用Plan模式或workflow skill:
1 2 3 4 5 6
# Plan模式 claude --permission-mode plan "重构订单状态机,从5个状态扩展到8个状态。先生成详细计划。"
graph TD A[开发完成] --> B[系统级QA验证] B --> C{验证通过?} C -->|否| D[修复问题] D --> B C -->|是| E[代码审查] E --> F[更新CLAUDE.md] E --> G[沉淀错误到Memory] E --> H[生成工程文档] H --> I[下次迭代复用]
步骤1:系统级QA验证
1 2 3 4
# QA Agent运行完整测试 claude --agent qa "运行完整测试套件(单元测试+集成测试+端到端测试), 生成测试报告,输出到 docs/test-report.md。"
步骤2:代码审查
1 2 3
# 生成代码审查清单 claude @src/ "生成代码审查清单,关注点:性能、安全、可维护性, 输出到 docs/code-review-checklist.md。"
步骤3:更新CLAUDE.md
将新发现的技术约束和业务规则补充到CLAUDE.md:
1 2
claude @docs/test-report.md @CLAUDE.md "将测试报告中发现的约束补充到CLAUDE.md。"
步骤4:沉淀错误到Memory
1 2 3 4
# 记录本次迭代遇到的问题和解决方案 claude --memory "订单状态机重构过程中, 遇到的bug:状态流转时未加锁导致并发问题。 解决方案:使用数据库乐观锁。"
步骤5:生成/更新工程基线文档
架构设计文档:docs/architecture.md
详细设计文档:docs/design/order-state-machine.md
数据库设计文档:docs/database/order-schema.md
接口文档:docs/api/payment-api.md
步骤6:数据库变更用Flyway管理
1 2 3 4
# 生成Flyway迁移脚本 claude @entities/Order.java @migrations/ "生成Flyway迁移脚本V3__update_order_state_machine.sql, 使用ALTER TABLE语法,避免DROP TABLE。"
检查清单
系统级QA验证通过
代码审查完成
CLAUDE.md已更新
错误已沉淀到Memory
工程文档已生成
数据库变更已用Flyway管理
八、实战演示
项目背景
一个三端应用的v2.0版本迭代:
后端:Java + Spring Boot + MyBatis Plus
前端:Next.js + TypeScript + Ant Design
移动端:Flutter
迭代目标:从v1.0的单店模式升级到v2.0的多店模式。
阶段一:项目上下文建设
1 2
# 扫描后端项目 claude @backend/ --init-project --output backend/CLAUDE.md
生成的backend/CLAUDE.md关键内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
## 项目信息 项目名称:电商订单系统 业务领域:B2C电商
## 技术栈 - Java 17 - Spring Boot 2.7 - MyBatis Plus 3.5 - MySQL 8.0 - Redis 6.0
claude --memory "多店模式开发过程中, 遇到的bug1:订单查询接口缺少分页,导致大量数据时性能问题。 解决方案:使用MyBatis Plus的Page对象。 遇到的bug2:shop_id字段初始值为0,导致查询错误。 解决方案:Flyway脚本中UPDATE现有数据,shop_id = user_id。"
生成工程文档
1 2 3
claude @backend/ "生成多店模式架构文档,输出到 docs/architecture/multi-shop.md" claude @backend/modules/order/ "生成订单服务详细设计,输出到 docs/design/order-service.md" claude @frontend/ "生成前端API文档,输出到 docs/api/frontend-api.md"