QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

阅读者:"Cucumber 行为驱动开发指南" 能带给我们什么

  • 2013-10-04
  • 本文字数:2399 字

    阅读完需:约 8 分钟

介绍

或许你已经了解到了软件开发中一个头疼的事,就是如何产生正确的需求和围绕这些需求如何有效地进行软件开发?但又不知如何着手?

或许你已经了解到了一些相关的理论知识来解决这个难题,如:行为驱动开发 (BDD),验收测试驱动开发(ATDD),实例化需求(Specification By Example), 但却发现很难消化所有的信息?

或许你已经建立了一套相关的自动化测试,但总觉得在为测试而测试,没有解决实际问题,有点脱钩?

或许你已经开始着手建立自动化测试来做保障,但对那么多的工具无从选择?

也或许你只想在炎炎夏日看一本解渴的书?

所有这些,都推荐最近翻译出版的黄瓜书 【Cucumber 行为驱动开发指南】,原书是 Pragmatic 出版社的 The Cucumber book:The Bevaiour-Driven Development for Testers and Developers ,本书在美国亚马逊网站上获得全五星,强烈建议您也去看看本书,以及那些精彩的书评!

Cucumber 行为驱动开发指南

这本书是讲述如何用 Cucumber 工具来建立一个自动化测试系统,以此来推进业务开发过程,确保软件开发的质量。

Cucumber 是一个工具的名字,它帮您将需求用自然语言描述清楚,这样以便于沟通和协调。这些需求是一些可读性很强的测试用例,Cucumber 能够帮助您自动化运行这些测试用例,来验证您的软件对需求的实现程度,使您能够全程监控好需求实施的进展。

本书的目的不是介绍工具,而是让您了解如何有效的用工具来驾驭需求,如何运用 Cucumber 解决实际问题,而不是纸上谈兵。作者不愧是浸染 Cucumber 的高手,知道什么地方该多,什么地方点到即可,书中写了好多例子,但又让您感觉不到是代码的堆砌,所以是一本极好的实践集。

本书分三部分来循序渐进地讲解各个要点:

第一部分是 Cucumber 的基本知识, 讲述使用 Cucumber 背后的理念,通过一个简单的例子让您很自然地了解 Cucumber 的语法,以及如何在实际情况中使用。

第二部分是用一个真实的例子来进一步讲解技术细节,和如何在开发中有效地使用,涉及到了异步处理和数据库处理。

第三部分是讲如何应用 Cucumber 来处理不同的系统,如:Web 界面和命令行等等,并提供了一组配方来解决您的特定问题。

解决实际问题的书

作为一个软件开发者,我经常关注和学习最新的软件开发的方法和相应的工具,很早就对 ATDD(Acceptance Test Driven Development 验收测试驱动开发)感兴趣,2011 年也参加了 Gojko Adzic 的”实例化需求“的讲座,进行了尝试,也有一些深刻的体会。但是在实施的时候总觉得不得要领。

这本书给了我很大的帮助,他结合了对工具的技术细节的把握和行为驱动开发的深刻理念,来解决实际问题。这个在第六章中有集中体现,第十二章也能很好感受到。

第六章-常见问题的解决方案

作者列出了一些自动化测试中常见的问题,一下子击中要害,如果您进行过测试的开发,就会很有兴趣想看看他的解决方案。 这四个症状是:

  • 个别测试随机失败
  • 总是不经意地破坏已有的测试
  • 特性运行时间过长
  • 利益相关人不读我们写的特性

我敢保证这些症状是各个产品开发中的通病,不管用什么工具都会碰到。

比如第一个症状 -“个别测试随机失败”,他归结为问题:“闪烁的场景”,这在测试中是最常见的毛病。在一个不成熟的团队中,不太专业的测试人员会抱怨团队中的其他人:“我这边都是好的,就是其他人的问题。”。

这种情况追根溯源有很多,书中提到了三点:共享的环境、渗露的场景、竞争条件和打瞌睡的步骤。这些点在后续章节中又结合了具体的技术问题,前后呼应。

前三个症状看上去和 Cucumber 并没有直接关系的要点,也恰好是本书的亮点之一:他不断提醒您如果碰到这些常见问题,指导您如何用正确的方法来使用好 Cucumber 这个工具。也希望通过用实践经验引导您如何运用 Cucumber 写好您的测试用例,而不只是单纯的学习 Cucumber 的语法。

解决第四个症状是 Cucumber 的强项,也是本书的要点:Cucumber 不仅仅是自动化测试工具,它的测试用例更是利益相关人互相沟通的绝好载体,这里解释了如何写好测试用例来加强沟通,而不是沦为一个简单工具。

读这章时,建议您先想想自己会如何考虑和解决书中提到的问题,跟着作者一起思考。

第十二章测试 REST Web 服务

