OceaBase开发者大会落地上海!4月20日共同探索数据库前沿趋势!报名戳 了解详情
写点什么

自动化的验收测试──是否只是纸上谈兵?

  • 2009-06-08
  • 本文字数:1387 字

    阅读完需:约 5 分钟

编写需求并自动生成验收测试(有时候称作测试驱动需求,故事驱动开发,以及──要看你问的是谁── 行为驱动开发),在这方面已经有了零星的成功案例。然而社区中只有很少数的人这样用过。一些思想领袖公开声称这么做不好,浪费精力。每个迭代开始编写的自动化验收测试真的只是纸上谈兵吗?由于很少有人采用,这种方法是否难以奏效?

首先,让我们解释一下自动化的验收测试是什么意思:它是指在迭代开始时编写的测试,是用可执行形式表示的需求。当它们描述的需求开发完成后,就可以 作为详细的例子说明系统具有什么样的功能──也是对“我完成后,系统看上去是什么样的呢?”这个问题最好的解答。以前最常用的自动化验收测试工具是 FIT 和 FITNesse ,然而今天已经是 cucumber rspec 了。

这种类型的测试还没有流行起来。事实上,最近有一篇讨论,题目就是 FIT 死了吗? 除此之外,在敏捷 2008 大会上 InfoQ 的一个采访中,Brian Marick 就宣称:

InfoQ:听起来有意思极了。我赞同在业务层面的测试,客户能够理解,他们也乐于看到。你还提到了一些例子。我不知道是不是因为用文字描述测试太复杂了,你说的这些例子只是为了简化吗?但是你确实提到了客户的测试,不是吗?能否多介绍一点?

Brian:我注意到一件有趣的事情, 不管在哪个方面它都与单元测试驱动设计不同,比如:你设计了一个测试,通常你对问题已经非常了解。当然单元测试做的还是单元测试的事儿。但是为了使测试自 动化,不需人工干预就把例子运行起来,你需要编写支持代码,通常你不会有任何这样的想法”哈!真高兴写了那些代码,我学到了不少东西“,相反,你会这样想 ”写这些代码真是烦死人了,没学到任何东西“。所以编写那些代码不会有任何收获,除了拥有测试,你不会有任何实际的好处。直到现在,也看不出来验收测试对 深奥复杂的结构有什么影响,就像重构对单元测试那样。所以我的问题是创建测试能否带来价值?编写这些代码还需要投入相当大的成本,把测试自动化能得到与付 出同等的价值吗?因为如果不能从中得到同样的价值,为什么不在一个白板上测试,程序员实现功能,手工检查,甚至向产品负责人手工演示,完成以后,为什么不 擦掉然后忘记它?我们为什么需要把测试保存下来,然后一遍又一遍地运行它们?

然而,社区中许多其他的思想领袖仍然推荐使用自动化的验收测试;仅举几个例子,比如 Robert C. Martin、Joshua Kerievsky 和 James Shore 这样的大牛。

Christ Matts 使用一种有趣的方式来看待这个问题, 即把它作为“信息到达“的问题。比如你在软件开发过程中(不一定是敏捷的)并没有提前编写验收测试。QA 团队运行他们自己的测试场景,发现缺陷后,就反馈 给软件开发人员。缺陷是随机发现的,所以会影响团队的开发速度,因为开发团队必须花费一定的精力来解决这些缺陷。开发过程中,类似这样的信息会随机传递给 开发团队。

现在,我们考虑一下如果QA 部门在开发开始之前就编写测试。我们就可以预测这些信息在迭代开始时就会出现。因此不确定性的因素减少了,速度也就更稳定了(随机的打断更少了),这意味着有了更高的可预测性。

所以,自动化的验收测试只有所谓精英分子(或者交了狗屎运的人)才能玩的转吗?是否某些内部缺陷尚未发现,导致它名不副实?或者它确实有诸多好处,只是比较困难而已,应该鼓励每个软件开发团队去亲自尝试?

查看英文原文 Automated Acceptance Tests - Theoretical or Practical

2009-06-08 20:181788
用户头像

发布了 37 篇内容, 共 11.0 次阅读, 收获喜欢 5 次。

关注

评论

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

Python+OpenCV检测灯光亮点

不脱发的程序猿

Python OpenCV 28天写作 3月日更 检测灯光亮点

Java 并发系列(二):DCL — Double Check Lock

TroyLiu

Java volatile 多线程 synchronized DCL

Rust从0到1-基础概念-注释

rust 代码注释

Python OpenCV setMouseCallback 回调函数,取经之旅第 13 天

梦想橡皮擦

3月日更

区块链溯源,茶叶溯源平台的搭建

13828808769

区块链+ #区块链#

智慧公安警务系统搭建,警务大数据可视化分析平台解决方案

13828808769

智慧城市

科技赋能城市建设,英特尔正式发布智慧社区解决方案参考架构

E科讯

百度飞桨中国行南京站开启!共研AI赋能产业新模式

百度大脑

百度 AI 飞桨

Java程序员都要懂得知识点:反射

华为云开发者联盟

Java 对象 反射 class 函数

LDO和DC-DC有什么不同?如何选型?

不脱发的程序猿

28天写作 3月日更 LDO DC-DC 电源转换

【签约计划】技术编辑能力考核成绩公布

InfoQ写作社区官方

签约计划 热门活动

首站重庆聚焦智慧物流、呈现最新AI能力

百度大脑

AI 百度大脑

企业利用边缘计算的10种方式

浪潮云

边缘计算

一个魔幻的框架,3分钟纯 Java 注解搭个管理系统

程序员小富

Java 大前端 后端

Elasticsearch详细剖析

大数据技术指南

ES 3月日更

银四30天,苦心啃透java高级工程师面试1000题,涨薪10K很难吗?

Java 编程 程序员 架构 面试

开源项目月刊《HelloGitHub》第 60 期

HelloGitHub

GitHub 开源

区块链溯源服务平台,区块链商品防伪溯源解决方案

13828808769

区块链+ #区块链#

区块链溯源,茶叶溯源平台的搭建

13828808769

#区块链#

一次客户需求引发的K8s网络探究

京东科技开发者

云计算

在开源的公链上实现隐私保护?静看NA公链 NAC公链创新之路应如何蜕变

区块链第一资讯

【技术面对面】基于场景图的多物体图像生成技术

京东科技开发者

云计算

Mongodb特定场景性能数十倍提升优化实践(记一次十亿级mongodb核心集群雪崩故障)

杨亚洲(专注MongoDB及高性能中间件)

MySQL 数据库 mongodb 架构 分布式数据库mongodb

云图说|一张图带你了解华为云分布式数据库中间件

华为云开发者联盟

数据库中间件 DDM 分布式数据库中间件 华为分布式数据库中间件

实现一个“能中断”的ajax

云小梦

JavaScript ajax Promise axios 请求拦截

“广度”和“深度”,是我最终选择蚂蚁的理由

DT极客

实战案例丨分布式系统中如何用python实现Paxos

华为云开发者联盟

Python 算法 分布式系统 PAXOS 集群库

华为云自研PB级分布式时序数据库揭秘第一期初识GaussDB(for Influx)

华为云开发者联盟

云原生 时序数据库 华为云 分布式时序数据库 GaussDB(for Influx)

python中find_element()和find_elements()的区别

Geek_6370d5

Python

Python基础之:Python中的异常和错误

程序那些事

Python Python3 程序那些事

JVM-技术专题-Class文件加载虚拟机

洛神灬殇

JVM Class字节码

自动化的验收测试──是否只是纸上谈兵?_研发效能_Amr Elssamadisy_InfoQ精选文章