【外刊IT评论网】“你这不是测试驱动开发”

标签: 技术技巧 TDD 驱动测试开发 | 发表时间:2011-08-25 00:41 | 作者:Aqee iBeyond
出处:http://www.aqee.net
本文是从 “That’s Not TDD” 这篇文章翻译而来。

几个月前,我去一个客户那里,他们在使用测试驱动开发上遇到了很多问题。

“我们的单元测试用例要半个小时才能跑完,”他说。

“你们这不是在做驱动测试开发,”我说。“为了让测试发挥效能,所有的测试必须在几秒钟内能跑完,否则的话,程序员不得不频繁的停下来等待测试。”

“可是怎样才能让它们快起来?”他问,“光连接数据库就需要30秒”

于是,我想他展示了一种叫做依赖注入的技术,它能让你使用一个伪造对象来模拟数据库。“你并不需要测试你数据库,”我说。“记住,测试应该是测试那些不受控制的东西,对于测试所依赖的东西,你应该使用模拟工具使它们处于控制之中。”

他们遇到的另外一个问题—我最近也是听到了很多次—是他们的测试程序不但没起到好的作用,反而成了一个负担。“我们三天两头的要重构程序,关联的就需要重构测试程序”,这样的话从客户那里可以经常听到。

这种问题是他们把TDD想成了QA。TDD不是QA。QA是来保证程序能正确的运行的。TDD是使用断言(assertion)来表现系统的关键特征。在QA里,我们用尽可能多的方法来测试系统中可能会出错的地方。在TDD里,我们用应尽可能少的测试来表现系统的关键特征。

我遇到的大多数开发人员都很重视代码质量,努力写出高质量的代码,程序看起来很整洁。但测试用程序也是程序,经常的我能看到测试程序就写的不是那么好。

例如,一些程序员会很认真的把产品程序里的冗余部分清理干净,但在测试程序中却留下大量的无用的代码。任何冗余都不是好事,冗余的测试也是如此,如果程序有变化,冗余的测试会花掉你额外的时间去重构。

当系统出问题时,测试程序就体现出来了它最大的价值,至少对我来说是最欣慰的时候。然而,对于系统,任何一个改动只应会让一个测试失败。换句话说,没有任何两个测试的失败原因是相同的。这说起来容易做起来难,但如果你尊重这个原则,你将会发现,当你重构代码时,重构测试程序是会容易多了。

目前就说这些问题。总之,测试也是程序,它们也要保持高质量。系统中的每个关键特征都用一个测试来表现,没有第二个测试会因为这同一个问题而失败。

你怎么看待这些问题?我很想听听你的想法和建议。不要犹豫,请在评论里分享你的观点。


本文来自外刊IT评论网(www.aqee.net),原始地址:“你这不是测试驱动开发”

相关 [it 测试 开发] 推荐:

iOS开发进阶之单元测试

- - 博客园_首页
本文侧重讲述如何在iOS程序的开发过程中使用单元测试. 使用Xcode自带的OCUnit作为测试框架. 单元测试作为敏捷开发实践的组成之一,其目的是提高软件开发的效率,维持代码的健康性. 其目标是证明软件能够正常运行,而不是发现bug(发现bug这一目的与开发成本是正相关的,虽然发现bug是保证软件质量的一种手段,但是很显然这与降低软件开发成本这一目的背道而驰).

是否使用TDD(测试驱动开发)进行UI开发

- - SegmentFault 最新的文章
StackOverflow上有一则 是否使用TDD(测试驱动开发)进行UI开发 的提问. 对于是否使用TDD进行开发UI这件事,我想了很久,但难以决定. kdgregory的回答(23票赞同). 试图测试UI组件的放置是没有意义的,首先因为UI布局是主观的,所以应该由人来测试. 其次,随着UI改动,你要不断地重写测试.

BrowserSwarm:开发者兼容测试利器,节省JavaScript项目的测试时间

- - IE浏览器中文网站
今天,我们联合 appendTo 和 Sauce Labs 共同发布了 BrowserSwarm – 这是一个开源工具,可以帮助 Web 开发人员跨设备和浏览器自动测试其 JavaScript 框架和库. 质量框架是现代 Web 的基础,但框架开发人员通常没有合适的资源来执行跨浏览器测试. BrowserSwarm 可以帮助开发人员构建可互操作的优秀框架.

【外刊IT评论网】“你这不是测试驱动开发”

- iBeyond - 外刊IT评论网
本文是从 “That’s Not TDD” 这篇文章翻译而来. 几个月前,我去一个客户那里,他们在使用测试驱动开发上遇到了很多问题. “我们的单元测试用例要半个小时才能跑完,”他说. “你们这不是在做驱动测试开发,”我说. “为了让测试发挥效能,所有的测试必须在几秒钟内能跑完,否则的话,程序员不得不频繁的停下来等待测试.

如何开发高质量软件?及软件测试观点

- - 我的宝贝孙秀楠 ﹣C++, Lua, 大连,程序员
也许是因为我经常在twitter上鼓吹“代码质量来自code review和单元测试”,老赵的这篇文字 http://blog.zhaojie.me/2012/01/a-case-requirement-to-practice-unit-testing-or-tdd.html 也at我一下,抱歉的是最近欠债太多,正在着手完成答应侯伯薇的那篇关于appengine的文字.

谈测试人员与开发人员的比例

- - 互联网旁观者
    在一些软件大会上,人们常常会问这样一个问题:测试人员与开发人员的比例究竟多少是合理的. 而这样的问题,很难直接给出一个答案. 为什么会有这样的问题,可能来自于两方面的压力:.     许多公司领导总是希望得到一个合理的比例,然后按这个比例分配招聘的名额,或者设法缩小测试队伍,减少开发成本.     多数情况下,测试人员工作量大,比开发人员忙,所以想寻求一个数据,来说服其公司,多招些测试人员.

测试驱动开发上的五大错误

- - 外刊IT评论
我曾经写过很多的糟糕的单元测试程序. 但我坚持着写,现在我已经喜欢上了些单元测试. 我编写单元测试的速度越来越快,当开发完程序,我现在有更多的信心相信它们能按照设计的预期来运行. 我不希望我的程序里有bug,很多次,单元测试在很多弱智的小bug上挽救了我. 如果我能这样并带来好处,我相信所有的人都应该写单元测试.

Eucalyptus私有云 -- 参考架构(小型开发测试云)

- - 婉兮清扬
 If the target deployment is one that will need to scale to accommodate more capacity in the future, the  Dev/Test (Large) reference architecture should be used, instead.

android gps开发必备资料(含测试demo下载)

- - CSDN博客推荐文章
int year = ca.get(Calendar.YEAR);//获取年份. int month=ca.get(Calendar.MONTH);//获取月份. int day=ca.get(Calendar.DATE);//获取日. int minute=ca.get(Calendar.MINUTE);//分.

开发者常用的10大GUI测试框架

- - CSDN博客Web前端推荐文章
1.Abbot - Java GUI 测试框架. Abbot是一个基于GUI的简单的Java测试框架,它能够帮助开发者测试Java用户界面. 它提供事件自动生成和验证Java GUI组件,使您能够轻松地启动,探索和控制应用程序. 开发者可通过脚本和编译代码两种方式来使用Abbot框架,这就是为什么它被认为是在开发者的系统测试和QA的功能测试中都能用到的最完美的GUI测试工具.