TDD、BDD、ATDD以及SBE的概念和区别
在软件开发或是软件测试中会遇到以下这些词:TDD 、BDD 、ATDD以及SBE,这些词代表什么意思呢? 它们之间有什么关系吗?
TDD 、BDD 、ATDD以及SBE的基本概念
TDD:(Test Driven Development)是一种软件开发方法,它强调在编写代码之前先编写测试。TDD 的主要思想是先编写一个测试用例,然后编写能够通过该测试用例的最小代码实现,接着运行测试用例并查看是否能够通过,最后重构代码以增强代码质量。这种方法可以帮助开发人员更快地发现和解决问题,并提高代码的可维护性、可重用性和可靠性。
ATDD:代表Acceptance Test Driven Development,它是一种敏捷软件开发方法。它的核心思想是在开发过程中首先关注用户需求和期望,然后根据这些需求编写自动化的验收测试用例。开发人员与客户和业务用户密切合作,确保开发的功能符合期望并满足用户需求。ATDD 可以帮助团队更好地理解问题,并确保开发人员和业务利益相关者在开发过程中保持相关,减少沟通障碍,并提高软件质量和生产率。
BDD:表示行为驱动开发(Behavior-Driven Development),是一种敏捷软件开发方法,强调开发团队应该以用户行为为核心来开发软件,而不是只关注功能。BDD强调通过明确定义的场景和用户故事来推动软件开发,帮助团队更好地理解和满足用户需求,同时加强开发团队内部的协作和沟通。在BDD中,开发人员、测试人员和业务人员之间的交流是非常重要的,他们需要共同制定和理解用户故事和场景,并将它们转化为可执行的测试用例。这种方法可以促进软件质量的提高和快速交付。
SBE: Specification by Example是一种敏捷方法,旨在通过创建具体示例来建立软件开发所需的共同理解。它强调通过业务规则和用户需求的实际示例来描述软件的功能和行为。这种方法提倡开发团队和利益相关者之间的协作和交流,并有助于确保整个团队对要交付的软件具有共同的理解。Specification by Example强调了功能测试驱动的开发方法,并支持自动化测试的实现。
从概念上看, 这四个词都是一种软件开发方法, 都属于敏捷开发方法。TDD这个相对还比较好理解,简单点说,就是先写测试,再去开发,那么另外三个的区别又是什么呢?
TDD 、BDD 、ATDD以及SBE的由来
-
TDD最早是由Kent Beck在2002年提出的,他在一篇名为《Test Driven Development: By Example》的书中详细阐述了这种开发方法的原理和实践。TDD的出现是为了解决传统的软件开发中测试工作落后于开发工作的问题,以及开发人员和测试人员之间没有足够的沟通和协作的问题。TDD强调了开发人员编写自动化测试用例的重要性,这使得测试工作可以更早地开始,并且帮助开发人员更好地理解业务需求,编写更贴近实际需求的代码。
-
ATDD最早是由Kent Beck和Cynthia Andres在《Extreme Programming Explained》一书中提出的,其目的是让开发人员与业务人员密切合作,确保开发出的软件满足业务需求。ATDD的核心是编写验收测试用例,这些测试用例描述了业务需求,并且必须由业务人员审查和接受。
-
BDD则是由Dan North在其博客上首次提出的,他认为传统的TDD缺乏对系统行为和设计的明确定义。BDD的核心是使用自然语言来描述系统的行为,并将其转化为可以执行的测试用例。BDD强调使用文本描述来定义测试用例,使得开发人员和业务人员都能理解测试用例的意义,从而更好地确保开发出的软件满足业务需求。
-
SBE,Specification by Example 则是由Gojko Adzic在著作Specification By Example(实例化需求)详细阐述,介绍了如何通过实例去分析和沟通需求。

