AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

介绍行为驱动开发

  • 2015-02-16
  • 本文字数:950 字

    阅读完需:约 3 分钟

当定义了新项目的期望结果后,行为驱动开发 (BDD)有助于克服开发人员对构建产品需求的理解与业务人员对需求引起的技术困难理解之间的差距。其原因是两组之间的沟通得到了改善,Alistair Stead 和 Konstantin Kudryashov 两人都在Inviqa 工作,在他们的 BDD 入门指南中针对业务和技术人员做了解释。

Stead 和 Kudryashov 把 BDD 分成了两个主要的实践:用通用语言写用例来描述行为,以及用这些用例作为自动化测试的基础。结合这两个实践就可以为用户验证其功能性,以及在整个项目周期中系统的行为与所定义的一致。

Stead 和 Kudryashov 指出的 BDD 的关键元素包括:

  • 创建目标,最好在项目开始的时候从业务的角度定义具体的,以及可衡量的目标。
  • 影响地图( Impact Mapping),是找到一种可以达到设定目标的、对业务最重要的那些功能的方法。影响地图可视化了为什么这些功能是需要的,以及为达到目标需要改变的那些行为。
  • 复杂度分析,找到一种最适合开发与合作方法的方式,例如 Cynefin
  • 用用例做计划,通过用例来描述业务规则,以及提供上下文来避免误解。这些用例接下来还应该转化成开发阶段所使用的测试用例。
  • 通用语言( Ubiquitous language,这是来自于领域驱动设计(Domain-Driven Design(DDD)) 方法的术语,指的是开发人员和业务人员为某个领域中的术语达到共同的理解,而使用的一种共享语言。
  • 通过用例开发。通过一种形式语言和类似于 Cucumber 的自动化工具实现,用例可以转化成可执行的规范,从而验证实现的功能。
  • BDD**** 循环。能够提供对系统大变更的支持。使用可执行的规范,并将单元测试作为系统的各个部分应该如何表现的对象规范,就能够获得可以处理任意大小规模变更的能力。

在一次对 Dan North (他在 2006 年左右开发了 BDD)的采访中,他强调 BDD 不是关于测试的,它是在应用程序存在之前,写出用例与期望,从而描述应用程序的行为,并且促使在项目中的人们彼此互相沟通。North 说明了保持人们互相亲近的重要性,分离式结构或跨地域团队是成功实施 BDD 一大障碍。

查看英文原文: Introducing Behaviour-Driven Development


感谢邵思华对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2015-02-16 09:534268
用户头像

发布了 55 篇内容, 共 14.4 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

挑战Python的语法练习

芯动大师

项目实战 9月月更 模块创建

天天都在谈的防火墙到底是个啥,有哪些分类?如何选择防火墙?

wljslmz

网络安全 防火墙 9月月更

Linux下通过tar包方式安装MySQL,详细教程

阿柠xn

运维 MySQL 运维 Linux tar 9月月更

微信业务架构图&“学生管理系统”毕设架构设计

Louis

史上最全的Java容器集合之equals 和 hashCode

自然

集合 Java core 9月月更

极客时间-架构师训练营作业-模块一

沐の爹

模块一作业

愚人夜行者

跟着卷卷龙一起学Camera--TNR

卷卷龙

ISP 9月月更

Groovy closure 与Java function转换

FunTester

架构实战营模块一作业

π

架构实战营

Python语法之异常处理

芯动大师

异常处理 9月月更 Python异常处理方法

【最右】面向TS生态的新型Flutter框架

刘剑

typescript 小程序 移动端 动态化 flutter for web

架构实战训练营模块 1 作业

Geek_b35d92

架构训练

【web 开发基础】php 开发基础快速入门 (2)-PHP的程序开发

迷彩

php开源 9月月更 PHP语法 PHP面向对象

开发者有话说|要不是家里穷,我也不想当码农

三掌柜

个人成长 个人感悟

vivo鲁京辉:数据安全与隐私保护是消费者的基本权利,是企业的“铁律”

极客天地

作业一

Geek_408c99

Java | abstract关键字【面向对象的第三大特征——多态】

Fire_Shield

Java 9月月更 abstract

史上最全的Java容器集合之HashMap(源码解读)

自然

集合 Java core 9月月更

详解数据计算能力的四种类型

穿过生命散发芬芳

9月月更 数据计算

Python语法之模块和包(2)

芯动大师

9月月更 模块创建 包的应用

2022-09-28:以下go语言代码输出什么?A:1 1;B:1 2;C:2 2;D:不确定。 package main import ( “fmt“ ) func main() { var

福大大架构师每日一题

golang 福大大 选择题

网络中一些很常见的协议,以及他们对应的报文格式介绍

阿柠xn

TCP 网络协议 9月月更 ARP

作业一

小虎

架构实战营

【编程实践】详解 MySQL 在 Python 中的使用(2)-pymysql的使用

迷彩

MySQL 数据库 增删改查 pymysql 9月月更 数据库操作

数据开发也能双轮驱动?

乌龟哥哥

9月月更

程序员未来职业规划路线,请收藏

收到请回复

Java 程序员 架构 职业规划 语言 & 开发

后疫情时代,RTE“沉浸式”体验还能这么玩?丨RTE 2022 编程挑战赛赛后专访

声网

人工智能

架构实战训练营模块 1 作业

atcgnu

什么是地址转换协议ARP?工作流程是什么样的?

wljslmz

9月月更 ARP

人工智能知识介绍

阿柠xn

人工智能 AI 科普 9月月更

介绍行为驱动开发_语言 & 开发_Jan Stenberg_InfoQ精选文章