TDD、BDD、ATDD以及SBE的概念和区别

news2024/11/26 21:20:35

在软件开发或是软件测试中会遇到以下这些词: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 的区别和联系

  1. TDD与ATDD

TDD是测试驱动开发,ATDD是验收测试驱动开发,都是关于测试的,是与所开发的系统紧密联系的。但TDD是开发人员和测试人员之间的沟通,而ATDD则主要是开发人员和业务人员之间的沟通。

  1. 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。

  1. ATDD与BDD
    ATDD(Acceptance Test Driven Development)和BDD(Behavior Driven Development)都是敏捷开发方法中的测试驱动开发(TDD)实践的变体。它们的出现是为了解决传统的软件开发中开发人员和业务人员之间缺乏通信的问题,这往往导致开发出来的软件无法满足业务需求。
    因此,虽然ATDD和BDD在一定程度上有所不同,但它们的目的是相同的:确保开发出的软件能够满足业务需求。同时它们也有一些共同点,例如都强调了测试驱动开发的核心思想,都强调了开发人员和业务人员之间的紧密合作等。

  2. BDD与SBE
    SBE(Specification By Example,实例化需求)是在BDD之后由Gojko提出来的,也是关于需求的,主要强调通过列举实例发现需求中的缺失概念。BDD也是关注需求的,同样会使用实例来描述行为。两者的本质没有区别。

对比一下 TDD , ATDD , BDD 三者的区别:

区别项次TDDATDDBDD
参与者开发人员,测试人员业务人员,开发人员,测试人员ATDD和TDD的组合
重点一种模式或范例是客户进入设计阶段专注客户和开发者的系统行为方面,引导客户进入测试阶段
敏捷步骤不断重复:1.测试2.编码3.重构不断重复:1.讨论 2.开发 3. 发布按预期行为逐步构建功能
输入文档需求文档验收标准+示例GWT格式书写的实例化文档
自动化必须非必须必须
故事每个功能都需要对应一个测试每个故事对应一个验收测试每个故事对应一个行为测试
主流工具xUnit.RobotFramework, .FitNesseCucumber,JBehave,Lettuce,Robt Framework
最终用户开发人员,测试人员客户客户和开发者

最简单的理解

到这里是不是感觉上面的内容很多,看着看着还是有点迷惑,接下来笔者尝试以最简单的方式来解释一下这四个概念:
TDD , ATDD , BDD ,SBE 这四者基本都属于软件开发方法或者实践,一个方法的出现基本是为了解决面对的问题,
软件开发方法也是为了解决软件开发过程中出现的问题:

  • 从软件的洪荒时代开始,开发软件最重要的是保障软件的质量,不能开发运行一个错误的软件, 比如一个计算器软件算出来1+1=3;也不能开发一个软件运行着就崩溃了, 于是软件需要有充分的测试,也就有了TDD
  • 把事情做对不一定代表是对的事情,软件的运行可能不会出错,但是这不代表这个软件就是客户需要的软件,客户要求开发一个计算器,但是你却开发了一个计时器,让客户很早的进入设计阶段,关注客户的需求,根据需求编写验收测试用例,也就是ATDD
  • 引导客户参与,但是开发人员和客户之间因为领域知识不同,导致沟通存在一些鸿沟,往往鸡同鸭讲,彼此不能很好的理解,于是是不是有一种通用的语言让开发人员和客户都能很好的理解,对于开发人员来说, 使用这种语言的话也就不仅仅关注的是代码层面的内容,而且可以更好的理解用户的行为, 也就是行为驱动开发-BDD
  • 在使用通用领域语言描述规格的时候,通用领域语言其实也就是接近自然语言的一种方式, 但是自然语言描述可能会存在歧义,于是把一些冗余或是容易产生误解的描述使用示例的方式进行描述不就更准确了吗?比如描述个人的信息,XX的姓名是XX, 年龄是多少,如果换成示例的模式, 使用一个表格 :
    | 姓名 | 年龄 | xx |
    | — | — |— |
    | oscar | 30 | xx |
    这也就是SBE的大概思想。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1186226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux中固定ip端口和修改ip地址

一,更改虚拟网络编辑器 1,首先启动VMware,选择自己要更改ip或固定ip的虚拟机,并找到虚拟网络配编辑器,点击进入 2,进入之后需要点击右下角获取管理员权限后才能修改,有管理员权限之后图片如下 …

影响金融软件开发价格的因素有哪些?

随着科技的发展,金融行业逐渐向数字化和信息化转型,在这个过程中,金融软件开发成为了重要的支撑,然而,金融软件开发的价格是一个复杂的问题,受到多种因素的影响,本文将详细解析影响金融软件开发…

HiSilicon352 android9.0 适配红外遥控器

海思Android解决方案在原生Android基础上,基于传统电视用户使用习惯,增加了对红外遥控器和按键板的支持,使传统电视用户能更好适应智能电视方案。 一.功能描述: 在系统启动时,会先启动android_ir_user;vinp…

程序员可以做哪些副业?我整理的千字副业指南。

都说不想做副业的程序员不是好程序员,尤其是在经济形势不好的现在,有一份靠谱和稳定的副业更是成为了程序员的不二之选。程序员的副业是细水长流型的,虽然收入未必能超过主业,但胜在每月稳定入账,可以作为小金库和备用…

基于STC12C5A60S2系列1T 8051单片机SPI通信应用

基于STC12C5A60S2系列1T 8051单片机SPI通信应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍STC12C5A60S2系列1T 8051单片机SPI通信介绍STC12C5A60S2系列1T 8051单片…

java中post请求可以像get请求一样拼装参数吗?

