行为驱动开发(Behavior Driven Development)即BDD,是一种敏捷开发方法,通常应用在自动化测试中,或者也可称为行为驱动测试。通过使用自然描述语言确定自动化脚本,通过这种方式,能够大大促进团队之间的沟通。实现BDD的工具有Cucumber、JBehave、RBehave,以及桌面客户端CukeTest。 下面以自动化测试开发模式的发展过程来说明下行为驱动测试历史发展与现状。

自动化测试方法的现状

随着 Agile 开发模式在越来越多的项目组中推广,持续集成 (CI) 作为 Agile 的重要组成部分,也被越来越多的项目组采纳并实施,在这个部署实施过程中,自动化测试在软件测试中占有越来越重要的地位,如何让我们的自动化测试能更快,更有效的运作,一直是我们探索的目标。在实际的项目中,我们可能随时面对各种不同的需要,而这些也决定了我们采用什么样的开发模式。

下面为常用几种开发模式

TDD

测试驱动开发(Test Driven Development)。它的想法来自于极限编程(Extreme Programming)。TDD 是 Agile 开发中的一项核心实践和技术,也是一种设计方法。引用 Wikipedia 上的关于 TDD 的介绍:

测试驱动开发(英语:Test-driven development,缩写为TDD)是一种软件开发过程中的应用方法,由极限编程中倡导,以其倡导先写测试程序,然后编码实现其功能得名。测试驱动开发始于20世纪90年代。测试驱动开发的目的是取得快速反馈并使用“illustrate the main line”方法来构建程序。

TDD 的基本思想是通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计和质量控制量化的过程。TDD 简单的说就是:每写一段代码之前,先写一个单元测试;根据单元测试的功能,开始编码;待到代码可以使之前的测试通过后,编码完成;在保持测试通过情况下,重构代码。

引自维基百科的解释

测试驱动开发是戴两顶帽子思考的开发方式:先戴上实现功能的帽子,在测试的辅助下,快速实现其功能;再戴上重构的帽子,在测试的保护下,通过去除冗余的代码,提高代码质量。测试驱动着整个开发过程:首先,驱动代码的设计和功能的实现;其后,驱动代码的再设计和重构。

对于测试驱动开发,有优点也有缺点:

优点
  1. 可以有效的避免过度设计带来的浪费。但是也有人强调在开发前需要有完整的设计再实施可以有效的避免重构带来的浪费。
  2. 可以让开发者在开发中拥有更全面的视角。
缺点
  1. 开发者可能只完成满足了测试的代码,而忽略了对实际需求的实现。有实践者认为用结对编程的方式可以有效的避免这个问题。
  2. 会放慢开发实际代码的速度,特别对于要求开发速度的原型开发造成不利。这里需要考虑开发速度需要包含功能和品质两个方面,单纯的代码速度可能不能完全代表开发速度。
  3. 对于GUI,资料库和Web应用而言。构造单元测试比较困难,如果强行构造单元测试,反而给维护带来额外的工作量。有开发者认为这个是由于设计方法,而不是开发方法造成的困难。
  4. 使得开发更为关注用例和测试案例,而不是设计本身。目前,对于这个观点有较多的争议。
  5. 测试驱动开发会导致单元测试的覆盖度不够,比如可能缺乏边界测试。在实际的操作中,和非测试驱动开发一样,当代码完成以后还是需要补充单元测试,提高测试的覆盖度。

ATDD

验收性测试驱动开发(Acceptance Test Driven Development)。这种开发模式是整个团队在开发工作之前,一起讨论、制定每个任务的验收标准,并提取测试用例。ATDD 是从 TDD 发展过来的,ATDD 就是为了解决 TDD 的一些缺点而出现。

因为 TDD 只涉及到开发人员,测试人员及业务经理。如果开发人员可能只完成了满足测试的代码却忽略实际需求的实现,那么将会造成测试人员写的测试用例是不够的也有可能是错误的。所以在 ATDD 中首先要求团队定义出期望的质量标准和验收细则,以明确而且达成共识的验收计划(报告测试用例)来驱动开发人员 TDD 实践和测试人员的测试脚本。

在明确而且达成共识的验收计划中,通常情况下,我们以如下的文档格式来定义我们的文档。

Given (setup)
A specified state of a systemWhen (trigger)
An action or event occursThen (verification)
The state of the system has changed or an output has been produced

