行为驱动开发(BDD)全面介绍

article/2025/10/15 17:51:08

行为驱动开发(BDD)全面介绍

作者:杜铁绳 

盘古运营有限公司

在软件行业中,软件研发项目软件产品交付经常被推迟、研发费用经常超出预算、经常遗漏客户所需的软件功能、有将近20%的项目最终无法交付,或者取消。这些软件研发往往花费了大量的资金、人力和时间,但所交付给用户的产品功能却有很大部分用户不会用到,或者没有能够帮助用户解决问题。

导致软件研发项目失败的原因是多种多样的,但最终结果可以分为两类:

  • 没能正确的研发软件。
  • 没能研发正确的软件。

没能正确的研发软件,主要是交付满足质量要求的软件,软件缺陷多且难以维护。没能研发正确的软件,主要表现在费用超出预算、软件产品延期交付、软件功能遗漏、产品功能错误或交付了客户根本不用的产品功能。

有鉴于此,行为驱动开发(Behavior Driven Development,BDD)借鉴了敏捷和精益实践,让敏捷研发团队尽可能理解产品经理或业务人员的产品需求,并在软件研发过程中及时反馈和演示软件产品的研发状态,让产品经理或业务人员根据获得的产品研发信息及时对软件产品特性进行调整。BDD帮助敏捷研发团队把精力集中在识别、理解和构建跟业务目标有关的产品特性上面,并让敏捷研发团队能够确保识别出的产品特性能够被正确设计和实现出来。

图10-1 BDD增进研发团队与业务人员的交流水平
图1 BDD增进研发团队与业务人员的交流水平

引入BDD的软件研发团队通过充分的交流沟通和待实现的产品功能的使用场景举例,来帮助研发团队理解产品特性对业务的价值。BDD采用更容易测试的软件需求描述方式鼓励需求分析人员、软件开发人员、测试人员密切协同开展软件产品研发工作。同时BDD工具可以帮助把用BDD风格描述的业务需求转换成自动化测试脚本,让软件开发人员同步验证自己编写的代码是否满足业务需求描述的产品特性,并在验证软件产品特性的同时形成软件产品特性文档。从而实现了产品研发文档与软件产品代码编写的同步更新。

BDD并不是一种软件研发方法,也不是用来替代Scrum、XP、看板等现有的敏捷理论和方法,而是把现有的工作方法融合起来,让软件研发团队更加高效的工作,从而减轻因软件产品计划延误或功能缺失带来的压力。

使用BDD的软件研发过程与传统软件研发过程有什么区别呢?

传统软件研发过程是这样的:

  1. 业务人员把想要的软件产品需求讲述给软件需求分析人员。

  2. 软件需求分析人员把从业务人员那里获得的软件需求记录下来,并根据业务需求编写软件产品需求说明书。

  3. 软件开发人员根据软件产品需求说明书编写软件代码和单元测试代码。

  4. 软件测试人员根据软件产品需求说明书进行测试需求分析,编写测试案例(用例),并使用测试案例对软件产品进行测试。

  5. 最后软件开发团队根据稳定的软件版本编写软件产品的功能说明和技术说明文档。

图10-2 传统软件研发过程
图2 传统软件开发过程

传统软件研发模式的问题在于,在业务人员把业务需求描述给软件需求分析人员之后,软件需求分析人员按照自己的理解编写软件需求规格说明书,然后有研发人员根据软件需求规格说明进行软件架构设计和编写软件代码,最后有测试人员根据软件需求规格说明书编写测试案例进行测试。由业务需求到软件编码,再到软件测试的过程中,有不同角色和不同人员在不同时段对软件开发所需的信息进行处理,这种间有太多可能的机会丢失、弄错、甚至直接忽视业务人员的原始需求。软件研发的众多环节中,只需一个环节出错,软件研发团队就很难按时交付出符合业务人员要求的软件产品。

Behavior Driven Development(BDD),行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。行为驱动开发特别适用于敏捷项目。行为驱动开发由一系列软件工程实践组成,这些软件工程实践可以用来帮组研发团队提高交付效率、交付质量和交付价值。

