Appearance
开发工作流:SDD → TDD → BDD
概述
StormFlow 采用 Spec-Driven Development 作为主干工作流。每个功能从写规格开始,测试在代码前编写,代码让测试变绿。
写 Spec → 写失败测试(RED) → 写最小实现(GREEN) → 重构(REFACTOR) → 更新 Spec
↑_________________________反馈回路_________________________↑完整流程
Step 0:检查 ADR
查阅 docs/decisions/,确认是否有已决策的架构约束。如果此次功能涉及重大技术选型,先写 ADR。
Step 1:写功能 Spec(WHAT 层)
在 docs/specs/{feature}.md 中按模板写规格:
- 明确一句话目标(用户视角,不提技术)
- 写行为约束(前置条件 / 行为 / 后置条件)
- 写状态机(如有状态转换)
- 列出 Acceptance Criteria — 每条可被测试验证
- 将 AC 转化为 BDD Gherkin Scenario
- 标注 TDD 单元测试要点
Spec 审查清单:
- [ ] 每条 AC 是否可被单个测试验证?
- [ ] Spec 中是否混入了 UI 细节(按钮颜色、像素数值)?如果是,移至
guides/design-system.md - [ ] 是否提到了具体实现技术?如果是,移至
decisions/
Step 2:更新模块契约
如果此功能新增或修改了模块的对外接口,先更新 docs/modules/{module}.md 中的接口签名。
Step 3:写失败测试(RED)
3a. 单元测试:
从 Spec 的"TDD 单元测试要点"逐条创建,全部为 FAIL:
bash
pnpm test:unit --watch3b. E2E 测试骨架:
从 Gherkin Scenario 创建 Playwright 测试,先用 test.skip 标记:
typescript
test.skip('场景描述', async ({ page }) => {
// Given / When / Then
})Step 4:写最小实现(GREEN)
按以下顺序:
packages/shared— 类型定义stores/— 纯逻辑(让单元测试通过)services/— 服务层components/— UI 层(让集成测试通过)
规则: 只写让当前失败测试通过的最小代码,不超前实现。
Step 5:重构(REFACTOR)
所有测试保持绿色的前提下:提取重复、改善命名、整理结构。
Step 6:激活 E2E 测试
移除 test.skip,运行 E2E:
bash
pnpm test:e2eStep 7:更新 Spec 状态
将已完成的 AC 标记为 [x]。Spec 必须与实现同步,这是 SDD 的核心纪律。
规则
- Spec 先行 — 没有 Spec 的功能不开始开发
- AC 即测试 — 每条 AC 必须有对应测试
- Spec 与代码同步 — 已实现的 AC 必须是
[x],未实现的必须是[ ] - ADR 记录重大决策 — 技术选型、架构变更必须写 ADR,与代码一起提交
快速参考
bash
# 开发时持续运行测试
pnpm test:unit --watch
# 提交前全量验证
pnpm test && pnpm typecheck && pnpm lint
# 查看 E2E 报告
pnpm test:e2e --reporter=html