可以的,代码实例如下所示: 控制器如下所示: PostMapping(value "/mkdirDirectory") public Object mkdirDirectory(RequestParam("path") String path) {log.info("本地生成文件夹路径:{}", path);Object i…

C++(Qt)软件调试---自动注册AeDebug(17)

C(Qt)软件调试—自动注册AeDebug(17) 文章目录 C(Qt)软件调试---自动注册AeDebug(17)1、什么是AeDebug2、使用调试工具3、WinDbg注册到AeDebug4、ProcDump注册到AeDebug5、Dr.MinGW注册到AeDebug6、Visual Studio 注册到AeDebug 1…

【ARM Coresight OpenOCD 系列 1 -- OpenOCD 介绍】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 1.1 OpenOCD 介绍1.1.1 OpenOCD 支持的JTAG 适配器1.1.2 OpenOCD 支持的调试设备1.1.3 OpenOCD 支持的 Flash 驱动 1.2 OpenOCD 安装与使用1.2.1 OpenOCD 代码获取及安装1.2.2 OpenOCD 使用1.2.3 OpenOCD 启用 GDB…

修改a-rate评分颜色;a-rate评分十分制

使用ant-design-vue的rate评分组件 1。修改颜色 2。十分制&#xff08;默认是5分&#xff0c;改成10分。且提示也是10分制&#xff09; <a-rate v-model"score" :tooltips"rate10" allow-half hoverChange"changeRate" />data() {score: …

和xshell和crt说再见,认识了一款51k star多端跨平台终端神器,强大酷炫

一、Tabby简介 Tabby&#xff08;以前称为Terminus&#xff09;是一款高度可配置的终端仿真器、SSH 和串行客户端。开源且跨平台&#xff0c;支持在Windows、macOS和Linux系统下使用。 源码下载 https://github.com/Bill13579/tabby官网地址 https://tabby.sh/1. 特点 集成…

子查询:内查询,嵌套查询

括号里面的查询语句会先于主查询语句 create table info ( id int, name varchar(10) primary key not null, score decimal(5,2), address varchar(20), hobbid int(5) );select name,score from info where name in (select name from info where score > 80); 子查询返回…

【uniapp】通用列表封装组件

uniapp页面一般都会有像以下的列表页面&#xff0c;封装通用组件&#xff0c;提高开发效率&#xff1b; &#xff08;基于uView前端框架&#xff09; 首先&#xff0c;通过设计图来分析一下页面展示和数据结构定义 w-table组件参数说明 参数说明类型可选值默认值toggle列表是…

栈的应用:括号匹配,递归

目录 1.栈的应用1.括号匹配问题算法实现 2. 递归栈在递归中的应用 3.队列的应用 1.栈的应用 1.括号匹配问题 ①可用栈实现该特性&#xff1a;最后出现的左括号最先被匹配&#xff08;LIFO)。 ②出栈&#xff1a;每出现一个右括号&#xff0c;就“消耗”一个左括号。 ③匹配失败…

如何将 ONLYOFFICE 文档 7.5 与 Odoo 进行集成

在本教程中&#xff0c;我们将了解如何使用集成应用实现 ONLYOFFICE 文档与 Odoo 之间的连接。 ONLYOFFICE 文档是什么 ONLYOFFICE 文档是一款全面的在线办公工具&#xff0c;提供了文本文档、电子表格和演示文稿的查看和编辑功能。它高度兼容微软 Office 格式&#xff0c;包括…

Unity UGUI之Button控件的简单认识

Unity通过菜单或者Hierarchy面板创建Button,将会自动创建一个Image和Button控件&#xff0c;并且Transition属性默认选择Color Tint模式&#xff0c;除此之外还创建了个文本子对象。如下图所示&#xff1a; 而使用Inspector面板中Add Component只会创建Button控件。Transition属…

听说,工作能力强的项目经理都有这几个特征

大家好&#xff0c;我是老原。 很多项目经理每天忙忙碌碌&#xff0c;但是一看结果&#xff0c;团队业绩没有完成、人才没有培养起来、自己的管理水平和个人领导力也没有得到提升。 明明付出了很多时间和精力&#xff0c;结果却只收获了团队的抱怨&#xff0c;以及老板对你管…

UnoCss(原子化css引擎) 让你的开发更轻松愉快

什么是原子化CSS&#xff0c;UnoCSS又是什么&#xff0c;对此有疑问的推荐看下antfu的这篇文章——重新构想原子化 CSS (antfu.me) 相信看完这篇文章的你也会跟我一样热衷于UnoCSS. 介绍 今天介绍一个CSS开发利器 UnoCSS , 是一个具有高性能且极具灵活性的即时原子化 CSS 引擎…

web框架与Django

web应用程序 什么是web Web应用程序是一种可以通过Web访问的应用程序&#xff0c;程序的最大好处是用户很容易访问应用程序&#xff0c;用户只需要有浏览器即可&#xff0c;不需要再安装其他软件 应用程序有两种模式C/S、B/S。C/S是客户端/服务器端程序&#xff0c;也就是说这…

ubuntu 18.04安装自己ko驱动 修改secure boot

因为本人老折腾自己的电脑&#xff0c;所以老重装系统&#xff0c;然后配置又不见了&#xff0c;这次配置赶紧记下来 insmod netlink_test.ko 报错&#xff1a;insmod: ERROR: could not insert module netlink_test.ko: Operation not permitted 添加 sudo insmod netlink_te…

C++跨模块传递CRT引发问题

SDK新增加了一个接口&#xff0c;参数使用std::vector<Class>&&#xff0c;传给dll函数中填充数值&#xff0c;然后应用层拿到这个vector出现了崩溃 越界等问题&#xff0c;调了很久&#xff0c;之前知道这个问题&#xff0c;没有想起来&#xff0c;耽误了许多时间。…