BDD引入了敏捷管理、精益研发等思想,尤其包括测试驱动开发(TDD)和领域驱动设计(DDD)等软件研发方法。行为驱动开发(BDD)利用简单的格式化自然语言(包括英语、中文等语言)来提升敏捷研发团队和产品经理或业务人员之间的沟通水平,使得敏捷研发团队更够更好的理解业务目标,从而更好的满足产品经理或业务人员的产品需求。

BDD的软件研发过程是这样的:

  1. 产品经理(业务人员)通过具体的用户故事使用场景来告诉软件需求分析人员他(她)想要什么样的软件产品。使用软件产品的使用场景来描述软件需求可以尽可能的避免相关人员错误理解软件需求或增加自己的主观想象的需求。

  2. 软件需求分析人员(BA)和研发团队(研发人员、测试人员)一起对产品经理(业务人员)的用户故事进行分析,并梳理出具体的软件产品使用场景举例,这些场景举例使用结构化的关键字自然语言进行描述,例如中文、英文等。

  3. 研发团队使用BDD工具把用户故事场景文件转化为可执行的自动化测试代码,研发人员运行自动化测试用例来验证开发出来的软件产品是否符合用户故事场景的验收要求。

  4. 测试人员可以根据自动化测试结果开展手工测试和探索性测试。

  5. 产品经理(业务人员)可以实时查看软件研发团队的自动化测试结果和BDD工具生成的测试报告,确保软件实现符合产品经理(业务人员)的软件期望。

图10-3 BDD软件研发过程
图3 BDD软件研发过程

如何实施行为驱动开发(BDD)呢?其实本课程之前章节的主线就是BDD的过程。我们把小明童鞋的机票销售系统的研发过程进行梳理,就是BDD的实践过程。

总结小明童鞋使用BDD研发机票销售系统的过程如下:
第一步:老板提出战略目标。(产品愿景)

童鞋们,市场竞争越来越激烈,飞机票代订业务也越来越难做。董事会要求我们今年的营业额要比去年增加20%,成本要降低10%.今天召集大家开会的目的就是请市场部、销售部和研发的童鞋一起献计献策,群策群力完成今年的业务目标。

第二步: 业务部门提出具体业务目标和软件需求。

  • 增加常旅客积分积累和使用功能,通过我们公司电子商务网站或相关渠道购买机票的旅客可以积累里程积分。这些积分可以在下次购买机票时使用积分购买机票,也可以设置积分共享,让他(她)的亲友使用自己的积分购买机票。
  • 增加电子商务网站访问渠道,例如可以通过微信或支付宝平台查询机票,购买机票,查看和共享里程积分
  • 为了增加客户的黏着度,新增用户登录积分和信息共享积分,用户登录使用我们电子商务网站越多,积分也越多。用户在我们电子商务网站发表旅行心得或为他人提供帮组信息也可以获取积分。使用积分可以这换成里程积分兑换机票。

第三步:产品经理(需求分析人员)与研发团队一起梳理用户故事,并实例化用户故事验收条件。

用户故事场景:新会员注册后初始状态为铜牌会员

# language: zh-CN

场景: 新会员注册后初始状态为铜牌会员

假如: 小明童鞋还不是一位常旅客会员

: 小明童鞋注册常旅客会员,注册时输入信息:
|用户名|密码|Email|
|:-:|:-:|:-|:-:|
|xiaoming|12345678|xiaoming@qatools.cn|

那么: 注册成功后,小明童鞋的初始会员级别为'铜牌会员'