很多 Web 测试都是喜欢用 Selenium 来做页面调用,通常容易误入歧途:为了测试而测试。Cucumber 当然也可以和 Selenium 结合使用,但好的实践是对 Web 的接口进行测试。Web 测试这一章介绍的就是如何用 Cucumber 来测试 REST 接口的 Web 服务。

REST Web 服务结合 JSON 现在是很常见的了,这章就使用了一个小 Web 服务器来引导您如何做 Web 服务测试,是用 Ruby 的 Sinatra 演示的,由于它的语法非常简单,如果您熟悉其他的框架,也很方便替换。

Web 服务接口常用 JSON 来体现,这个在测试用例中往往会变得很技术化,作者在这章中特意花了些笔墨告诉我们如何在场景中避免出现 JSON 这样的技术术语,毕竟这些测试用例不仅仅是测试,它还是一个沟通的工具,作者特意强调了如何用文档的思维方式来写这些用例来确保可读性,这种方式贯彻在整本书中,不断提醒你用正确的方式写测试用例,当然这在 Cucumber 中叫特性,你会很快习惯的。

这个 Web 服务的小应用程序和测试例子随着问题的深入不断变复杂,用例子来说明问题是本书的另一亮点,通过跟着做练习不断强化理解。到最后会发现这就是您在实际过程中遇到的场景。

结束语

我愿意把这本书推荐给那些想了解如何处理需求和自动化测试的开发经理和开发者,如果还想了解行为驱动开发知识的话,还可以一起购买【实例化需求】辅助阅读,来加深理论方面的知识。

也推荐给那些已经熟悉了一些自动化测试的,正在寻求扩展的技能开发人员。

实际上对每个软件开发人员都会有点启示。

这么热的天,来根“黄瓜”解解渴。

Shared in Google


感谢张逸对本文的审校。

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

2013-10-04 08:303417

评论

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

Vue项目起步

JackWangGeek

Vue

NetPerf揭示容器间是高速路还是林荫小路

陈磊@Criss

实用心理学—没用你打我!

代码制造者

职场 职场搞笑 信息技术 人工

微服务框架 - 模块功能设计篇

superman

2.3.1 理解动态代理 -《SSM深入解析与项目实战》

谙忆

芯片破壁者(十二.下):青瓦台魔咒与半导体“死亡谷”

脑极体

Flink 中的应用部署:当前状态与新应用模式

Apache Flink

flink

Maven的爱恨情仇

xcbeyond

Java maven

重磅消息,我国数字人民币将在京津冀等具备条件地区试点

CECBC

数字货币 货币

【写作群星榜】8.1~8.14 写作平台优秀作者 & 文章排名

InfoQ写作社区官方

写作平台 排行榜 热门活动

微服务框架-模块需求篇

superman

图解23种设计模式——前方高能,前端切图仔请务必抓好方向盘

执鸢者

typescript 大前端 设计模式

微博基于 Flink 的机器学习实践

Apache Flink

flink

Facebook开源的数据Mock:Memisis详解

陈磊@Criss

Django的Models更新时,不触发Signals解决办法

BigYoung

django singals 信号机制 update 更新

Windows AD 保姆级配置NTP服务器教程

BigYoung

时间 AD ntp Windows Server 2012 R2

从北京降雨的复盘中,我发现了企业SD-WAN网络的秘密

脑极体

Junit执行单元测试用例成功,mvn test却失败的问题和解决方法

陈磊@Criss

Swagger 这一个文章就够了

陈磊@Criss

为什么会是Docker?

架构精进之路

Docker

2.3.2 JDK动态代理 -《SSM深入解析与项目实战》

谙忆

中本聪原始比特币论文解读:点对点的电子现金系统

韩超

比特币 区块链

LeetCode题解:88. 合并两个有序数组,splice合并数组+sort排序,JavaScript,详细注释

Lee Chen

大前端 LeetCode

[修复 Webpack 官方 Bug] 提取CSS时的依赖图修正

分一

大前端 webpack 编译优化 源码刨析

统一软件开发过程(RUP)的概念和方法

雯雯写代码

Serverless:为我们到底带来了什么

刘宇

Serverless 云原生

源码分析 | 咋嘞?你的IDEA过期了吧!加个Jar包就破解了,为什么?

小傅哥

Java 字节码插桩 asm bytebuddy

手撕二分查找及其变种,就是干!

我是程序员小贱

用Ant实现Java项目的自动构建和部署

陈磊@Criss

从实际案例讲 Deno 的应用场景

keelii

Java typescript deno

6种快速统计代码执行时间的方法

Bruce Duan

java统计时间 currentTimeMillis nanoTime StopWatch

阅读者:"Cucumber行为驱动开发指南" 能带给我们什么_语言 & 开发_蔡煜_InfoQ精选文章