ATDD的这种文档格式借鉴BDD的概念,并把它应用到验收测试中。下面我们给大家介绍一下应用广泛的BDD和相关的工具。

BDD

行为驱动开发(Behavior Driven Development)。它也是 Agile 开发的技术,引用 Wikipedia 上的关于 BDD 的介绍:

行为驱动开发(英语:Behavior-driven development,缩写BDD)是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。

这种开发模式鼓励软件项目中的开发人员,测试人员和非技术人员或者客户之间的协作,从用户的需求出发,强调系统行为。在 TDD 中,我们并不能完全保证根据设计所编写的测试就是用户所期望的功能,用户并一定能看懂测试用例。BDD 将这一部分用更接近自然语言的形式来描述,让测试用例更自然化和简单,使开发人员,测试人员和客户能在这个基础上达成一致。

TDD 与 BDD 的自动化测试比较

图 1 显示了在 TDD 技术下测试人员的测试过程,TDD 的测试用于单元测试,一般开发人员用什么语言,单元测试就用什么语言。在此其中,测试人员参与的机会不多,通常有了测试任务后,测试人员会将它分成测试计划,然后再细分成测试点列表,每一份测试列表可能又对应着一份自动化测试用例,所以这个阶段就需要保持三份文档: 需求文档 + 测试点文档(计划和测试点)+ 自动化测试用例,整个 TDD 的过程中,自动化测试用例的编写是在测试点列表出来之后。

图 1. TDD 技术下的测试过程

与 TDD 侧重于针对单元测试不同,BDD 以用户的目标以及他们为了实现这些目标而采取的步骤为侧重点,BDD 将三种文档进行了整合,用户行为描述了用户与系统交互的场景,而系统行为描述了系统提供的功能场景,模块行为描述模块间交互的场景,整个过程中只需要一份文档,用户行为也是用户需求,也是测试点文档和自动化测试用例,随着系统行为或模块的行为的实现,一系列的测试活动都已经自动化了。

图 2. BDD 技术下的测试过程

BDD的发展

BDD最初是由Dan North在2003年命名,2009年,在伦敦发表的“敏捷规格,BDD和极限测试交流”中,Dan North对BDD给出了如下定义:

BDD是第二代的、由外及内的、基于拉(pull)的、多方利益相关者的(stakeholder)、多种可扩展的、高自动化的敏捷方法。它描述了一个交互循环,可以具有带有良好定义的输出(即工作中交付的结果):已测试过的软件。

Dan North创造了首个BDD框架:JBehave;之后是Ruby语言的基于故事的RBehave,后来被纳入了RSpec项目。他还与大卫赫利姆斯基、Aslak Hellesøy及其他人开发了RSpec,并一起编写了《The RSpec Book: Behaviour Driven Development with RSpec, Cucumber, and Friends》。RSpec中第一个基于故事的框架,后来被主要由Aslak Hellesøy开发的Cucumber取代。

BDD的现状

Cucumber的出现,促进了以BDD开发模式的自动化测试实践,大量公司使用BDD的方式做为产品自动化测试技术的实现。Cucumber团队同时也想开发一款Cucumber Pro的产品,但是,不幸的是,当Cucumber团队开发了2年之后却宣布原有开发要丢弃重来,截稿为止,在Cucumber官网上Pro版本依旧未能与大家见面。不过,现在已经有支持专门开发Cucumber脚本的桌面端工具CukeTest,它提供了node.js开发环境,并提供可视化界面进行测试用例的编写,用户不用专门记忆Cucumber的语法,还支持自动生成代码和从代码定位到场景步骤的功能。此外还有一些其它功能如可视化报表、视频录制、代码智能提示等。CukeTest还可以便捷的进行测试用例管理。大家可以去CukeTest官网免费下载使用。

BDD近两年在欧美企业得到越来越高的重视,这跟它的一系列优越性是分不开的,其它原因还包括持续集成的广泛实施和有越来越完善的BDD工具支持等,相信不久在中国的企业当中也会被更广泛的采用。