这四者出现的时间顺序依次是: TDD > ATDD > BDD > SBE
TDD 、BDD 、ATDD以及SBE 的区别和联系
- TDD与ATDD
TDD是测试驱动开发,ATDD是验收测试驱动开发,都是关于测试的,是与所开发的系统紧密联系的。但TDD是开发人员和测试人员之间的沟通,而ATDD则主要是开发人员和业务人员之间的沟通。
- TDD与BDD
BDD不是关于测试的,其着重关注需求、关注客户的业务价值,所描述的需求用例是可以独立于软件系统存在的,因为客户的业务是始终存在的,不取决于是否有软件系统来支撑。
对比一下TDD 和 BDD 的主要区别:
| TDD (测试驱动开发) | BDD (行为驱动开发) |
|---|---|
| 1. TDD 是一种迭代的开发方法,开发者首先编写测试,然后产生代码,使这个测试运行通过。 | 1. 在 BDD 中,开发者,测试人员和业务人员一起确定可受验收的测试标准,然后编写样例,最后由开发者编写代码让样例通过。 |
| 2. TDD 主要关注软件的技术功能。 是有关于单元测试的。 | 2. BDD 更关注软件的业务和行为,关注的不仅仅是代码的功能,更多是用户体验。通常在验收测试和功能测试时会使用 BDD。 |
| 3. TDD 是通过编写测试来驱动开发过程,这种写法对于程序员来说更容易理解。 | 3. BDD 是使用自然语言和具有描述性的句子来编写的测试。这为非技术人员理解何时以及如何测试提供了便利。 |
| 4. 在 TDD 中,开发者首先需要编写失败的单元测试,然后编写代码使测试通过。 | 4. 在 BDD 中,从一开始就需要定义预期的行为。这种行为是为了确定在给定的情况下应用程序应做什么。 |
这两种开发方法并非相互排斥,而是可以结合使用的。许多团队都会在项目中同时实施 TDD 和 BDD。
-
ATDD与BDD
ATDD(Acceptance Test Driven Development)和BDD(Behavior Driven Development)都是敏捷开发方法中的测试驱动开发(TDD)实践的变体。它们的出现是为了解决传统的软件开发中开发人员和业务人员之间缺乏通信的问题,这往往导致开发出来的软件无法满足业务需求。
因此,虽然ATDD和BDD在一定程度上有所不同,但它们的目的是相同的:确保开发出的软件能够满足业务需求。同时它们也有一些共同点,例如都强调了测试驱动开发的核心思想,都强调了开发人员和业务人员之间的紧密合作等。 -
BDD与SBE
SBE(Specification By Example,实例化需求)是在BDD之后由Gojko提出来的,也是关于需求的,主要强调通过列举实例发现需求中的缺失概念。BDD也是关注需求的,同样会使用实例来描述行为。两者的本质没有区别。
对比一下 TDD , ATDD , BDD 三者的区别:
| 区别项次 | TDD | ATDD | BDD |
|---|---|---|---|
| 参与者 | 开发人员,测试人员 | 业务人员,开发人员,测试人员 | ATDD和TDD的组合 |
| 重点 | 一种模式或范例 | 是客户进入设计阶段 | 专注客户和开发者的系统行为方面,引导客户进入测试阶段 |
| 敏捷步骤 | 不断重复:1.测试2.编码3.重构 | 不断重复:1.讨论 2.开发 3. 发布 | 按预期行为逐步构建功能 |
| 输入文档 | 需求文档 | 验收标准+示例 | GWT格式书写的实例化文档 |
| 自动化 | 必须 | 非必须 | 必须 |
| 故事 | 每个功能都需要对应一个测试 | 每个故事对应一个验收测试 | 每个故事对应一个行为测试 |
| 主流工具 | xUnit | .RobotFramework, .FitNesse | Cucumber,JBehave,Lettuce,Robt Framework |
| 最终用户 | 开发人员,测试人员 | 客户 | 客户和开发者 |
最简单的理解
到这里是不是感觉上面的内容很多,看着看着还是有点迷惑,接下来笔者尝试以最简单的方式来解释一下这四个概念:
TDD , ATDD , BDD ,SBE 这四者基本都属于软件开发方法或者实践,一个方法的出现基本是为了解决面对的问题,
软件开发方法也是为了解决软件开发过程中出现的问题:
- 从软件的洪荒时代开始,开发软件最重要的是保障软件的质量,不能开发运行一个错误的软件, 比如一个计算器软件算出来1+1=3;也不能开发一个软件运行着就崩溃了, 于是软件需要有充分的测试,也就有了TDD
- 把事情做对不一定代表是对的事情,软件的运行可能不会出错,但是这不代表这个软件就是客户需要的软件,客户要求开发一个计算器,但是你却开发了一个计时器,让客户很早的进入设计阶段,关注客户的需求,根据需求编写验收测试用例,也就是ATDD
- 引导客户参与,但是开发人员和客户之间因为领域知识不同,导致沟通存在一些鸿沟,往往鸡同鸭讲,彼此不能很好的理解,于是是不是有一种通用的语言让开发人员和客户都能很好的理解,对于开发人员来说, 使用这种语言的话也就不仅仅关注的是代码层面的内容,而且可以更好的理解用户的行为, 也就是行为驱动开发-BDD
- 在使用通用领域语言描述规格的时候,通用领域语言其实也就是接近自然语言的一种方式, 但是自然语言描述可能会存在歧义,于是把一些冗余或是容易产生误解的描述使用示例的方式进行描述不就更准确了吗?比如描述个人的信息,XX的姓名是XX, 年龄是多少,如果换成示例的模式, 使用一个表格 :
| 姓名 | 年龄 | xx |
| — | — |— |
| oscar | 30 | xx |
这也就是SBE的大概思想。
相关文章:
TDD、BDD、ATDD以及SBE的概念和区别
在软件开发或是软件测试中会遇到以下这些词:TDD 、BDD 、ATDD以及SBE,这些词代表什么意思呢? 它们之间有什么关系吗? TDD 、BDD 、ATDD以及SBE的基本概念 TDD:(Test Driven Development)是一种…...
Android studio:打开应用程序闪退的问题
目录 问题描述分析原因解决方法 在开发Android应用程序的过程中遇到的问题 问题描述 在开发(或者叫测试,这么简单的程序可能很难叫开发)好一个android之后,在Android studio中调试开发好的app时,编辑器没有提示错误&a…...
Mysql数据库性能优化--performance_SCHEMA.STATEMENTS语句分析
使用performance_schema解决常见的故障案例 1 检查sql语句 使用performance_schema很容易找到引起性能问题的查询以及原因。 要启动语句检测,需要启动statement类型的插装。 插装类: statement/sql sql语句,如select,或者create table。s…...
[C/C++]数据结构 链表OJ题: 反转链表
描述: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表 示例: 方法一: 让链表指向反向 如图所示: 代码思路: struct ListNode* reverseList(struct ListNode* head) {struct ListNode* n1NULL;struct ListNode* n2head;struct ListNode*…...
深度学习之基于YoloV5交通信号标志识别系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于YoloV5交通信号标志识别系统介绍 基于YoloV5的交通信号标志识别系统是一种深度学习应用,旨在通过使…...
Linux命令大全
荒诞也好,愚笨也好,总会过去的 文章目录 文件相关压缩相关tarzip 进程相关pskill 网络相关netstat IPC相关ipcsipcrm 系统资源相关topfreefdiskdfdu 权限相关umaskchmodchownchgrp 总结 文件相关 ls:列出当前目录中的文件和子目录。 ls常用…...
元宇宙是否为噱头?若不是,什么是元宇宙?他的概念、技术、应用和影响是什么?
文章来源:元宇宙的概念、技术、应用与影响——一项系统性文献综述 - 中国知网 (cnki.net) 摘要 [目的/意义]系统综述与分析当前国内外的元宇宙研究现状,有利于准确把握元宇宙发展方向,强化元宇宙基础研究,争取元宇宙建构权。[方法…...
293_C++_告警类
2、IncPos S32 AlarmList::IncPos(U32 *pu32Pos, U32 *pu32Cycle) {if((pu32Pos == NULL) || (pu32Cycle == NULL))</...
MySQL基础操作
注:mysql是大小写不敏感的. 1.数据库基础操作(展示) //1.展示当前数据库 show databases;//2.创建数据库 create database 数据库名;//3.使用数据库 use 数据库名;//4.删除数据库 drop database 数据库名;2.SQL中基本类型 2.1 数值类型(整数和浮点型) 注:decimal和numeric…...
ajax样式演示
以下是一段Ajax的演示代码,实现了通过Ajax获取后台数据并将其显示到前台页面上。 HTML文件: <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>Ajax演示</title></head><body><h1>学生…...
Web前端—CSS高级(定位、高级技巧、CSS修饰属性、综合案例:购物网站轮播图)
版本说明 当前版本号[20231108]。 版本修改说明20231107初版20231108对知识点(圆点)进行补充 目录 文章目录 版本说明目录day08-CSS高级01-定位相对定位绝对定位定位居中固定定位堆叠层级 z-index定位总结 02-高级技巧CSS精灵案例-京东服务HTML结构CS…...
linux的sftp复制传输文件
连接远程服务器 sftp -P 端口号 用户名主机 例如:sftp -P 80 ubuntu172.168.0.1 并按照提示输入密码 分别使用命令查看本地当前路径(Local) 和远程路径(Remote) pwd lpwd 使用 cd 远程路径和 lcd 本地路径分别进入对…...
【星海出品】flask(一)demo
如何安装很早就讲过了,这里就省略了 创建虚拟环境 python -m venv ./venv 激活虚拟环境 source venv/Scripts/activate 退出虚拟环境 deactivate 打开一个vue项目,安装一些东西,然后启动 npm run serve npm install element-plus --save npm…...
从vue源码中看diff算法
一、v-for必须要指定key,其作用是什么? 在源码中有一个函数为,其中就是通过判断两个vnode的type和key进行判断,如果这两个属性相同,那么这两个vnode就是相同,所以在设置key的时候也不可以设置为object等无…...
【17】c++11新特性 —>弱引用智能指针weak_ptr(2)
返回管理this的shared_ptr 通过wek_ptr返回管理this资源的共享智能指针对象shared_ptr。C11中为我们提供了一个模板类叫做std::enable_shared_from_this,这个类中有一个方法叫做shared_from_this(),通过这个方法可以返回一个共享智能指针,在…...
如何去除视频水印?三种简便有效的方法解决视频水印问题
在当今社交媒体时代,视频分享已成为一种流行趋势。然而,很多人在分享自己的作品时却苦于视频上存在的水印,水印通常是出于版权保护或品牌推广的目的而添加到视频中的,但有时它们可能会对用户体验造成负面影响。 如果您正在寻找如何…...
快速构建高质量中文APP登录注册页面Figma源文件
在这个数字化时代,移动应用程序(APP)已经成为我们日常生活中不可或缺的一部分。如果您正在为您的中文APP开发登录注册页面,并寻找高质量的UI设计素材,那么您来对地方了!我们为您提供了一个完整的Figma源文件…...
MySQL库的库操作指南
1.创建数据库 一般格式:create database (if not exists) database1_name,database2_name...... 特殊形式: create database charset harset_name collate collate_name 解释: 红色字是用户自己设置的名称charset:指定数据…...
【单目测距】单目相机测距(三)
文章目录 一、前言二、测距代码2.1、地面有坡度2.2、python代码2.2.1、旋转矩阵转角度2.2.2、角度转旋转矩阵2.2.3、三维旋转原理 (Rotation 原理)2.2.4、完整代码 2.3、c 代码 一、前言 上篇博客【单目测距】单目相机测距(二) 有讲到当相机不是理想状态…...
Evaluating Large Language Models: A Comprehensive Survey
本文是LLM系列文章,针对《Evaluating Large Language Models: A Comprehensive Survey》的翻译。 评估大型语言模型:一项综合调查 摘要1 引言2 分类和路线图3 知识和能力评估4 对齐评估5 安全评估6 专业LLM评估7 评估组织8 未来方向9 结论 摘要 大型语…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...
6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决
问题: pgsql数据库通过备份数据库文件进行还原时,如果表中有自增序列,还原后可能会出现重复的序列,此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”,…...
解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...
