Skip to content

1.1 小明的方法论困惑——三种方式,一个项目

小明是一个有三年经验的开发者。公司启动了一个新项目——内部员工管理系统,小明被指定为技术负责人。

项目启动会上,三个同事提出了三种截然不同的开发方式:

TDD 派
"先写测试,再写代码!缺陷率能降低 40-90%,长期看更省时间。"
——后端老王,10 年经验
SDD 派
"先写 API 规格文档!前后端并行开发,文档永远不落后。现在还有 AI 辅助生成代码。"
——架构师小李,微服务专家
Vibe Coding 派
"直接让 AI 写!我们先把原型跑起来,验证需求再说。一天就能出 MVP。"
——前端小张,AI 工具爱好者

小明听完更困惑了:三种方法听起来都对,但它们说的完全不是一回事。到底该选哪个?


三个人的故事

为了理解这三种方法论,让我们看看三个人面对同一个任务——"实现一个用户登录功能"——会怎么做。

老王的做法:TDD(测试驱动开发)

老王打开编辑器,先写了一个测试

python
# 老王第一步:写测试(此时登录功能还不存在)
def test_login_success():
    auth = AuthService()
    result = auth.login("admin", "correct_password")
    assert result.success is True
    assert result.token is not None

def test_login_wrong_password():
    auth = AuthService()
    result = auth.login("admin", "wrong_password")
    assert result.success is False

然后他运行测试——红色,失败。因为 AuthService 根本不存在。

接着他写最简单的代码让测试通过——绿色。最后重构代码让它更优雅——重构

这就是 TDD 的核心循环:红色 → 绿色 → 重构

小李的做法:SDD(规格驱动开发)

小李打开编辑器,先写了一个 OpenAPI 规格文档

yaml
# 小李第一步:写规格(此时还没写任何代码)
openapi: 3.0.0
paths:
  /api/login:
    post:
      summary: 用户登录
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required: [username, password]
              properties:
                username: { type: string, minLength: 3 }
                password: { type: string, minLength: 8 }
      responses:
        '200':
          description: 登录成功,返回 token
        '401':
          description: 用户名或密码错误

写完规格后,他用工具自动生成了代码骨架、Mock 服务器和测试。前端可以基于这份规格立刻开始开发,不用等后端。

小张的做法:Vibe Coding(氛围编程)

小张打开 Cursor,用自然语言跟 AI 说话

小张: "帮我做一个用户登录功能,用 Python Flask,
      支持 JWT token,密码要 bcrypt 加密,
      要有错误处理和日志。"

AI 几秒钟就生成了完整代码。小张运行了一下——有个小错误。他继续:

小张: "运行报错了,说 import jwt 找不到,帮我修复"

AI 修复了依赖问题。小张又加了几个功能。两小时后,登录功能跑起来了。


小明的顿悟

看完三个人的做法,小明发现一个关键事实:

关键洞察
三种方法论回答的是三个不同的问题:

TDD:这段代码正确吗?——关注实现质量
SDD:我们在构建正确的东西吗?——关注需求对齐
Vibe Coding:能不能跑起来?——关注快速验证

不是哪个更好,而是它们解决的问题不一样


那小明最后怎么选的?

剧透:小明没有选任何一种——他三种都用了

  • 第一周:用 Vibe Coding 快速出原型,让产品经理确认需求
  • 第二周:需求确认后,用 SDD 写 API 规格文档,前后端并行开发
  • 之后:核心业务逻辑用 TDD 保证质量,辅助功能让 AI 帮忙

这就是后面要讲的融合工作流。但在理解融合之前,我们需要先深入认识每一种方法论。


📌 本节核心要点

概念要点
三种方法论的关系不是对立的,而是回答不同问题
TDD 关注代码是否正确
SDD 关注在构建正确的东西吗
Vibe Coding 关注能不能先跑起来
最佳策略不是选一个,而是根据阶段选择合适的方法

知识检查

问题 1:TDD、SDD、Vibe Coding 三种方法论回答的三个核心问题分别是什么?

查看答案
  • TDD:这段代码正确吗?(关注实现质量)
  • SDD:我们在构建正确的东西吗?(关注需求对齐)
  • Vibe Coding:能不能先跑起来?(关注快速验证)

问题 2:小明的"员工管理系统"项目,为什么三种方法论都用上了?每种分别用在什么阶段?

查看答案
  • Vibe Coding(第 1 周):快速出原型,让产品经理确认需求——需求还不明确时的探索工具
  • SDD(第 2 周):需求确认后,用规格文档定义 API,前后端并行开发——消除歧义的协作工具
  • TDD(后续):核心业务逻辑用测试保障质量——防止回归错误的验证工具

问题 3:判断题——三种方法论是互相替代的关系,选了一种就不能用其他两种。

查看答案

错误。三种方法论是互补的,可以融合使用。同一个项目的不同阶段、不同功能模块,可以使用不同的方法论。关键洞察是"它们解决的问题不一样"。


下一节预告

三种方法论看起来完全不同,但能用一句话总结吗?下一节我们用最简短的方式定义每一种。

下一节:一句话总结三种方法论