行为驱动测试历史发展与现状相关推荐

  1. 视频编码起源历史发展及现状

    原创 2017-09-27 马思伟 声网Agora 本文根据RTC2017实时互联网大会,下一代云端音视频技术专场,马思伟老师的演讲,整理得来. http://mp.weixin.qq.com/s/n ...

  2. 软件测试-测试历史/职业发展

    软件测试1 1.测试基础 1.1 软件 1.2 软件测试发展历史 1.3 为什么要做软件测试 1.4 测试职业发展 1.测试基础 1.1 软件 软件的定义: 程序+文档+数据=软件 软件是计算机系统中 ...

  3. 2021年中国工业互联网行业发展现状分析,“5G+工业互联网”驱动行业快速发展

    一.概述 工业互联网是新一代信息通信技术与工业经济深度融合的新型基础设施.应用模式和工业生态,通过对人.机.物.系统等的全面连接,构建起覆盖全产业链.全价值链的全新制造和服务体系,为工业乃至产业数字化 ...

  4. 微服务技术发展的现状与展望

    微服务技术发展的现状与展望 人工智能技术与咨询 来源:计算机研究与发展,作者冯志勇等 摘 要 随着云计算.物联网等技术迅速发展,用户对软件系统的需求趋于多样化,面向服务的体系架构(service or ...

  5. 正确入门Service Mesh:起源、发展和现状

    简介:Service Mesh早已不是一个新兴的概念,但大家对Service Mesh的探索依然火热.本文将依次讲解Service Mesh的定义(什么是Service Mesh).起因(为什么需要S ...

  6. 美国证券业托管和清算机构的发展与现状

    美国证券业托管和清算机构的发展与现状 来源:本站原创 作者:文/中国人民银行济南分行 李剑 点击次数:次 时间:2008-9-10   美国证券存托与清算公司(DTCC)是全世界最大.最先进的证券存托 ...

  7. Linux系统的历史发展演绎

    回顾:Linux系统的历史发展演绎 作者:mary 来源:settingyin 发布时间:2006.09.06 本章讲述linux发展历程及基本概况.即使你对linux一无所知,学完本章,也会发现此时 ...

  8. GREE通过改由Rimini Street为其SAP应用提供支持服务来加快推进以业务为驱动力的IT发展路线图

    日本领先的移动互联网和媒体服务提供商利用节省的支持维护成本来引入云及下一代安全系统,同时获得一流支持 拉斯维加斯--(美国商业资讯)--Rimini Street, Inc. (Nasdaq: RMN ...

  9. 规划测试人员的测试职业发展路径

    在测试培训过程中,经常会有学员问测试是否有前途?测试的前途在哪里? 今天和大家谈谈测试职业规划的话题,分享我对测试职业发展的一些经验和想法,首先和大家分享一个生活中的故事: ------------- ...

最新文章

  1. 软件工程结构化建模的方法和工具_软件工程导论知识点梳理之概念题
  2. 12月14日习题答案大剖析!html5基础测试来啦
  3. Everest 0.6不能保存3D桌面特效的解决方案
  4. Dreamweaver8 V8.0.0.2766
  5. DWF是个什么格式,要怎么进行相应的格式转换?
  6. 基于遗传算法车辆路径问题(VRP)
  7. 问卷星如何设置调查人利用账号登录_端起你的小板凳,快来听我讲制作调查问卷啦!...
  8. RSA加密中PEM、DER的编解码问题
  9. maven-surefire-plugin常用配置
  10. Micropython加速物联网开发8 - 2G网络TCP通信
  11. windows powershell/cmd更改字体
  12. A Game of Thrones(50)
  13. Unity3D开发游戏有没有流行的框架
  14. ptp精准时间协议_网络时钟同步协议– NTP, PTP – 默默的点滴
  15. C++ swap用法
  16. 前端兼容性问题解决方案
  17. ionic2 city-picker 报_dur错误
  18. Excel中的小技巧amp;大智慧
  19. 安卓设置keychain_使用Android KeyChain安全存储对称密钥
  20. Office这么多版本傻傻分不清,到底哪个版本好用?

热门文章

  1. 4k影视文件存储服务器方案,存储系统4K网络存阵列服务器储
  2. VBA 同文件夹多工作薄多工作表按指定顺序汇总
  3. 一个女中医写的女人保养秘笈
  4. 语义鸿沟_数字鸿沟是真实的,是痛苦的
  5. 基于GMap.Net的天地图使用
  6. shell脚本练习-课后练习
  7. latex mdpi模板 \begin{spacing}{1.5}行间距 太小 变大\begin{algorithm
  8. 安卓前端与java后端交互_安卓1_基础前后端交互
  9. (PC+WAP)梦模板节日礼品花卉鲜花类网站
  10. 中国纤维增强塑料(FRP)行业市场供需与战略研究报告