第四步: 研发人员(测试人员)使用BDD工具,例如Cucumber,转化为可以运行的验收测试说明文档,也是自动化验收测试案例

 @假如("^小明童鞋还不是一位常旅客会员$")public void 小明童鞋还不是一位常旅客会员() throws Throwable {//TODO: 注册前小明童鞋还不是常旅客会员throw new PendingException();}@当("^小明童鞋注册常旅客会员:$")public void 小明童鞋注册常旅客会员(DataTable arg1) throws Throwable {///TODO:小明童鞋注册为会员throw new PendingException();}@那么("^注册成功后,小明童鞋的初始会员级别为'铜牌会员'$")public void 注册成功后_小明童鞋的初始会员级别为_铜牌会员() throws Throwable {//TODO: 注册成功后检查小明童鞋的会员状态throw new PendingException();}

第五步:研发人员根据用户故事设计软件功能,编写单元测试和实现代码,当软件功能通过单元测试时,表示软件功能满足了设计需求。

public class WhenCheckingMinimumStatusPoints {FrequentFlyer member;@Beforepublic void newFrequentFlyer() {member = FrequentFlyer.newMemberWithUsername("xiaoming").password("12345678").email("xiaoming@toolsqa.cn");}@Testpublic void should_have_bronze_status_initially() {assertThat(member.getStatus()).isEqualTo(FrequentFlyerStatus.BRONZE);}enter code here}

第六步:研发人员运行第四步中生成的验收测试代码,验收测试可以是UI层端到端测试也可以是接口测试。

 public class UserRegisterPage extends PageObject {@FindBy(name="username")private WebElement username;@FindBy(name="password")private WebElement password;@FindBy(name="email")private WebElement email;@FindBy(css = ".btn[value='Sign up']")private WebElement signup;public void signupAs(String username, String userPassword, String userEmail ) {username.sendKeys(username);password.sendKeys(userPassword);email.sendKeys(userEmail);//点击注册按钮signup.click();}}

第七步:产品经理可以实时看看验收测试报告,验收测试报告同时也是产品说明文档

图10-4 BDD测试生成文档
图4 BDD测试生成文档

最后说明一下,BDD自动化测试代码可以使用持续集成平台或DevOps平台根据指定的持续集成规则运行,这样可以提高团队协作效率,及时公布单元测试、集成测试和用户验收测试的测试状态。

更多信息请关注:

GitBook:十招玩转敏捷测试

 

BDD社区微信公众号:

BDD微信公众号




 


http://chatgpt.dhexx.cn/article/inTPf3WK.shtml

相关文章

web自动化测试进阶篇02 ——— BDD与TDD的研究实践

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…

全面理解BDD(行为驱动开发):转变思维方式,提升软件质量

在传统的软件开发流程中,开发人员和测试人员的工作通常是相互独立的。开发人员负责编写代码,测试人员负责找出代码中的问题。然而,这种方法可能导致沟通不足,而且会浪费时间和资源。为了解决这些问题,出现了一种新的开…

BDD - 介绍 Behavior-Driven Development 行为驱动开发

BDD - Behavior-Driven Development 行为驱动开发 引言什么是 BDD相关软件开发流程TDDATDDBDD 和 TDD 的关系 BDD 原则BDD 流程BDD 优势 引言 自从接触到 BDD,深有感触,BDD 是广大 QA 的福音,测试领域的天空豁然开朗。BDD 模式更有助于团队合…

BDD自动化测试

BDD(行为驱动开发)自动化测试在软件测试领域一直在发展。随着agile思想在越来越多的项目中推广,以及非开发人员在项目的更多参与,BDD风格的自动化测试被越来越多项目组采纳并实施。 BDD(Behavior Driven Development&…

端到端视频编码:DVC

本文来自CVPR 2019论文《DVC: An End-to-end Deep Video Compression Framework》 官方开源代码地址:https://github.com/GuoLusjtu/DVC DVC是一个端到端的视频编码模型,之前也有过一些基于DNN的视频编码方法,但是通常是使用DNN模型替换视频…

主流视频编码压缩技术基本概念(二) 算法分析

主流视频编码压缩技术基本概念(二) 算法分析 一、MPEG-1技术介绍1、 MPEG-1的层次及语法结构①、运动补偿序列(Sequence)②、图片组(GOP)③、 图片(Picture)④、 图片切片(Slice)⑤、…

视频编码解码基本知识

最近在做摄像头视频的数据处理,得到了网络相机的.h264格式的数据,需要做解码处理,由于对视频的编码解码原理不太了解,因此查找资料总结一下 为什么要进行视频编码? 视频编码又称为视频压缩,伴随着用户对高…

FFMpeg 实现视频编码、解码

FFMpeg 作为音视频领域的开源工具,它几乎可以实现所有针对音视频的处理,本文主要利用 FFMpeg 官方提供的 SDK 实现音视频最简单的几个实例:编码、解码、封装、解封装、转码、缩放以及添加水印。 接下来会由发现问题->分析问题->解决问题->实现方案,循序渐进的完成。…

感知视频编码

感知视频编码就是在视频编码的过程中,将HVS应用进去,挖掘主观视频感知冗余,进一步提高视频编码压缩效率。 1.Computational visual perception:三种视觉感知计算模型 (1)视觉敏感模型 (2)视觉注…

Android视频编码的坑

视频开发是一个核心方向,那Camera开发一直是Android的一个核心,笔者做过Camera HAL,也做过Camera App, 同时也开发过Camera 滤镜,这个过程中也遇到和解决过很多棘手的问题,也一直想总结一篇,看到这篇后感觉…

视频编码未来简史

首先我们回顾一下视频编码的历史,视频编码起源于广播电视,在很长一段时间里视频编解码的变革主要推动力是来自于广播电视。当然,今天我们看互联网的视频编码是速度越来越快,昨天在ICET2017年世界大会上,ICET的主席还说…

PCS2021:针对游戏内容的视频编码工具分析和数据集

本文来自PCS2021论文《Video Coding Tool Analysis and Dataset for Gaming Content》 随着近几年游戏市场的逐渐壮大,新的游戏形态(AR、VR、云游戏等)逐渐发展。和传统的摄像机内容和屏幕内容相比,游戏内容有着不同的特点导致对于…

视频编码综述

你用手机、电脑看电影追剧时,是看的高清还是标清?我想只要网速够得上应该没有人愿意再看标清了吧!毕竟高清视频的高分辨率和清晰画质总是能让人有更好的观影体验。 伴随着用户对高清视频的需求量的增加,视频多媒体的视频数据量也在…

混合视频编码方法

参考文献: IP网络视频传输:技术、标准和应用 朱秀昌,唐贵进。--北京:人民邮电出版社,2017.9 预测编码和变换编码是混合编码的基础,当然除此之外还有运动估计、运动补偿、量化、熵编码、去方块滤波等。下面…

【视频编解码-02】视频编码的目的、条件和目标

视频编码,是视频处理中的一个核心技术。 现代我们所看到的所有视频,包括电视、互联网、手机等等,几乎所有的视频都会被编码、解码。 整个视频技术的基本流程是:视频数据的采集、视频数据的编码、视频数据的传输、视频数据的解码、…

【视频】视频文件格式和视频编码

我们经常在电脑、电视、手机或者其他终端产品看视频,我们对视频有个大概了解,比如清晰度、大小、视频类型等,但是对于视频内部结构我们应该一无所知,现在我们来一步一步解开视频的神秘面纱。 首先大家要清楚两个概念,视…

H.265视频编码原理总结

H.265视频编码原理总结 转载地址 1 概述 H.265(HEVC High Efficiency Video Coding)是现行H.264标准于2003年实现标准化以来时隔10年推出的新标准,将成为支撑未来十年的影像服务和产品的视频压缩技术。其特点是,支持1080p以上的…

视频编码流程详解

1、视频编码整体流程 2、FFmpeg视频编码详细流程 从本地读取YUV数据编码为H264格式的数据,然后再存入到本地,编码后的数据有带startcode。 与FFmpeg示例音频编码的流程基本一致。 3、关键函数说明 (1)avcodec_find_encoder_by_n…

视频编码知识

记录一下学习视频编码的过程和自己的理解 视频 数字图像在计算机中的表示:二维矩阵,或三维矩阵(彩色)。 矩阵中的每个点为像素,数值的大小反应色彩的强度,颜色深度需要使用一定数据空间存储,每…

视频的专业基础知识(一)常用的编码格式和参数

1. 常用的编码格式 编码格式:一个视频文件本身,通常由音频和视频两部分组成。例如视频文件,就是由avc视频编码AAC音频编码组成的,常见的视频编码格式有Xvid,AVC/H.264,MPEG1,MPEG2 等&#xff…