行为驱动开发—BDD
·
一、什么是 BDD
BDD Behavior‑Driven Development,行为驱动开发,是从 TDD 测试驱动开发 演进而来的敏捷开发方法论。
核心思想:用业务人员、产品、开发、测试都看得懂的自然语言,描述系统行为,再把这份描述直接变成可执行测试,打通需求‑开发‑测试。
1.1 BDD 解决什么痛点
传统模式痛点:
- 产品写需求文档,语言模糊、有歧义
- 开发按自己理解实现代码
- 测试按自己理解写用例
- 最后上线发现:大家理解的不是同一个东西
TDD 痛点:TDD 是开发者视角,写单元测试代码,业务人员看不懂测试用例。
BDD 做法:
所有人用统一的语言描述:当发生什么事情、做什么操作、应该得到什么结果。这份文档既是需求说明,又是自动化测试脚本。
1.2 BDD 核心关键词
- 行为 Behavior:系统对外表现出来能做什么,而不是内部怎么实现
- 通用语言 Ubiquitous Language:业务、开发、测试共同认可的术语
- Gherkin:自然语言脚本格式,用来描述场景
- Given‑When‑Then:BDD 标准句式
二、Given‑When‑Then 模型
这是 BDD 场景标准三段式结构
| 关键字 | 含义 |
|---|---|
| Given | 前置条件、初始状态,系统处于什么环境 |
| When | 触发动作,用户 / 外部做了什么操作 |
| Then | 预期结果,系统应该产生什么行为 |
可选关键字
- And / But:用来拼接多条 Given / When / Then
举一个最简单业务例子:用户登录
不用 BDD 口语描述:用户输错密码不能登录。 BDD 标准场景写法 Gherkin
Feature:用户登录功能
As一个用户
I want能够登录系统
So that可以访问个人中心
Scenario:密码错误时登录失败
Given 用户账号是admin
And 用户密码是错误密码123456
When 用户提交登录请求
Then 返回登录失败提示
And 不能进入首页
这份 Gherkin 文件普通人都看得懂,同时可以被 BDD 框架解析,自动跑测试。
三、BDD 和 TDD 的区别
| 维度 | TDD 测试驱动开发 | BDD 行为驱动开发 |
|---|---|---|
| 视角 | 开发者视角,函数、方法、类 | 业务视角、系统对外行为 |
| 语言 | Java/Python 代码写测试 | 自然语言 Gherkin + 代码实现 |
| 受众 | 开发人员 | 产品、测试、开发、业务方全员 |
| 粒度 | 偏向单元、方法级别 | 偏向业务功能、用户场景 |
| 关注点 | 代码是否正确 | 业务行为是否符合需求 |
| 关系 | BDD ≠ 取代 TDD;BDD 高层场景,TDD 底层单元 |
简单一句话: TDD:先写测试代码,再写业务代码 BDD:先用自然语言定义业务行为,再开发 + 自动化验证这个行为
四、Java 生态主流 BDD 框架
Java 最常用两套
- Cucumber-JVM:业界最标准 BDD 框架,支持 Gherkin
- Spock:Groovy,偏向单元层面 BDD 本文选用 Cucumber + JUnit5 + Maven,完整可运行 Demo
Cucumber 原理
整体流程:
- 编写
.feature文件,使用 Gherkin 自然语言,描述场景 - 编写步骤定义 Step Definition Java 代码,把每一句 Gherkin 语句绑定到一段 Java 执行代码
- 运行测试,Cucumber 解析 feature,逐条执行对应的 Java 代码,校验结果
- 生成测试报告
feature 文件 和 Java 代码通过注解绑定,文字匹配方法。
五、BDD 完整开发流程
标准 BDD 开发流程,俗称3 个朋友讨论
产品、开发、测试三方一起开会,梳理业务场景
- 示例梳理 Example Mapping 示例映射 讨论这个功能有哪些场景,正常场景、异常场景
- 使用 Gherkin 编写 Feature、Scenario,用 Given‑When‑Then 写出清晰行为
- 评审 feature 脚本,所有人确认需求理解一致
- 开发人员编写业务代码 + 实现 Step 步骤代码
- 运行 Cucumber 测试,验证行为
- 如果失败,修复代码直到场景全部通过
- feature 文件长期维护,成为活文档Living Documentation
更多推荐
所有评论(0)