跳到主要内容

Spec-Driven Development(规范驱动开发)

概述

Spec-Driven Development (SDD)Spec-Driven Coding 是一种以规范(Specification)为先导的软件开发方法论。开发者先编写详细的需求规范,然后由 AI 根据规范自动生成代码。

核心理念:明确规范 → 自动实现 → 减少沟通成本


核心概念

1. 什么是 Spec(规范)

Spec 是对软件功能的精确、可执行的描述

# 用户登录功能规范

## 功能描述
用户可以使用邮箱和密码登录系统。

## 输入
- email: 字符串,符合邮箱格式
- password: 字符串,8-32位,包含字母和数字

## 输出
- 成功:返回用户信息和 JWT token
- 失败:返回错误信息

## 验证规则
- 邮箱必须已注册
- 密码必须正确
- 连续失败5次后锁定账户30分钟

## API 端点
POST /api/auth/login

2. Spec-Driven vs 传统开发

开发方式流程优势劣势
传统开发需求 → 设计 → 编码灵活沟通成本高
Spec-Driven规范 → AI 生成代码自动化、可追溯需要编写规范
敏捷开发用户故事 → 迭代快速响应文档缺失

Spec-Driven Development 的流程

┌─────────────────────────────────────────────────────────┐
│ Spec-Driven Development 流程 │
├─────────────────────────────────────────────────────────┤
│ │
│ 1. 需求收集 │
│ │ │
│ ▼ │
│ 2. 编写规范 (Spec) ┌─────────────────┐ │
│ │ │ 自然语言规范 │ │
│ ├────────────────────▶│ API 规范 │ │
│ │ │ 数据模型规范 │ │
│ │ │ UI 规范 │ │
│ │ └─────────────────┘ │
│ │ │
│ ▼ │
│ 3. AI 代码生成 ┌─────────────────┐ │
│ │ │ Claude Code │ │
│ ├────────────────────▶│ Cursor Agent │ │
│ │ └─────────────────┘ │
│ │ │
│ ▼ │
│ 4. 代码审查 │
│ │ │
│ ▼ │
│ 5. 测试验证 │
│ │ │
│ ▼ │
│ 6. 部署上线 │
│ │
└─────────────────────────────────────────────────────────┘

Spec 的类型

1. 功能规范

描述软件应该做什么:

## 功能:用户注册

### 需求
用户可以注册新账户

### 输入字段
- username: 3-20字符,字母数字下划线
- email: 有效的邮箱地址
- password: 最少8位,必须包含大小写字母和数字

### 业务规则
- 用户名必须唯一
- 邮箱必须未被注册
- 注册后自动发送验证邮件

2. API 规范

描述 API 接口:

# OpenAPI 规范
openapi: 3.0.0
info:
title: 用户认证 API
version: 1.0.0

paths:
/auth/login:
post:
summary: 用户登录
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
format: email
password:
type: string
minLength: 8
responses:
'200':
description: 登录成功

3. 数据模型规范

描述数据结构:

// TypeScript 接口规范
interface User {
id: string;
username: string;
email: string;
createdAt: Date;
updatedAt: Date;
}

interface LoginRequest {
email: string;
password: string;
}

interface LoginResponse {
success: boolean;
token?: string;
user?: User;
error?: string;
}

4. UI 规范

描述界面要求:

## 登录页面 UI 规范

### 布局
- 居中卡片式布局
- 宽度 400px

### 组件
- 邮箱输入框
- 密码输入框(带显示/隐藏切换)
- "记住我" 复选框
- "忘记密码" 链接
- 登录按钮

### 样式
- 主色调:#3B82F6
- 圆角:8px
- 阴影:0 4px 6px rgba(0,0,0,0.1)

支持 Spec-Driven 的工具

1. Cursor Composer

Cursor 的多步骤任务执行:

// 用户输入
"实现用户认证功能,包含注册、登录、登出"

// Cursor 自动规划
1. 分析需求 → 生成规范
2. 设计数据模型
3. 实现 API 端点
4. 创建 UI 组件
5. 编写测试用例

2. Claude Code CLI

通过 CLAUDE.md 定义规范:

# 项目规范

## 编码规范
- 使用 TypeScript 严格模式
- 遵循 ESLint 规则
- 组件使用函数式声明

## API 规范
- RESTful 风格
- 统一错误处理
- JWT 认证

## 测试规范
- 单元测试覆盖率 > 80%
- 使用 Vitest

Spec 编写最佳实践

1. SMART 原则

原则说明示例
Specific具体明确"用户可以登录" 而非 "实现认证"
Measurable可衡量"密码8-32位" 而非 "密码足够复杂"
Achievable可实现考虑技术限制
Relevant相关性与业务目标一致
Time-bound有时限"在2秒内完成"

2. 结构化规范

## 功能概述
一句话描述功能

## 用户故事
作为 [角色],我想要 [功能],以便 [目的]

## 验收标准
- [ ] 场景1:描述
- [ ] 场景2:描述

## 技术规范
### 数据模型
### API 接口
### 业务逻辑

## 非功能需求
### 性能:响应时间 < 200ms
### 安全:HTTPS + JWT
### 兼容:支持主流浏览器

3. 使用规范语言

  • 使用自然语言但保持结构化
  • 避免歧义词汇("尽可能"、"大概")
  • 使用具体数字("3次"而非"多次")
  • 包含边界条件("空值"、"超长输入")

Spec-Driven vs 其他开发方式

Spec-Driven vs Vibe Coding

维度Spec-DrivenVibe Coding
规划详细规范随性发挥
可追溯
团队协作容易困难
AI 参与核心辅助
适用场景大型项目、团队原型、个人项目

Spec-Driven vs Test-Driven Development

维度Spec-DrivenTDD
起点规范测试
顺序规范 → 代码 → 测试测试 → 代码
AI 友好
可组合可组合相对独立

实施建议

1. 规范模板

# [功能名称] 规范

## 背景
为什么需要这个功能

## 目标
这个功能要达到什么效果

## 功能描述
详细的功能说明

## 验收标准
如何判断功能完成

## 技术考虑
- 性能要求
- 安全考虑
- 兼容性要求

## 依赖
依赖的其他功能或模块

2. 工具配置

// .claude/spec-template.json
{
"template": "# 功能规范\n\n## 功能概述\n{summary}\n\n## 需求\n{requirements}\n\n## 验收标准\n{acceptance}",
"requiredFields": ["summary", "requirements"],
"outputFormat": "markdown"
}

3. 版本管理

specs/
├── v1.0/
│ ├── auth-spec.md
│ ├── user-spec.md
│ └── api-spec.md
├── v1.1/
│ ├── auth-spec.md (更新)
│ └── payment-spec.md (新增)

参考资源

相关工具

相关方法论


文档更新时间:2025 年 12 月