软件开发方法论概览:TDD、SDD、DDD、BDD

本文介绍四种在现代软件工程中非常重要的开发方法论:TDD、SDD、DDD、BDD。它们分别从测试、设计、领域建模和行为驱动等不同角度提升软件质量与开发效率。


1. TDD(Test-Driven Development,测试驱动开发)

核心思想

先写测试,再写实现代码,通过测试来驱动开发过程。

基本流程(Red-Green-Refactor)

  1. Red(红):编写一个失败的测试

  2. Green(绿):编写最少代码让测试通过

  3. Refactor(重构):优化代码结构,同时保持测试通过

优点

  • 提高代码质量和可维护性

  • 降低 bug 数量

  • 促进模块化设计

缺点

  • 初期开发速度较慢

  • 对开发者测试能力要求较高


2. SDD(Specification-Driven Development,规格驱动开发)

核心思想

通过明确的规格说明(Specification)来指导开发,实现“先定义,再实现”。

关键特点

  • 规格通常是形式化或半形式化的文档

  • 可以作为开发与测试的统一依据

  • 强调“需求即文档即测试”

常见形式

  • 接口规范(API Spec,如 OpenAPI)

  • 数据契约(Contract)

  • 类型系统约束(Type-driven)

优点

  • 减少歧义,提高沟通效率

  • 有助于自动化测试与验证

  • 支持前后端并行开发

缺点

  • 编写和维护规格成本较高

  • 过度形式化可能降低灵活性


3. DDD(Domain-Driven Design,领域驱动设计)

核心思想

以业务领域为核心,通过建模真实世界的业务逻辑来驱动软件设计。

核心概念

  • 领域(Domain):业务问题空间

  • 实体(Entity):有唯一标识的对象

  • 值对象(Value Object):无标识,仅由属性定义

  • 聚合(Aggregate):一组相关对象的集合

  • 领域服务(Domain Service):不适合归属到实体的业务逻辑

  • 限界上下文(Bounded Context):模型适用的边界

优点

  • 更贴近业务本质

  • 提高复杂系统的可维护性

  • 有助于团队沟通(统一语言)

缺点

  • 学习曲线较陡

  • 对业务理解要求高

  • 小项目可能过度设计


4. BDD(Behavior-Driven Development,行为驱动开发)

核心思想

通过描述系统行为(Behavior)来驱动开发,强调业务可读性。

表达方式(Gherkin 语法)

1
2
3
4
5
6
7

Feature: 用户登录



Scenario: 成功登录

Given 用户在登录页面

1
2


When 用户输入正确的用户名和密码

1
2


Then 用户应该进入首页