sdd-full 4.2.0 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin.js +31 -63
- package/package.json +1 -1
- package/skills/README.md +97 -0
- package/skills/call-adaptation/SKILL.md +23 -0
- package/skills/call-adaptation/call-adaptation-guide.md +136 -0
- package/skills/call-adaptation/claude-code-call-spec.md +50 -0
- package/skills/call-adaptation/trae-call-spec.md +56 -0
- package/skills/checklist.md +154 -0
- package/skills/design-planning/ai-coding-rules/SKILL.md +52 -0
- package/skills/design-planning/design-to-code/SKILL.md +53 -0
- package/skills/design-planning/enterprise-spec/SKILL.md +52 -3
- package/skills/design-planning/flutter-av/SKILL.md +44 -34
- package/skills/design-planning/flutter-map/SKILL.md +41 -31
- package/skills/design-planning/function-sdd/SKILL.md +54 -0
- package/skills/design-planning/sdd-code/SKILL.md +347 -0
- package/skills/design-planning/sdd-deploy/SKILL.md +501 -0
- package/skills/design-planning/sdd-ops/SKILL.md +306 -0
- package/skills/design-planning/sdd-test/SKILL.md +383 -0
- package/skills/design-planning/ui-sdd/SKILL.md +291 -0
- package/skills/design-planning/ui-sdd-specialized/SKILL.md +46 -40
- package/skills/design-planning/writing-plans/SKILL.md +144 -0
- package/skills/development-execution/flutter-errors/SKILL.md +44 -34
- package/skills/development-execution/sdd-add/SKILL.md +540 -0
- package/skills/development-execution/systematic-debugging/SKILL.md +298 -0
- package/skills/development-execution/test-driven-development/SKILL.md +373 -0
- package/skills/development-execution/verification-before-completion/SKILL.md +141 -0
- package/skills/knowledge-precipitation/claudeception/SKILL.md +96 -0
- package/skills/knowledge-precipitation/mempalace-auto-saver/SKILL.md +302 -0
- package/skills/quality-assurance/bdd-acceptance/SKILL.md +44 -37
- package/skills/quality-assurance/flutter-test/SKILL.md +56 -0
- package/skills/quality-assurance/quality-gate/SKILL.md +350 -0
- package/skills/quality-assurance/security-audit/SKILL.md +386 -0
- package/skills/release-ops/finishing-a-development-branch/SKILL.md +202 -0
- package/skills/release-ops/release-flow/SKILL.md +404 -0
- package/skills/requirement-analysis/brainstorming/SKILL.md +166 -0
- package/skills/requirement-analysis/competitive-brief/SKILL.md +121 -0
- package/skills/requirement-analysis/market-research/SKILL.md +143 -0
- package/skills/requirement-analysis/prd-write/SKILL.md +111 -0
- package/skills/requirement-analysis/requirement-completion-officer/SKILL.md +124 -0
- package/skills/requirement-analysis/sdd/SKILL.md +1044 -0
- package/skills/requirement-analysis/sdd-full/SKILL.md +717 -36
- package/skills/requirement-analysis/unified-flow/SKILL.md +128 -26
- package/skills/rules/project_rules.md +167 -0
- package/skills/rules/user_rules.md +254 -69
- package/skills/special-tools/env-check/SKILL.md +40 -34
- package/skills/special-tools/receiving-code-review/SKILL.md +215 -0
- package/skills/special-tools/requesting-code-review/SKILL.md +107 -0
- package/skills/special-tools/using-superpowers/SKILL.md +117 -0
- package/skills/templates/API-SDD.md +31 -0
- package/skills/templates/Andrej Karpathy AI/347/274/226/347/240/201/350/247/204/345/210/231/350/220/275/345/234/260SDD.md" +117 -0
- package/skills/templates/BDD/351/243/216/346/240/274/351/252/214/346/224/266/346/240/207/345/207/206SDD.md +147 -0
- package/skills/templates/Base-SDD.md +38 -0
- package/skills/templates/Brain-SDD.md +36 -0
- package/skills/templates/Code-SDD.md +41 -0
- package/skills/templates/Competitor-SDD.md +34 -0
- package/skills/templates/Env-SDD.md +37 -0
- package/skills/templates/Flutter/345/205/250/347/261/273/345/236/213/346/265/213/350/257/225/347/255/226/347/225/245SDD.md +162 -0
- package/skills/templates/Flutter/345/234/260/345/233/276/345/257/274/350/210/252/344/270/232/345/212/241SDD.md +136 -0
- package/skills/templates/Flutter/345/270/270/350/247/201/345/274/202/345/270/270/344/270/223/351/241/271SDD.md +159 -0
- package/skills/templates/Flutter/351/237/263/350/247/206/351/242/221/345/205/250/346/240/210SDD.md +121 -0
- package/skills/templates/PRD-SDD.md +45 -0
- package/skills/templates/SKILL.md +91 -0
- package/skills/templates/Test-SDD.md +34 -0
- package/skills/templates/UI-SDD.md +38 -0
- package/skills/templates/UI-SDD/344/270/223/347/224/250/346/250/241/346/235/277.md +141 -0
- package/skills/templates/UI/350/265/204/346/272/220/346/217/220/347/244/272/350/257/215/347/224/237/346/210/220SDD.md +67 -0
- package/skills/templates//344/274/201/344/270/232/347/272/247/345/205/250/346/240/210/345/267/245/347/250/213/350/247/204/350/214/203SDD.md +152 -0
- package/skills/templates//345/205/250/346/265/201/347/250/213SDD/350/236/215/345/220/210/344/275/223/347/263/273.md +198 -0
- package/skills/templates//345/212/237/350/203/275SDD/344/270/223/347/224/250/346/250/241/346/235/277.md +132 -0
- package/skills/templates//347/216/257/345/242/203/351/242/204/346/243/200/346/240/207/345/207/206/345/214/226SDD.md +153 -0
- package/skills/templates//351/253/230/344/277/235/347/234/237/350/256/276/350/256/241/350/275/254/344/273/243/347/240/201SDD.md +119 -0
- package/skills//345/256/214/346/225/264/345/274/200/345/217/221/346/265/201/347/250/213/346/211/213/345/206/214.md +408 -0
- package/skills//346/212/200/350/203/275/344/275/223/347/263/273/345/256/214/345/226/204/345/273/272/350/256/256.md +305 -0
- package/skills//346/212/200/350/203/275/344/275/277/347/224/250/346/214/207/345/215/227.md +285 -0
- package/skills//346/212/200/350/203/275/345/206/263/347/255/226/346/240/221.md +320 -0
- package/skills/brainstorming/SKILL.md +0 -164
- package/skills/brainstorming/scripts/frame-template.html +0 -214
- package/skills/brainstorming/scripts/helper.js +0 -88
- package/skills/brainstorming/scripts/server.cjs +0 -338
- package/skills/brainstorming/scripts/start-server.sh +0 -153
- package/skills/brainstorming/scripts/stop-server.sh +0 -55
- package/skills/brainstorming/spec-document-reviewer-prompt.md +0 -48
- package/skills/brainstorming/visual-companion.md +0 -286
- package/skills/chinese-code-review/SKILL.md +0 -277
- package/skills/chinese-commit-conventions/SKILL.md +0 -364
- package/skills/chinese-documentation/SKILL.md +0 -448
- package/skills/chinese-git-workflow/SKILL.md +0 -510
- package/skills/dispatching-parallel-agents/SKILL.md +0 -182
- package/skills/executing-plans/SKILL.md +0 -175
- package/skills/finishing-a-development-branch/SKILL.md +0 -200
- package/skills/mcp-builder/SKILL.md +0 -255
- package/skills/receiving-code-review/SKILL.md +0 -213
- package/skills/requesting-code-review/SKILL.md +0 -105
- package/skills/requesting-code-review/code-reviewer.md +0 -146
- package/skills/rules/skill-map.md +0 -97
- package/skills/subagent-driven-development/SKILL.md +0 -277
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +0 -26
- package/skills/subagent-driven-development/implementer-prompt.md +0 -113
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +0 -61
- package/skills/systematic-debugging/CREATION-LOG.md +0 -119
- package/skills/systematic-debugging/SKILL.md +0 -296
- package/skills/systematic-debugging/condition-based-waiting-example.ts +0 -158
- package/skills/systematic-debugging/condition-based-waiting.md +0 -115
- package/skills/systematic-debugging/defense-in-depth.md +0 -122
- package/skills/systematic-debugging/find-polluter.sh +0 -63
- package/skills/systematic-debugging/root-cause-tracing.md +0 -169
- package/skills/systematic-debugging/test-academic.md +0 -14
- package/skills/systematic-debugging/test-pressure-1.md +0 -58
- package/skills/systematic-debugging/test-pressure-2.md +0 -68
- package/skills/systematic-debugging/test-pressure-3.md +0 -69
- package/skills/test-driven-development/SKILL.md +0 -371
- package/skills/test-driven-development/testing-anti-patterns.md +0 -299
- package/skills/using-git-worktrees/SKILL.md +0 -218
- package/skills/using-superpowers/SKILL.md +0 -134
- package/skills/using-superpowers/references/codex-tools.md +0 -25
- package/skills/using-superpowers/references/gemini-tools.md +0 -33
- package/skills/verification-before-completion/SKILL.md +0 -139
- package/skills/workflow-runner/SKILL.md +0 -172
- package/skills/writing-plans/SKILL.md +0 -152
- package/skills/writing-plans/plan-document-reviewer-prompt.md +0 -49
- package/skills/writing-skills/SKILL.md +0 -654
- package/skills/writing-skills/anthropic-best-practices.md +0 -1149
- package/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
- package/skills/writing-skills/graphviz-conventions.dot +0 -172
- package/skills/writing-skills/persuasion-principles.md +0 -187
- package/skills/writing-skills/render-graphs.js +0 -168
- package/skills/writing-skills/testing-skills-with-subagents.md +0 -384
|
@@ -0,0 +1,1044 @@
|
|
|
1
|
+
【claude code调用标识:sdd】【trae调用标识:sdd+需求拆分】【流程场景:1.完整3阶段SDD流程、2.从零开始新项目、3.小型功能迭代】
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
name: sdd
|
|
5
|
+
description: 用于将大型需求拆分为用户故事、UI设计、前后端架构边界、数据库/API契约与子代理可用的SDD功能规格,支持个人开发,适配Superpowers/Trae-CN全流程开发。
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# SDD 需求拆分(个人开发版)
|
|
9
|
+
|
|
10
|
+
## 概述
|
|
11
|
+
|
|
12
|
+
本技能提供一套**"垂直切片+水平分层"双模式**需求拆分流程,兼顾敏捷快速交付与架构规范,专为个人开发者设计:
|
|
13
|
+
|
|
14
|
+
**大需求 → 第0步:Epic拆分(超大需求适用)→ 第0.5步:拆用户故事 → 第1步:拆UI设计 → 第2步:拆前后端分离架构 → 第3步:拆数据库+接口 → 第4步:拆SDD**
|
|
15
|
+
|
|
16
|
+
核心目的:
|
|
17
|
+
- 既保证**快速交付用户价值**,又确保**技术架构规范**
|
|
18
|
+
- 明确前后端**权责边界与协作契约**
|
|
19
|
+
- 产出子代理可直接消费的**SDD功能规格**
|
|
20
|
+
- 适配Superpowers/Trae-CN的**子代理驱动开发**与**测试驱动开发**工作流
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 何时使用
|
|
25
|
+
|
|
26
|
+
- 你有一个**大型、模糊、跨模块**的需求/想法,需要结构化拆解
|
|
27
|
+
- 项目采用**前后端分离架构**,需要明确技术边界
|
|
28
|
+
- 在 **Superpowers / Trae-CN** 中进行**完整全流程开发**
|
|
29
|
+
- 需要**敏捷迭代+架构规范**双保障,既快速交付又避免技术债务
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 核心流程
|
|
34
|
+
|
|
35
|
+
```dot
|
|
36
|
+
digraph requirement_splitting {
|
|
37
|
+
rankdir=TB;
|
|
38
|
+
node [shape=box, style=filled, fillcolor=lightblue];
|
|
39
|
+
|
|
40
|
+
"大需求":::start -> "第0步:Epic拆分(超大需求)":::epic;
|
|
41
|
+
"第0步:Epic拆分(超大需求)":::epic -> "第0.5步:拆用户故事":::agile;
|
|
42
|
+
"第0.5步:拆用户故事":::agile -> "第1步:拆UI设计":::step1;
|
|
43
|
+
"第1步:拆UI设计":::step1 -> "第2步:拆前后端架构":::step2;
|
|
44
|
+
"第2步:拆前后端架构":::step2 -> "第3步:拆数据库+接口":::step3;
|
|
45
|
+
"第3步:拆数据库+接口":::step3 -> "第4步:拆SDD":::step4;
|
|
46
|
+
|
|
47
|
+
{rank=same; "大需求"}
|
|
48
|
+
{rank=same; "第0步:Epic拆分(超大需求)"}
|
|
49
|
+
{rank=same; "第0.5步:拆用户故事"}
|
|
50
|
+
{rank=same; "第1步:拆UI设计"}
|
|
51
|
+
{rank=same; "第2步:拆前后端架构"}
|
|
52
|
+
{rank=same; "第3步:拆数据库+接口"}
|
|
53
|
+
{rank=same; "第4步:拆SDD"}
|
|
54
|
+
|
|
55
|
+
classDef start fillcolor=lightgreen;
|
|
56
|
+
classDef epic fillcolor=lightcoral;
|
|
57
|
+
classDef agile fillcolor=lightcoral;
|
|
58
|
+
classDef step1 fillcolor=lightcyan;
|
|
59
|
+
classDef step2 fillcolor=lightcyan;
|
|
60
|
+
classDef step3 fillcolor=lightcyan;
|
|
61
|
+
classDef step4 fillcolor=lightyellow;
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
流程本质:**先垂直切片(用户价值维度),再水平分层(技术栈维度)**
|
|
66
|
+
优势:**既保证独立交付价值,又确保技术架构规范**
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 个人敏捷工作流
|
|
71
|
+
|
|
72
|
+
### 1. 双模式工作流
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
大需求 → Epic拆分(可选)→ 拆用户故事 → 按故事优先级分批 → 每批内执行水平拆分 → 子代理开发 → 测试验收 → 上线 → 下一批故事
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 2. 关键实践
|
|
79
|
+
|
|
80
|
+
| 实践 | 具体做法 | 优势 |
|
|
81
|
+
|------|----------|------|
|
|
82
|
+
| 分批交付 | 按用户故事优先级分组,每批1–3个故事,分批完成水平拆分与开发 | 避免全量冻结,支持快速迭代,降低风险 |
|
|
83
|
+
| 并行开发 | 前端按Mock数据开发,后端按契约开发,互不依赖 | 缩短迭代周期,提高开发效率 |
|
|
84
|
+
| 契约版本化 | 每批故事对应一个契约版本,变更只影响当前批次 | 控制变更范围,减少返工成本 |
|
|
85
|
+
| 子代理适配 | 每个SDD对应一个子代理任务,完成后自动审查 | 适配Superpowers/Trae-CN工作流,保证质量 |
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## 第0步:Epic拆分(超大需求适用)
|
|
90
|
+
|
|
91
|
+
### 目标
|
|
92
|
+
|
|
93
|
+
将**跨越多个Sprint、涉及多模块**的超大需求(Epic)拆分为可管理的Feature和Story,确保价值渐进交付,降低风险。
|
|
94
|
+
|
|
95
|
+
### Epic定义与识别标准
|
|
96
|
+
|
|
97
|
+
什么是Epic?
|
|
98
|
+
- **范围**:预计超过2周完成
|
|
99
|
+
- **价值**:代表宏观用户价值或业务目标
|
|
100
|
+
- **特点**:模糊性高,细节不明确,需要进一步拆解
|
|
101
|
+
|
|
102
|
+
何时需要先拆Epic?
|
|
103
|
+
✅ 需求描述中包含"完整""全部""全面"等词汇
|
|
104
|
+
✅ 估算工作量>10人天
|
|
105
|
+
✅ 涉及≥3个核心模块
|
|
106
|
+
✅ 跨平台需求且各平台工作量不均衡
|
|
107
|
+
|
|
108
|
+
### Epic三层拆分法(Epic→Feature→Story)
|
|
109
|
+
|
|
110
|
+
```markdown
|
|
111
|
+
# Epic拆分示例:电商购物流程
|
|
112
|
+
|
|
113
|
+
## 1. Epic(顶级)
|
|
114
|
+
- 名称:构建完整电商购物流程
|
|
115
|
+
- 价值:用户可浏览商品→加入购物车→结算→支付→查看订单
|
|
116
|
+
- 估算:6周
|
|
117
|
+
|
|
118
|
+
## 2. Feature(中层,按业务流程拆分)
|
|
119
|
+
- Feature 1:商品浏览与搜索(第1–2周)
|
|
120
|
+
- Feature 2:购物车管理(第2–3周)
|
|
121
|
+
- Feature 3:订单创建与管理(第3–4周)
|
|
122
|
+
|
|
123
|
+
## 3. Story(底层,按用户价值拆分)
|
|
124
|
+
### Feature 1:商品浏览与搜索
|
|
125
|
+
- US-001:浏览商品列表
|
|
126
|
+
- US-002:搜索商品
|
|
127
|
+
- US-003:查看商品详情
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### 6种Epic拆分模式(按场景选择)
|
|
131
|
+
|
|
132
|
+
| 拆分模式 | 适用场景 | 示例 |
|
|
133
|
+
|----------|----------|------|
|
|
134
|
+
| **按用户旅程拆分** | 有明确用户操作流程的功能 | 购物流程:浏览→详情→加购→结算→订单 |
|
|
135
|
+
| **按功能模块拆分** | 模块化强的系统 | 电商系统:用户→商品→订单→支付 |
|
|
136
|
+
| **按平台适配拆分** | 跨平台开发 | 登录功能:Web→iOS→Android |
|
|
137
|
+
| **按复杂度分层拆分** | 功能复杂度差异大的功能 | 搜索功能:基础搜索→高级筛选→智能推荐 |
|
|
138
|
+
| **按时间阶段拆分** | 有明确时间节点的功能 | 会员系统:MVP版→高级版→尊享版 |
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## 第0.5步:拆用户故事
|
|
143
|
+
|
|
144
|
+
### 目标
|
|
145
|
+
|
|
146
|
+
把大需求拆成**可独立交付、有用户价值**的用户故事,每个故事覆盖"页面+交互+业务+数据"完整链路,符合**INVEST原则**(独立、可协商、有价值、可估算、小、可测试)。
|
|
147
|
+
|
|
148
|
+
### 产出
|
|
149
|
+
|
|
150
|
+
`docs/stories/user_stories.md`
|
|
151
|
+
|
|
152
|
+
### 故事模板
|
|
153
|
+
|
|
154
|
+
```markdown
|
|
155
|
+
# 用户故事清单
|
|
156
|
+
|
|
157
|
+
## 格式
|
|
158
|
+
|
|
159
|
+
作为[用户角色],我想要[功能],以便[价值]
|
|
160
|
+
|
|
161
|
+
## Epic(可选,用于超大需求)
|
|
162
|
+
|
|
163
|
+
### Epic:用户认证与授权
|
|
164
|
+
|
|
165
|
+
包含用户注册、登录、权限管理等相关功能。
|
|
166
|
+
|
|
167
|
+
## 核心故事(按优先级排序)
|
|
168
|
+
|
|
169
|
+
### 故事1:用户登录系统
|
|
170
|
+
- **优先级**:P0(最高)
|
|
171
|
+
- **估算**:3天(或5故事点)
|
|
172
|
+
- **内容**:作为未登录用户,我想要登录系统,以便访问个人中心和下单
|
|
173
|
+
- **验收标准(BDD格式)**:
|
|
174
|
+
- Given 用户未登录,访问登录页
|
|
175
|
+
- When 输入正确用户名密码并点击登录
|
|
176
|
+
- Then 登录成功,跳转到首页
|
|
177
|
+
- And Token保存到本地存储
|
|
178
|
+
- **验收标准(规则列表)**:
|
|
179
|
+
- ✅ 用户可以通过用户名/密码登录
|
|
180
|
+
- ✅ 登录成功后跳转到首页
|
|
181
|
+
- ✅ 登录失败显示友好提示
|
|
182
|
+
- ✅ 支持"记住我"功能(7天免登录)
|
|
183
|
+
- **关联页面**:登录页
|
|
184
|
+
- **前置依赖**:无
|
|
185
|
+
- **非功能需求**:页面响应时间≤2秒
|
|
186
|
+
|
|
187
|
+
### 故事2:浏览商品列表
|
|
188
|
+
- **优先级**:P0
|
|
189
|
+
- **估算**:2天
|
|
190
|
+
- **内容**:作为登录用户,我想要浏览商品列表,以便选择商品
|
|
191
|
+
- **验收标准**:
|
|
192
|
+
- Given 用户已登录,访问首页
|
|
193
|
+
- When 查看商品列表
|
|
194
|
+
- Then 显示商品按分类展示,支持分页
|
|
195
|
+
- **关联页面**:首页、商品列表页
|
|
196
|
+
- **前置依赖**:故事1
|
|
197
|
+
|
|
198
|
+
### 故事3:查看商品详情
|
|
199
|
+
- **优先级**:P1
|
|
200
|
+
- **估算**:2天
|
|
201
|
+
- **内容**:作为登录用户,我想要查看商品详情,以便了解商品信息
|
|
202
|
+
- **验收标准**:显示商品完整信息(图片、描述、价格、库存)
|
|
203
|
+
- **关联页面**:商品详情页
|
|
204
|
+
- **前置依赖**:故事2
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### 故事验收标准编写黄金法则
|
|
208
|
+
|
|
209
|
+
1. **可测试性**:每个标准都能被验证,避免模糊表述(如"应该很快"→"响应时间≤2秒")
|
|
210
|
+
2. **无歧义**:使用精确术语,避免主观描述
|
|
211
|
+
3. **完整性**:覆盖主流程、异常流程、边界条件
|
|
212
|
+
4. **价值导向**:始终围绕用户价值,不包含技术实现细节
|
|
213
|
+
|
|
214
|
+
### 三种验收标准格式
|
|
215
|
+
|
|
216
|
+
#### 1. BDD场景格式(推荐)
|
|
217
|
+
```markdown
|
|
218
|
+
### 主场景
|
|
219
|
+
Given [初始状态/前置条件]
|
|
220
|
+
When [用户执行的关键动作]
|
|
221
|
+
Then [系统预期结果]
|
|
222
|
+
And [附加验证点1]
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
#### 2. 规则列表格式(适合简单功能)
|
|
226
|
+
```markdown
|
|
227
|
+
- ✅ 必须支持用户名/邮箱/手机号三种登录方式
|
|
228
|
+
- ✅ 密码输入框必须隐藏明文显示
|
|
229
|
+
- ✅ 登录按钮在表单未填写完整时禁用
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
#### 3. 多平台矩阵格式(适合复杂跨平台功能)
|
|
233
|
+
| 场景 | 操作 | 预期结果(Web) | 预期结果(iOS) |
|
|
234
|
+
|------|------|----------------|----------------|
|
|
235
|
+
| 正常登录 | 输入正确账号密码 | 跳转首页 | 跳转首页 |
|
|
236
|
+
|
|
237
|
+
### 敏捷故事拆分方法
|
|
238
|
+
|
|
239
|
+
| 方法 | 适用场景 | 示例 |
|
|
240
|
+
|------|----------|------|
|
|
241
|
+
| 按用户旅程拆分 | 有明确用户操作流程的功能 | 购物流程:浏览→详情→加购→结算→订单 |
|
|
242
|
+
| 按数据边界拆分 | 包含多数据实体的功能 | 简历功能:基本信息→工作经历→教育背景 |
|
|
243
|
+
| 按操作路径拆分 | 有多种执行路径的功能 | 登录功能:正常登录→忘记密码→注册 |
|
|
244
|
+
| 按优先级拆分 | 大型复杂功能 | 支付功能:基础支付→优惠券→积分抵扣 |
|
|
245
|
+
|
|
246
|
+
### 故事拆分原则
|
|
247
|
+
|
|
248
|
+
1. 每个故事必须**可独立交付**,能直接给用户带来价值
|
|
249
|
+
2. 每个故事覆盖**UI+前端交互+后端业务+数据库**完整链路
|
|
250
|
+
3. 故事粒度以**1–3天**可完成为宜
|
|
251
|
+
4. 优先拆分**核心价值**故事,再拆分边缘功能
|
|
252
|
+
5. 每个故事必须有明确的**验收标准**和**优先级**
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 第1步:拆UI设计
|
|
257
|
+
|
|
258
|
+
### 目标
|
|
259
|
+
|
|
260
|
+
把用户故事拆成**页面清单 + 页面范围说明**,只关心"用户看到什么、怎么操作",**不涉及技术实现、接口、数据库**。
|
|
261
|
+
|
|
262
|
+
### 产出
|
|
263
|
+
|
|
264
|
+
`docs/ui/pages.md`
|
|
265
|
+
|
|
266
|
+
### 模板
|
|
267
|
+
|
|
268
|
+
```markdown
|
|
269
|
+
# UI 页面清单
|
|
270
|
+
|
|
271
|
+
## 1. 公共页面
|
|
272
|
+
|
|
273
|
+
- 登录页(/login):用户登录入口,关联故事1
|
|
274
|
+
- 注册页(/register):新用户注册入口
|
|
275
|
+
- 404页:页面不存在时显示
|
|
276
|
+
- 500页:服务器错误时显示
|
|
277
|
+
|
|
278
|
+
## 2. 业务页面(按用户故事旅程拆分)
|
|
279
|
+
|
|
280
|
+
- 首页(/home):关联故事2,展示推荐商品和分类导航
|
|
281
|
+
- 商品列表页(/goods/list):关联故事2,展示商品列表和筛选
|
|
282
|
+
- 商品详情页(/goods/detail/:id):关联故事3,展示商品完整信息
|
|
283
|
+
- 购物车页(/cart):关联故事4,展示购物车商品和操作
|
|
284
|
+
- 结算页(/checkout):关联故事5,确认订单信息和支付
|
|
285
|
+
- 订单列表页(/order/list):展示用户历史订单
|
|
286
|
+
- 订单详情页(/order/detail/:id):关联故事5,展示订单详细信息
|
|
287
|
+
- 个人中心(/profile):用户信息管理
|
|
288
|
+
|
|
289
|
+
## 3. 设计规范
|
|
290
|
+
|
|
291
|
+
- 设计工具:Figma / 手绘稿
|
|
292
|
+
- 主色:#165DFF
|
|
293
|
+
- 字体:Inter,基础字号 14px
|
|
294
|
+
- 响应式:桌面优先,兼容平板(1024px以上)
|
|
295
|
+
- 组件库:使用Ant Design(或指定其他)
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### 拆分原则
|
|
299
|
+
|
|
300
|
+
- **一个独立页面 = 一条记录**,不合并
|
|
301
|
+
- 只拆**页面路由、页面名称、核心用途**,关联对应的用户故事
|
|
302
|
+
- **严禁**出现接口字段、表结构、技术选型
|
|
303
|
+
- 覆盖**核心用户旅程**,边缘页面可后续补充
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## 第2步:拆前后端分离架构
|
|
308
|
+
|
|
309
|
+
### 目标
|
|
310
|
+
|
|
311
|
+
明确**前端做什么、后端做什么、依赖关系**,一刀切开前后端边界,**互不越界、各司其职**,同时支持敏捷并行开发。
|
|
312
|
+
|
|
313
|
+
### 产出
|
|
314
|
+
|
|
315
|
+
`docs/architecture/frontend-backend.md`
|
|
316
|
+
|
|
317
|
+
### 模板
|
|
318
|
+
|
|
319
|
+
```markdown
|
|
320
|
+
# 前后端分离架构
|
|
321
|
+
|
|
322
|
+
## 1. 前端职责
|
|
323
|
+
|
|
324
|
+
- 页面渲染(UI 见 docs/ui/pages.md)
|
|
325
|
+
- 路由管理(/login、/goods/list…)
|
|
326
|
+
- 客户端状态管理(用户信息、购物车)
|
|
327
|
+
- 表单校验、交互反馈、异常提示
|
|
328
|
+
- 调用后端 RESTful API(不写核心业务逻辑)
|
|
329
|
+
- Mock数据并行开发,不依赖后端进度
|
|
330
|
+
|
|
331
|
+
## 2. 后端职责
|
|
332
|
+
|
|
333
|
+
- 提供 RESTful API(契约见 docs/api/contract.md)
|
|
334
|
+
- 核心业务逻辑(下单、支付、库存扣减、权限校验)
|
|
335
|
+
- 数据库读写(表结构见 docs/database/schema.md)
|
|
336
|
+
- 数据校验、鉴权、限流、日志、事务
|
|
337
|
+
- 无页面渲染、无交互逻辑
|
|
338
|
+
- 按接口契约开发
|
|
339
|
+
|
|
340
|
+
## 3. 分离边界
|
|
341
|
+
|
|
342
|
+
- 前端:**无数据库、无核心业务逻辑** → 只发请求、渲染结果
|
|
343
|
+
- 后端:**无页面、无交互** → 只处理数据、返回标准 JSON
|
|
344
|
+
- 协作模式:前端 Mock 并行开发;后端按契约开发;联调前先对齐契约
|
|
345
|
+
- 敏捷迭代:按用户故事优先级分批交付,每批完成后进行回归测试
|
|
346
|
+
|
|
347
|
+
## 4. 技术选型(可选)
|
|
348
|
+
|
|
349
|
+
- 前端框架:React / Vue / Angular
|
|
350
|
+
- 状态管理:Redux / Vuex / MobX
|
|
351
|
+
- UI组件库:Ant Design / Element Plus
|
|
352
|
+
- 后端框架:Node.js / Java / Python / Go
|
|
353
|
+
- 数据库:MySQL / PostgreSQL / MongoDB
|
|
354
|
+
- 缓存:Redis
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
### 拆分原则
|
|
358
|
+
|
|
359
|
+
- **单一职责**:前端=UI/交互;后端=业务/数据
|
|
360
|
+
- **依赖单向**:前端依赖后端 API;后端不依赖前端
|
|
361
|
+
- **边界刚性**:不允许前端写复杂业务、不允许后端渲染页面
|
|
362
|
+
- **敏捷适配**:支持按用户故事分批交付,不要求全量完成后再上线
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
## 第3步:拆数据库+接口
|
|
367
|
+
|
|
368
|
+
### 目标
|
|
369
|
+
|
|
370
|
+
定义**数据库表结构 + RESTful API 契约**,作为前后端协作的**唯一事实来源**,支持敏捷迭代中的契约版本管理。
|
|
371
|
+
|
|
372
|
+
### 产出
|
|
373
|
+
|
|
374
|
+
- `docs/database/schema.md`(表结构)
|
|
375
|
+
- `docs/api/contract.md`(接口契约)
|
|
376
|
+
|
|
377
|
+
### 数据库模板
|
|
378
|
+
|
|
379
|
+
```markdown
|
|
380
|
+
# 数据库设计
|
|
381
|
+
|
|
382
|
+
## 用户表(user)- 关联故事1
|
|
383
|
+
|
|
384
|
+
- id(PK,自增,BIGINT)
|
|
385
|
+
- username(唯一,VARCHAR(50),用户名)
|
|
386
|
+
- password(VARCHAR(255),加密存储)
|
|
387
|
+
- email(唯一,VARCHAR(100))
|
|
388
|
+
- avatar(VARCHAR(255),头像URL,可选)
|
|
389
|
+
- status(TINYINT,状态:0-禁用,1-正常)
|
|
390
|
+
- create_time(DATETIME,创建时间)
|
|
391
|
+
- update_time(DATETIME,更新时间)
|
|
392
|
+
|
|
393
|
+
## 商品表(goods)- 关联故事2、3
|
|
394
|
+
|
|
395
|
+
- id(PK,自增,BIGINT)
|
|
396
|
+
- name(VARCHAR(200),商品名称)
|
|
397
|
+
- description(TEXT,商品描述)
|
|
398
|
+
- price(DECIMAL(10,2),价格)
|
|
399
|
+
- original_price(DECIMAL(10,2),原价)
|
|
400
|
+
- stock(INT,库存)
|
|
401
|
+
- status(TINYINT,状态:0-下架,1-上架)
|
|
402
|
+
- category_id(FK,分类ID)
|
|
403
|
+
- main_image(VARCHAR(255),主图URL)
|
|
404
|
+
- create_time(DATETIME,创建时间)
|
|
405
|
+
- update_time(DATETIME,更新时间)
|
|
406
|
+
|
|
407
|
+
## 购物车表(cart)- 关联故事4
|
|
408
|
+
|
|
409
|
+
- id(PK,自增,BIGINT)
|
|
410
|
+
- user_id(FK → user.id)
|
|
411
|
+
- goods_id(FK → goods.id)
|
|
412
|
+
- quantity(INT,数量)
|
|
413
|
+
- create_time(DATETIME,创建时间)
|
|
414
|
+
- update_time(DATETIME,更新时间)
|
|
415
|
+
|
|
416
|
+
## 订单表(order)- 关联故事5
|
|
417
|
+
|
|
418
|
+
- id(PK,自增,BIGINT)
|
|
419
|
+
- order_no(VARCHAR(50),订单号,唯一)
|
|
420
|
+
- user_id(FK → user.id)
|
|
421
|
+
- total_price(DECIMAL(10,2),订单总价)
|
|
422
|
+
- status(TINYINT,状态:0-待支付,1-已支付,2-已发货,3-已完成,4-已取消)
|
|
423
|
+
- address(JSON,收货地址)
|
|
424
|
+
- create_time(DATETIME,创建时间)
|
|
425
|
+
- update_time(DATETIME,更新时间)
|
|
426
|
+
|
|
427
|
+
## 订单项表(order_item)- 关联故事5
|
|
428
|
+
|
|
429
|
+
- id(PK,自增,BIGINT)
|
|
430
|
+
- order_id(FK → order.id)
|
|
431
|
+
- goods_id(FK → goods.id)
|
|
432
|
+
- goods_name(VARCHAR(200),商品名称快照)
|
|
433
|
+
- goods_price(DECIMAL(10,2),商品价格快照)
|
|
434
|
+
- quantity(INT,购买数量)
|
|
435
|
+
- create_time(DATETIME,创建时间)
|
|
436
|
+
|
|
437
|
+
## 索引设计
|
|
438
|
+
|
|
439
|
+
- user表:username、email
|
|
440
|
+
- goods表:category_id、status
|
|
441
|
+
- cart表:user_id
|
|
442
|
+
- order表:user_id、order_no
|
|
443
|
+
- order_item表:order_id
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
### 接口契约模板
|
|
447
|
+
|
|
448
|
+
```markdown
|
|
449
|
+
# 接口契约(RESTful,JSON,版本 v1)
|
|
450
|
+
|
|
451
|
+
## 通用规则
|
|
452
|
+
|
|
453
|
+
- 基础路径:/api/v1
|
|
454
|
+
- 请求/响应格式:JSON
|
|
455
|
+
- 认证:JWT(请求头 Authorization: Bearer {token})
|
|
456
|
+
- 版本管理:每批用户故事交付后更新契约版本
|
|
457
|
+
- 响应统一格式:
|
|
458
|
+
|
|
459
|
+
```json
|
|
460
|
+
{
|
|
461
|
+
"code": 0,
|
|
462
|
+
"message": "success",
|
|
463
|
+
"data": {}
|
|
464
|
+
}
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
## 用户模块(关联故事1)
|
|
468
|
+
|
|
469
|
+
### POST /api/v1/auth/login - 用户登录
|
|
470
|
+
|
|
471
|
+
请求:
|
|
472
|
+
```json
|
|
473
|
+
{
|
|
474
|
+
"username": "string",
|
|
475
|
+
"password": "string",
|
|
476
|
+
"remember": false
|
|
477
|
+
}
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
响应成功(200):
|
|
481
|
+
```json
|
|
482
|
+
{
|
|
483
|
+
"code": 0,
|
|
484
|
+
"message": "success",
|
|
485
|
+
"data": {
|
|
486
|
+
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
|
487
|
+
"user": {
|
|
488
|
+
"id": 1,
|
|
489
|
+
"username": "user1",
|
|
490
|
+
"email": "user1@example.com",
|
|
491
|
+
"avatar": "https://example.com/avatar.jpg"
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
响应失败(401):
|
|
498
|
+
```json
|
|
499
|
+
{
|
|
500
|
+
"code": 401,
|
|
501
|
+
"message": "用户名或密码错误",
|
|
502
|
+
"data": null
|
|
503
|
+
}
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
### POST /api/v1/auth/register - 用户注册
|
|
507
|
+
|
|
508
|
+
请求:
|
|
509
|
+
```json
|
|
510
|
+
{
|
|
511
|
+
"username": "string",
|
|
512
|
+
"password": "string",
|
|
513
|
+
"email": "string"
|
|
514
|
+
}
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
### GET /api/v1/user/info - 获取当前用户信息
|
|
518
|
+
|
|
519
|
+
需要认证。
|
|
520
|
+
|
|
521
|
+
响应:
|
|
522
|
+
```json
|
|
523
|
+
{
|
|
524
|
+
"code": 0,
|
|
525
|
+
"message": "success",
|
|
526
|
+
"data": {
|
|
527
|
+
"id": 1,
|
|
528
|
+
"username": "user1",
|
|
529
|
+
"email": "user1@example.com",
|
|
530
|
+
"avatar": "https://example.com/avatar.jpg",
|
|
531
|
+
"createTime": "2024-01-01T00:00:00Z"
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
## 商品模块(关联故事2、3)
|
|
537
|
+
|
|
538
|
+
### GET /api/v1/goods/list - 商品列表(分页)
|
|
539
|
+
|
|
540
|
+
请求参数(Query):
|
|
541
|
+
- page(INT,页码,默认1)
|
|
542
|
+
- pageSize(INT,每页数量,默认20)
|
|
543
|
+
- categoryId(INT,分类ID,可选)
|
|
544
|
+
- keyword(STRING,搜索关键词,可选)
|
|
545
|
+
|
|
546
|
+
响应:
|
|
547
|
+
```json
|
|
548
|
+
{
|
|
549
|
+
"code": 0,
|
|
550
|
+
"message": "success",
|
|
551
|
+
"data": {
|
|
552
|
+
"list": [
|
|
553
|
+
{
|
|
554
|
+
"id": 1,
|
|
555
|
+
"name": "商品名称",
|
|
556
|
+
"price": 99.99,
|
|
557
|
+
"originalPrice": 199.99,
|
|
558
|
+
"mainImage": "https://example.com/image.jpg",
|
|
559
|
+
"status": 1,
|
|
560
|
+
"stock": 100
|
|
561
|
+
}
|
|
562
|
+
],
|
|
563
|
+
"total": 100,
|
|
564
|
+
"page": 1,
|
|
565
|
+
"pageSize": 20
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
### GET /api/v1/goods/detail/:id - 商品详情
|
|
571
|
+
|
|
572
|
+
响应:
|
|
573
|
+
```json
|
|
574
|
+
{
|
|
575
|
+
"code": 0,
|
|
576
|
+
"message": "success",
|
|
577
|
+
"data": {
|
|
578
|
+
"id": 1,
|
|
579
|
+
"name": "商品名称",
|
|
580
|
+
"description": "商品描述",
|
|
581
|
+
"price": 99.99,
|
|
582
|
+
"originalPrice": 199.99,
|
|
583
|
+
"mainImage": "https://example.com/image.jpg",
|
|
584
|
+
"images": ["url1", "url2"],
|
|
585
|
+
"status": 1,
|
|
586
|
+
"stock": 100,
|
|
587
|
+
"createTime": "2024-01-01T00:00:00Z"
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
## 购物车模块(关联故事4)
|
|
593
|
+
|
|
594
|
+
### POST /api/v1/cart/add - 添加商品到购物车
|
|
595
|
+
|
|
596
|
+
需要认证。
|
|
597
|
+
|
|
598
|
+
请求:
|
|
599
|
+
```json
|
|
600
|
+
{
|
|
601
|
+
"goodsId": 1,
|
|
602
|
+
"quantity": 2
|
|
603
|
+
}
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
### GET /api/v1/cart/list - 获取购物车列表
|
|
607
|
+
|
|
608
|
+
需要认证。
|
|
609
|
+
|
|
610
|
+
响应:
|
|
611
|
+
```json
|
|
612
|
+
{
|
|
613
|
+
"code": 0,
|
|
614
|
+
"message": "success",
|
|
615
|
+
"data": [
|
|
616
|
+
{
|
|
617
|
+
"id": 1,
|
|
618
|
+
"goodsId": 1,
|
|
619
|
+
"goodsName": "商品名称",
|
|
620
|
+
"goodsPrice": 99.99,
|
|
621
|
+
"mainImage": "https://example.com/image.jpg",
|
|
622
|
+
"quantity": 2,
|
|
623
|
+
"stock": 100
|
|
624
|
+
}
|
|
625
|
+
]
|
|
626
|
+
}
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
## 订单模块(关联故事5)
|
|
630
|
+
|
|
631
|
+
### POST /api/v1/order/create - 创建订单
|
|
632
|
+
|
|
633
|
+
需要认证。
|
|
634
|
+
|
|
635
|
+
请求:
|
|
636
|
+
```json
|
|
637
|
+
{
|
|
638
|
+
"addressId": 1,
|
|
639
|
+
"paymentMethod": "alipay"
|
|
640
|
+
}
|
|
641
|
+
```
|
|
642
|
+
|
|
643
|
+
响应:
|
|
644
|
+
```json
|
|
645
|
+
{
|
|
646
|
+
"code": 0,
|
|
647
|
+
"message": "success",
|
|
648
|
+
"data": {
|
|
649
|
+
"orderId": 1,
|
|
650
|
+
"orderNo": "ORD202401010001"
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
### GET /api/v1/order/list - 订单列表
|
|
656
|
+
|
|
657
|
+
需要认证。
|
|
658
|
+
|
|
659
|
+
### GET /api/v1/order/detail/:id - 订单详情
|
|
660
|
+
|
|
661
|
+
需要认证。
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
### 拆分原则
|
|
665
|
+
|
|
666
|
+
- **先数据、后接口**:表结构稳定后再定义接口
|
|
667
|
+
- **资源命名 RESTful**:名词复数、HTTP 方法语义化
|
|
668
|
+
- **契约即法律**:开发前必须固化契约,变更需同步更新
|
|
669
|
+
- **敏捷适配**:按用户故事分批定义契约,支持增量交付,不要求一次性定全量
|
|
670
|
+
|
|
671
|
+
---
|
|
672
|
+
|
|
673
|
+
## 第4步:拆SDD
|
|
674
|
+
|
|
675
|
+
### 前提
|
|
676
|
+
|
|
677
|
+
**用户故事 → UI → 架构 → 数据库/接口按批次固化后**,再拆对应批次的 SDD。
|
|
678
|
+
|
|
679
|
+
SDD 是**给子代理的最小可执行单元**:一个 SDD = 一个用户故事/子故事 = 一个子代理任务,符合**垂直切片**原则。
|
|
680
|
+
|
|
681
|
+
### 目标
|
|
682
|
+
|
|
683
|
+
把"页面+接口+数据"按**用户故事维度垂直切分**,生成子代理可直接执行、测试、交付的规格文档,适配 Superpowers/Trae-CN 的**子代理驱动开发**与**测试驱动开发**工作流。
|
|
684
|
+
|
|
685
|
+
### SDD 目录结构
|
|
686
|
+
|
|
687
|
+
```
|
|
688
|
+
specs/
|
|
689
|
+
story1-login/
|
|
690
|
+
login-frontend.md
|
|
691
|
+
login-backend.md
|
|
692
|
+
story2-goods/
|
|
693
|
+
goods-list-frontend.md
|
|
694
|
+
goods-list-backend.md
|
|
695
|
+
goods-detail-frontend.md
|
|
696
|
+
goods-detail-backend.md
|
|
697
|
+
story3-order/
|
|
698
|
+
...
|
|
699
|
+
```
|
|
700
|
+
|
|
701
|
+
### 单个 SDD 模板
|
|
702
|
+
|
|
703
|
+
```markdown
|
|
704
|
+
# SDD:用户登录(关联用户故事1)
|
|
705
|
+
|
|
706
|
+
## 1. 目标
|
|
707
|
+
|
|
708
|
+
一句话清晰描述本功能要实现的业务价值(与用户故事一致)。
|
|
709
|
+
|
|
710
|
+
让用户可以通过用户名和密码安全登录系统,获取访问权限。
|
|
711
|
+
|
|
712
|
+
## 2. 依赖
|
|
713
|
+
|
|
714
|
+
- 页面:登录页(引用 docs/ui/pages.md)
|
|
715
|
+
- 接口:POST /api/v1/auth/login(引用 docs/api/contract.md)
|
|
716
|
+
- 数据库:user表(引用 docs/database/schema.md)
|
|
717
|
+
- 架构:前后端分离(引用 docs/architecture/frontend-backend.md)
|
|
718
|
+
- 前置故事:无
|
|
719
|
+
|
|
720
|
+
## 3. 验收标准(BDD风格)
|
|
721
|
+
|
|
722
|
+
### 正常流程
|
|
723
|
+
|
|
724
|
+
- Given 用户未登录,访问登录页
|
|
725
|
+
- When 输入正确的用户名和密码,点击登录按钮
|
|
726
|
+
- Then 登录成功,跳转到首页,显示用户信息
|
|
727
|
+
- And Token保存到本地存储,支持自动登录
|
|
728
|
+
|
|
729
|
+
### 异常流程
|
|
730
|
+
|
|
731
|
+
- Given 用户未登录,访问登录页
|
|
732
|
+
- When 输入错误的用户名或密码,点击登录按钮
|
|
733
|
+
- Then 显示"用户名或密码错误"提示,停留在登录页
|
|
734
|
+
|
|
735
|
+
- Given 用户未登录,访问登录页
|
|
736
|
+
- When 用户名或密码为空,点击登录按钮
|
|
737
|
+
- Then 显示字段验证提示
|
|
738
|
+
|
|
739
|
+
- Given 用户已登录,访问登录页
|
|
740
|
+
- When 页面加载
|
|
741
|
+
- Then 自动跳转到首页
|
|
742
|
+
|
|
743
|
+
## 4. 非功能需求
|
|
744
|
+
|
|
745
|
+
- **性能**:页面响应时间≤2秒,API响应时间≤500ms
|
|
746
|
+
- **安全**:密码加密传输,使用HTTPS
|
|
747
|
+
- **兼容**:兼容主流浏览器
|
|
748
|
+
|
|
749
|
+
## 5. 技术风险
|
|
750
|
+
|
|
751
|
+
- **风险**:密码明文传输
|
|
752
|
+
- **缓解措施**:使用HTTPS,密码加密传输
|
|
753
|
+
- **风险**:暴力破解
|
|
754
|
+
- **缓解措施**:添加登录失败次数限制,超过5次锁定15分钟
|
|
755
|
+
|
|
756
|
+
## 6. 测试要点
|
|
757
|
+
|
|
758
|
+
- 单元测试:登录表单验证、Token存储逻辑
|
|
759
|
+
- 接口测试:正常登录、错误密码、空参数
|
|
760
|
+
- E2E测试:完整登录流程
|
|
761
|
+
- 安全测试:SQL注入、XSS防护
|
|
762
|
+
|
|
763
|
+
## 7. 子代理执行说明
|
|
764
|
+
|
|
765
|
+
- 角色:全栈 / 前端+后端
|
|
766
|
+
- 产出:代码 + 单元测试 + 接口/页面联调通过
|
|
767
|
+
- 实践:
|
|
768
|
+
1. 遵循 TDD 流程:先写测试 → 再写代码 → 重构
|
|
769
|
+
2. 完成后通过两阶段审查:spec合规性审查 → 代码质量审查
|
|
770
|
+
3. 审查通过后提交,进入下一个子任务
|
|
771
|
+
```
|
|
772
|
+
|
|
773
|
+
### 拆分原则
|
|
774
|
+
|
|
775
|
+
- **垂直切片**:每个 SDD 覆盖UI+接口+数据完整链路,可独立交付价值
|
|
776
|
+
- **故事驱动**:SDD 严格对应用户故事,不跨故事拆分
|
|
777
|
+
- **依赖显式化**:所有依赖必须引用已固化的设计文档
|
|
778
|
+
- **验收标准可测试**:采用 BDD 风格,输入输出明确,无模糊描述
|
|
779
|
+
|
|
780
|
+
---
|
|
781
|
+
|
|
782
|
+
## 非功能需求处理指南
|
|
783
|
+
|
|
784
|
+
### 非功能需求分类与处理方式
|
|
785
|
+
|
|
786
|
+
| 分类 | 示例 | 处理方式 | 优先级 |
|
|
787
|
+
|------|------|----------|--------|
|
|
788
|
+
| **性能** | 响应时间≤2秒,并发用户≥100 | 融入Story验收标准 | 高 |
|
|
789
|
+
| **安全性** | 数据加密,权限控制,防SQL注入 | 融入DoD + 独立测试 | 最高 |
|
|
790
|
+
| **可用性** | 系统可用性≥99.9% | 架构设计 | 高 |
|
|
791
|
+
| **兼容性** | 适配iOS 14+,Android 10+ | 平台适配Story | 中 |
|
|
792
|
+
| **可维护性** | 代码覆盖率≥80% | 融入DoD | 中 |
|
|
793
|
+
|
|
794
|
+
### 个人DoD(完成的定义)
|
|
795
|
+
|
|
796
|
+
```markdown
|
|
797
|
+
# 个人DoD(包含非功能需求)
|
|
798
|
+
|
|
799
|
+
1. 功能通过所有验收测试
|
|
800
|
+
2. 代码通过静态分析,无高危漏洞
|
|
801
|
+
3. 单元测试覆盖率≥80%
|
|
802
|
+
4. 页面响应时间≤2秒
|
|
803
|
+
5. 适配目标平台所有主流版本
|
|
804
|
+
6. 符合安全规范(如OWASP Top 10防护)
|
|
805
|
+
7. 文档更新完成
|
|
806
|
+
```
|
|
807
|
+
|
|
808
|
+
### 非功能需求融入验收标准示例
|
|
809
|
+
|
|
810
|
+
```markdown
|
|
811
|
+
## 故事ID: US-001(商品搜索)
|
|
812
|
+
|
|
813
|
+
**验收标准**:
|
|
814
|
+
1. 功能:支持关键词搜索、分类筛选、价格区间筛选
|
|
815
|
+
2. 性能:搜索结果返回时间≤1秒(1000条数据)
|
|
816
|
+
3. 可用性:无结果时显示友好提示,提供推荐商品
|
|
817
|
+
4. 兼容性:在所有目标平台显示一致
|
|
818
|
+
```
|
|
819
|
+
|
|
820
|
+
---
|
|
821
|
+
|
|
822
|
+
## 故事估算方法指南
|
|
823
|
+
|
|
824
|
+
### 两种核心估算方法对比
|
|
825
|
+
|
|
826
|
+
| 估算方法 | 定义 | 优点 | 缺点 | 适用场景 |
|
|
827
|
+
|------|------|------|------|------|
|
|
828
|
+
| **理想人天** | 无中断情况下完成任务的时间(人天) | 直观易懂,适合个人开发 | 受个人能力影响大 | 个人开发、小项目 |
|
|
829
|
+
| **故事点** | 相对工作量单位,基于复杂度综合评估 | 不依赖个人能力,长期稳定 | 需要历史数据校准 | 长期项目 |
|
|
830
|
+
|
|
831
|
+
### 理想人天估算方法(推荐个人开发使用)
|
|
832
|
+
|
|
833
|
+
```markdown
|
|
834
|
+
# 理想人天定义
|
|
835
|
+
|
|
836
|
+
1. 理想人天 = 纯开发时间,不含会议、沟通、测试、中断
|
|
837
|
+
2. 1理想人天 = 8小时专注开发时间
|
|
838
|
+
3. 实际时间 ≈ 理想人天 × 1.5(考虑各种中断)
|
|
839
|
+
|
|
840
|
+
# 任务分解估算示例
|
|
841
|
+
|
|
842
|
+
## 故事ID: US-001(登录功能)
|
|
843
|
+
|
|
844
|
+
### 任务分解:
|
|
845
|
+
1. UI设计:0.5理想人天
|
|
846
|
+
2. 前端开发:1理想人天
|
|
847
|
+
3. 后端API开发:1理想人天
|
|
848
|
+
4. 集成测试:0.5理想人天
|
|
849
|
+
|
|
850
|
+
### 总估算:3理想人天
|
|
851
|
+
### 实际计划:4.5天(考虑缓冲)
|
|
852
|
+
```
|
|
853
|
+
|
|
854
|
+
### 估算避坑指南
|
|
855
|
+
|
|
856
|
+
#### ❌ 常见错误
|
|
857
|
+
|
|
858
|
+
1. **过度乐观**:忽视边界条件和异常处理
|
|
859
|
+
2. **技术镀金**:考虑超出需求的功能
|
|
860
|
+
3. **依赖忽视**:未考虑外部系统依赖
|
|
861
|
+
4. **估算疲劳**:连续估算太多Story,导致准确性下降
|
|
862
|
+
|
|
863
|
+
#### ✅ 最佳实践
|
|
864
|
+
|
|
865
|
+
1. **拆分先行**:先拆分为符合INVEST标准的Story,再估算
|
|
866
|
+
2. **历史参考**:参考类似Story的历史估算和实际时间
|
|
867
|
+
3. **缓冲预留**:计划时预留30-50%缓冲时间应对突发情况
|
|
868
|
+
4. **回顾校准**:每个迭代后回顾估算准确性,调整方法
|
|
869
|
+
|
|
870
|
+
---
|
|
871
|
+
|
|
872
|
+
## 最终目录结构
|
|
873
|
+
|
|
874
|
+
```
|
|
875
|
+
项目根/
|
|
876
|
+
├── brainstorm.md # 原始大需求
|
|
877
|
+
├── docs/
|
|
878
|
+
│ ├── stories/
|
|
879
|
+
│ │ └── user_stories.md # 用户故事
|
|
880
|
+
│ ├── ui/
|
|
881
|
+
│ │ └── pages.md # UI页面清单
|
|
882
|
+
│ ├── architecture/
|
|
883
|
+
│ │ └── frontend-backend.md # 前后端架构边界
|
|
884
|
+
│ ├── database/
|
|
885
|
+
│ │ └── schema.md # 数据库表结构
|
|
886
|
+
│ └── api/
|
|
887
|
+
│ └── contract.md # 接口契约
|
|
888
|
+
└── specs/ # SDD功能规格
|
|
889
|
+
├── story1-login/
|
|
890
|
+
├── story2-goods/
|
|
891
|
+
└── story3-order/
|
|
892
|
+
```
|
|
893
|
+
|
|
894
|
+
---
|
|
895
|
+
|
|
896
|
+
## Superpowers / Trae-CN 操作指南
|
|
897
|
+
|
|
898
|
+
1. 先完成 `docs/stories/user_stories.md`,确定**故事优先级**与**分批计划**
|
|
899
|
+
2. 按批次完成 `docs/` 下设计文档(UI→架构→数据库→接口)
|
|
900
|
+
3. 用 `/spec` 命令按故事生成 `specs/xxx/xxx.md` SDD 文件,每个 SDD 对应一个子代理任务
|
|
901
|
+
4. 执行子代理驱动开发:`@specs/xxx/xxx.md`,每个子代理完成后自动进行**spec合规性审查**与**代码质量审查**
|
|
902
|
+
5. 批次内所有 SDD 完成后,进行**集成测试**
|
|
903
|
+
6. 验收通过后上线,进入下一批故事开发
|
|
904
|
+
|
|
905
|
+
---
|
|
906
|
+
|
|
907
|
+
## 常见错误与修复
|
|
908
|
+
|
|
909
|
+
### 错误:水平拆分优先于垂直切片
|
|
910
|
+
|
|
911
|
+
- **问题**:先做全量UI/架构/契约,再拆故事,导致迭代周期长、变更成本高
|
|
912
|
+
- **修复**:**先拆用户故事,再按故事分批做水平拆分**
|
|
913
|
+
|
|
914
|
+
### 错误:SDD 粒度过大,跨多个故事
|
|
915
|
+
|
|
916
|
+
- **问题**:子代理无法独立完成,交付周期长,风险集中
|
|
917
|
+
- **修复**:SDD 严格对应**单个用户故事/子故事**,粒度控制在**1–3天**可完成
|
|
918
|
+
|
|
919
|
+
### 错误:契约未版本化,变更影响全量
|
|
920
|
+
|
|
921
|
+
- **问题**:需求变更导致全量契约与代码返工
|
|
922
|
+
- **修复**:**按批次版本化管理契约**,变更只影响当前批次
|
|
923
|
+
|
|
924
|
+
### 错误:忽略非功能需求
|
|
925
|
+
|
|
926
|
+
- **问题**:功能完成后发现性能、安全等问题
|
|
927
|
+
- **修复**:**将非功能需求融入DoD或Story验收标准**
|
|
928
|
+
|
|
929
|
+
---
|
|
930
|
+
|
|
931
|
+
## 合理性、边界与适应场景
|
|
932
|
+
|
|
933
|
+
### 合理性(适合场景)
|
|
934
|
+
|
|
935
|
+
- **敏捷+架构规范双需求**的项目(互联网产品、中后台系统)
|
|
936
|
+
- **大型复杂需求**,需要同时保证快速交付与技术可控
|
|
937
|
+
- **Superpowers/Trae-CN 环境**,需要适配子代理驱动开发与测试驱动开发
|
|
938
|
+
- **个人开发**,流程轻量但规范
|
|
939
|
+
|
|
940
|
+
### 边界(固有约束)
|
|
941
|
+
|
|
942
|
+
- **批次内强时序依赖**:每批内必须 1→2→3→4,前一步未固化无法进入下一步
|
|
943
|
+
- **批次间并行有限**:批次按优先级顺序执行,无法完全并行
|
|
944
|
+
|
|
945
|
+
### 不适应场景
|
|
946
|
+
|
|
947
|
+
- **纯探索型项目**(需求完全不确定,每天都在变)
|
|
948
|
+
- **非Web系统**(移动端原生、IoT、强实时系统)
|
|
949
|
+
- **纯瀑布项目**(要求全量设计完成后再开发)
|
|
950
|
+
|
|
951
|
+
---
|
|
952
|
+
|
|
953
|
+
## 快速参考表
|
|
954
|
+
|
|
955
|
+
| 步骤 | 产出文件 | 核心关注点 |
|
|
956
|
+
|------|----------|------------|
|
|
957
|
+
| 0 | docs/stories/user_stories.md | 用户价值、垂直切片 |
|
|
958
|
+
| 1 | docs/ui/pages.md | 用户看到什么、操作什么 |
|
|
959
|
+
| 2 | docs/architecture/frontend-backend.md | 前后端技术边界、权责划分 |
|
|
960
|
+
| 3 | docs/database/schema.md + docs/api/contract.md | 数据结构、接口契约 |
|
|
961
|
+
| 4 | specs/xxx/xxx.md | 独立功能规格、子代理任务 |
|
|
962
|
+
|
|
963
|
+
---
|
|
964
|
+
|
|
965
|
+
## 与 ui-sdd、sdd-add 的配置建议
|
|
966
|
+
|
|
967
|
+
### 三层架构定位
|
|
968
|
+
|
|
969
|
+
| 技能 | 核心定位 | 层级 | 产出 |
|
|
970
|
+
|------|---------|------|------|
|
|
971
|
+
| **sdd** | 需求层·业务拆分 | 顶层 | docs/stories/、docs/ui/pages.md、docs/architecture/、docs/database/、docs/api/、specs/ |
|
|
972
|
+
| **ui-sdd** | 架构层·UI交互 | 中层 | spec/ui/ 下完整 SDD(100%覆盖) |
|
|
973
|
+
| **sdd-add** | 迭代层·快速迭代 | 底层 | docs/temp-requirements/ 下临时迭代 |
|
|
974
|
+
|
|
975
|
+
### 完整流程配置
|
|
976
|
+
|
|
977
|
+
#### 项目从零启动(需求→UI→实现)
|
|
978
|
+
|
|
979
|
+
1. **先用 sdd**:拆 Epic→Feature→Story,写验收标准、做估算
|
|
980
|
+
2. **再用 ui-sdd**:对 Story 中的 UI/交互需求,按「App全域盘点清单」勾出所有页面/组件/规则,建完整 SDD
|
|
981
|
+
3. **交付开发**(或用 sdd-add 做快速实现)
|
|
982
|
+
|
|
983
|
+
#### 正常迭代开发(日常新功能)
|
|
984
|
+
|
|
985
|
+
1. **先用 sdd**:把新功能拆成 Story,写验收标准
|
|
986
|
+
2. **再用 ui-sdd**:回「盘点清单」补勾,补建/更新 spec/ui/ 下的 SDD
|
|
987
|
+
3. **最后用 sdd-add**:做快速实现,需求文档中必须**引用 sdd 的 Story 和 ui-sdd 的 SDD**
|
|
988
|
+
|
|
989
|
+
#### 临时需求/紧急修复
|
|
990
|
+
|
|
991
|
+
1. **直接用 sdd-add**:快速澄清、优先级、实现
|
|
992
|
+
2. **如果涉及 UI/新增页面**:必须同步回 ui-sdd:补勾、补建 SDD
|
|
993
|
+
3. **如果涉及 Story 拆分**:必须同步回 sdd:补 Story
|
|
994
|
+
|
|
995
|
+
### 文档关联引用规范
|
|
996
|
+
|
|
997
|
+
#### sdd Story 中引用 ui-sdd
|
|
998
|
+
|
|
999
|
+
在 sdd 产出的 Story 文档中加入:
|
|
1000
|
+
|
|
1001
|
+
```markdown
|
|
1002
|
+
## 关联文档
|
|
1003
|
+
|
|
1004
|
+
- 对应UI交互SDD:spec/ui/pages/xxx-page.sdd.md
|
|
1005
|
+
- 复用组件SDD:spec/ui/common/ui-yyy.sdd.md
|
|
1006
|
+
- 相关弹窗SDD:spec/ui/dialog/zzz-dialog.sdd.md
|
|
1007
|
+
```
|
|
1008
|
+
|
|
1009
|
+
#### ui-sdd SDD 中引用 sdd Story
|
|
1010
|
+
|
|
1011
|
+
在 ui-sdd 产出的页面/组件SDD中加入:
|
|
1012
|
+
|
|
1013
|
+
```markdown
|
|
1014
|
+
## 关联用户故事
|
|
1015
|
+
|
|
1016
|
+
- 主故事:US-001(在 docs/stories/user_stories.md)
|
|
1017
|
+
- 相关故事:US-002、US-003
|
|
1018
|
+
```
|
|
1019
|
+
|
|
1020
|
+
#### sdd-add 临时需求中引用前两者
|
|
1021
|
+
|
|
1022
|
+
在 sdd-add 产出的临时需求文档中加入:
|
|
1023
|
+
|
|
1024
|
+
```markdown
|
|
1025
|
+
## 关联文档
|
|
1026
|
+
|
|
1027
|
+
- 关联Story:docs/stories/user_stories.md 中的 US-xxx
|
|
1028
|
+
- 关联UI-SDD:spec/ui/pages/yyy-page.sdd.md
|
|
1029
|
+
```
|
|
1030
|
+
|
|
1031
|
+
### 高频场景决策表
|
|
1032
|
+
|
|
1033
|
+
| 场景 | 第1步用 | 第2步用 | 第3步用 |
|
|
1034
|
+
|------|---------|---------|---------|
|
|
1035
|
+
| 新项目从零开始 | sdd(需求拆分) | ui-sdd(UI设计) | 开发 |
|
|
1036
|
+
| 新增完整Story | sdd(Story拆分) | ui-sdd(补SDD) | 开发 |
|
|
1037
|
+
| 临时小功能 | sdd-add(快速处理) | ui-sdd(可选,需UI) | 开发 |
|
|
1038
|
+
| 新增复杂Epic | sdd(Epic拆分) | ui-sdd(批量建SDD) | 分批开发 |
|
|
1039
|
+
| 临时小bug修复 | sdd-add | 无需 | 快速修复 |
|
|
1040
|
+
| 优化现有交互 | sdd(更新Story) | ui-sdd(更新SDD) | sdd-add(实现) |
|
|
1041
|
+
|
|
1042
|
+
### 一句话原则
|
|
1043
|
+
|
|
1044
|
+
**「sdd 定方向(做什么),ui-sdd 定样子(怎么做),sdd-add 填细节(快速补);从上往下拆,从下往上补,互相引用不遗漏」**
|