写点什么

BDD 工具 Cucumber 并不是一种测试工具

  • 2015 年 4 月 02 日
  • 本文字数:1101 字

    阅读完需:约 4 分钟

如果你使用 Cucumber 的目的就是为了进行自动化测试,那么其实你还可以做得更好。你可以在 Cucumber 中编写用户场景,让它表现出业务规则而不仅仅是 UI 功能。这样你就能够让业务分析师加入这个过程,在编码工作开始前编写场景。程序员们就能够按照这个清晰的规范进行编码工作了。这种方式就是行为驱动开发(BDD)。 Aslak Hellesøy 表示,他总是看到使用者对Cucumber 的错误用法和错误理解。

Hellesøy 在 2008 年时创建了 Cucumber,在头三年之内下载量就达到了 5 百万。他始终强调,Cucumber 首先是一种协作工具,它旨在让团队中的所有成员之间达成共识。Cucumber 的特性编写应当早于具体用代码实现这些特性。当你使用 BDD 方式编写实例的时候,回归测试会自然地成为一种副带的结果,但测试本身并不是这个活动的目的。

随着 Cucumber for JavaScript 项目的出现, Julien Biezemans 看到了 BDD 在 web 开发中带来的好处,但他也同时表示,Hellesøy 所提到的那种误解,即将 Cucumber 作为一种纯粹的测试工具的想法在这个项目的应用中也是屡见不鲜。此外,对于 Biezemans 来说,BDD 也是一种鼓励所有参与者进行交流的方式,他们通过编写实例的方式让工作目标变得更清晰,并减少歧义,让每个人对于他们所创建的产品达成共识。将这些交流对话所产生的场景进行自动化,只是一种可选的步骤。

Hellesøy去年曾经表示:为了充分利用Cucumber,你必须遵循某种流程,并且让软件团队中的大多数人加入其中。这个流程就是BDD,而 Gojko Adzic 之后将这一方式重新命名为实例化需求(Specification by Example)。将这个流程稍微简化一下的话,那么它主要包括这两项活动:

  • 需求工作间,此时业务分析师要对需求负责,同时与程序员与测试人员一起讨论要开发的特性(这三种角色也通常称为三个好朋友),与此同时,他们共同编写软件应该如何表现的实例,把它作为 Cucumber 中的场景。
  • 由外而内的开发,程序员会增量式地进行代码编写,并且使用 Cucumber 运行场景,直到特性通过测试为止。程序员通常会从最接近用户的功能开始,然后逐步接近核心领域,这也是这一活动命名的由来。

Liz Keogh 则提示,定义BDD 是一件困难的事,因为这种方法学是从其它许多方法和哲学中派生出来的,因此她发现很难划分一个明确的边界,以确定哪些方法和哲学不属于它。Keogh 转而认为,BDD 其实是一种术语,它的核心是对话、协作与场景,以及通过自动化的方式实现它们。在这个核心之外是一系列其它实践,包括Hellesøy 所提到的内容以及各种工具,包括Cucumber、 JBehave SpecFlow 。Keogh 用以下这段话表示了她对 BDD 的定义:

在对话中使用实例,以表现某种行为

查看英文原文 BDD Tool Cucumber is Not a Testing Tool

2015 年 4 月 02 日 08:465127
用户头像

发布了 428 篇内容, 共 155.9 次阅读, 收获喜欢 27 次。

关注

评论

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

Prometheus Exporter (二)Windows Exporter

耳东@Erdong

Prometheus exporter 11月日更 Windows Exporter

Android C++系列:Linux文件系统(一)

轻口味

c++ android jni 11月日更

Vue进阶(贰佰):前端UI框架介绍

No Silver Bullet

Vue UI 11月日更

北京智博会主题展|2022第十五届北京国际物联网展览会

InfoQ_caf7dbb9aa8a

Electron常见问题 48 - Electron 获取本机 MAC 地址

liuzhen007

11月日更

[ Kitex 源码解析] 函数式编程

baiyutang

golang 微服务 Go 语言 11月日更

在线等比数列项数生成器

入门小站

工具

【LeetCode】整数替换Java题解

HQ数字卡

算法 LeetCode 11月日更

【Flutter 专题】04 图解第一个程序遇到的安装依赖问题

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

【高并发】ScheduledThreadPoolExecutor与Timer的区别和简单示例

冰河

Java 并发编程 多线程 高并发 异步编程

架构实战 - 模块四

唐敏

「架构实战营」

前端开发:Node版本引起的报错问题

三掌柜

11月日更

.NET Core 中对象池(Object Pool)的使用

喵叔

11月日更

☕【Java技术指南】「技术盲区」看看线程池是如何回收和维持运作线程的核心技术体系

浩宇天尚

Java 线程池 11月日更

复习

IT蜗壳-Tango

11月日更

flutter 开发中 vscode 插件推荐 3

坚果前端

flutter 11月日更

研发效能提升的八项实践建议

博文视点Broadview

Python中的控制流:break和continue

Peter

Python 控制流

一份数据的6种Plotly画法

Peter

数据分析 可视化

只需10分钟,让你的企业应用具备OCR能力

明道云

北京主题展|2022第十五届北京国际物联网展览会

InfoQ_caf7dbb9aa8a

论文解读丨文本行识别模型的再思考

华为云开发者社区

数据集 文档 文本 文本识别 语言模型

年底了,该不该主动向老板提加薪?

Geek_1e5497

dart系列之:创建Library package

程序那些事

flutter dart 程序那些事 11月日更

部署Apollo

小黄鸡1992

11月日更

前缀和后缀运算符有什么区别?

devpoint

JavaScript 11月日更 前缀运算符 后缀

测试左移实践介绍

刘冉

TDD 自动化测试 测试驱动开发 测试左移 ATTD

Java将增加虚拟线程,挑战Go协程

编程宝库

Java golang 并发

Hi,Contributor,有一份专属周边礼包等你领取!

SphereEx

开源社区 ShardingSphere SphereEx Contributor 周边

完善Django的MVT框架开发,记得添加路由哦~

老表

Python django web开发 11月日更 博客系统

[Pulsar] Delayed message原理

Zike Yang

Apache Pulsar 11月日更

Flutter 自动化测试

Flutter 自动化测试

BDD工具Cucumber并不是一种测试工具-InfoQ