`

我们的测试驱动开发经验

阅读更多

你应该听过或读过不少关于测试驱动开发的讨论,测试驱动开发往往被比喻为神奇的独角兽,它能帮你照看你的软件,让大家乐得其所。于是,在写了18.000行“神奇独角兽”代码后,我想把我们的体验从整体的角度阐述一下。

真相其实是,测试驱动开发真TMD太痛苦了。写那些没完没了的测试需要很强的自律,远不是你想象的那么简单容易。

但你知道什么更让人讨厌吗?是缺少这些测试而出现的麻烦。

 

让我澄清一下。我并不是想来劝说你去实施测试驱动开发。我想做的只是要给你一个真实的认识,让你明白TDD是如何工作的,以及你能从中得到哪些好处。

对软件开发来说,我基本上把测试驱动开发当做一种保险。它能保证你的软件有一个预设的质量关卡,大多数是依据bug的数量和软件变更的风险度来判定。它同时能降低万一你的主要开发人员被车撞后造成的损失,以及你的软件所依赖的平台上的API遭遇类似事件所带来的危害。

然而,在我们所生活的这个星球上,仍然有成百万的人每天过着没有保险的生活,很显然,达到目的的方式并不是只有一条途径。这完全依赖于你的责任心和你能或你想怎么去做事情。

Transloadit 公司,我们 100% 的代码都是由测试驱动开发的。我们这样做的主要原因是我们的系统用了node.js,这种技术目前来看在某种程度上仍然是有很高的风险的技术,也许这正是 我们最大的麻烦,但同时也是我们最大的优势所在。另外一个很大的风险是我们使用的第三方工具包,例如ffmpeg和image magick,这些东西在升级时出奇的危险,因为它们动不动就改变API和接口运行方式。而最后一个,但绝对不是最不重要的一个,是我们的某些东西太复杂 了。

现在,让我解释一下我们如何利用测试驱动开发来避免这些风险的。首先,在开发所有的新功能前先写系统测试。所有的系统测试都是利用整套的REST service,它产生真实的HTTP请求,评估响应的信息,同时也检查这个过程中产生的文件。我们通过文件的元数据信息来确认文件,对于图片我们使用特 定的设计进行可视化比较。对于视频我们使用截屏图像进行可视化对比。

一旦写出来测试程序(也许是失败的测试),我们就开始写单元测试。让我来解释一下我们所说的“单元“。对于我们来说,一个单元是我们能测试的一个最 小粒度的功能片段。只要存在函数调用,类的创建,甚至闭包的回调,我们都会把它挑出来。所有的测试都是孤立的、分离的、能够自动的运行处理。你可以想象的 出,这部分工作是痛苦的,需要勇气。

可是,产生的结果却是不可否认的漂亮。写这些测试感觉就像是在验证数学理论。每一个步骤都是能够分解的最小的逻辑单元。所有的步骤都是基于之前的一步。没有必要每次都测试所有的 1 – 1000000个功能点,除非你有逻辑上的需求,需要一个特殊结果。

很显然,在这个过程中你有很多机会去做傻事,或者迷失了原始方向。这时系统测试就来拯救你了。任何当你不知道下一步该做什么的时候,只要运行一下系统测试,它就会告诉你还少些什么要做。

完美的过程吗?不,在我们的产品中的这里或那里,多少都会有些bug,但不多,我十个手指头都能数过来。上周末,我们对我们的产品做了一个疯狂的改动:我们把底层的MySQL驱动(我们用的是PHP,别问我怎么做的)换成了node-mysql 。我们已经在node-mysql 上工作了,同样使用的是TDD-masochism ,升级相当的平稳(目前为止)。这种成绩对于一个牵涉有6000行代码的改动来说很不错了。

这就是我们做的。并不会由于我们使用了TDD,我们公司的产品就必然的优于我们的竞争对手。但我们承担的风险要小的多,我们可以轻而易举的做心脏手 术。这给了我们分配资金的信心,给了我们能力去把剩余有限的资源(我们做事情步步为营)使用在新功能的开发上,而不是花在解决我们软件里无处不在的缺陷 上。

那么,TDD适合你吗?这要视情况而定。按TDD模式写程序需要很强的自律,独角兽不会一直陪在你身旁让你放心。想好了再去这样做。有时一些系统测 试程序会用掉你80%的努力来测试只是20%的工作。而有些情况会让你把剩余的20%也搭上。我们很幸运能使用一种灵活的语言,我们大部分的接口都是使用 的JSON。这使我们的测试成本更低。这些我们铭记在心。

[英文出处]:Test driven development at Transloadit

 

原文:http://www.aqee.net/2010/11/09/test-driven-development-at-transloadit/

分享到:
评论

相关推荐

    测试驱动开发 影印版

    《测试驱动开发 影印版》 软件工程是计算机学科中一个十分重要的研究领域。自20世纪60年代以来,人们在这一领域做了大量的工作,逐渐形成了系统的软件开发理论、技术和方法,它们在软件开发实践中发挥了重要作用。...

    敏捷实践之测试驱动开发.pptx

    结合Etest的开发经验以一个简单的示例来机械地介绍测试驱动开发 结合前面介绍的内容讨论测试驱动开发的一些原则要点等

    测试驱动开发的3项修炼-走出TDD丛林

    走出TDD丛林》用实际案例及故事讲述了测试驱动开发(TDD)的最佳实践,从TDD为什么实践起来非常困难等最根源的问题入手,循序渐进地介绍了构筑TDD的三项修炼,涉及到未雨绸缪的单元及自动化测试、结构化、敏捷以及平衡...

    测试驱动的面向对象软件开发

    《测试驱动的面向对象软件开发》采用通俗易懂的比喻,众所周知的编程语言,短小精悍的工作实例,深入浅出的分析处理——仿佛在和几位世界级的编程高手一边喝茶,一边聊天,循序渐进地让读者在不知不觉中进入编程的最高...

    Agile Java 测试驱动开发的编程技术

    本书是写给每一位程序员,甚至包括对Java、面向对象开发或敏捷方法几乎没有经验的程序的,他向我们展示如何把口头需求转变成实际的,然后如何利用这些测试创建可靠的、高性能的Java代码,从而解决实际问题。...

    《竹林蹊径 深入浅出Windows驱动开发》.zip

    《竹林蹊径:深入浅出windows驱动开发》是作者根据多年的工作学习经验,总结的第一手驱动开发资料。《竹林蹊径:深入浅出windows驱动开发》更多的是经验之谈,一些实践中的小发现小意外,颇为书中内容添彩。 《竹林...

    竹林蹊径 深入浅出Windows驱动开发

    竹林蹊径 深入浅出Windows驱动开发:本书是作者根据多年的工作学习经验,总结的第一手驱动开发资料。但它不是一本深刻到最底层的原理性的书,有这种预期的读者会失望。本书更多的是经验之谈,一些实践中的小发现小...

    ( [竹林蹊径:深入浅出Windows驱动开发(补全版)].rar )

    竹林蹊径:深入浅出windows驱动开发》是作者根据多年的工作学习经验,总结的第一手驱动开发资料。 《竹林蹊径:深入浅出windows驱动开发》更多的是经验之谈,一些实践中的小发现小意外,颇为书中内容添彩。 《竹林蹊径...

    《测试驱动的面向对象软件开发》迷你电子书

    《测试驱动的面向对象软件开发》采用通俗易懂的比喻,众所周知的编程语言,短小精悍的工作实例,深入浅出的分析处理——仿佛在和几位世界级的编程高手一边喝茶,一边聊天,循序渐进地让读者在不知不觉中进入编程的最高...

    竹林蹊径——深入浅出Windows驱动开发

    本书是作者根据多年的工作学习经验,总结的第一手驱动开发资料。本书更多的是经验之谈,一些实践中的小发现小意外,颇为书中内容添彩。 本书的特色之一,是对WDF框架做了较多的切入。本书第一个主要内容是(第3~7章...

    XUNIT测试模式--测试码重构(英文版)

    1.本书获得2008年 Jolt Award技术图书类生产力大奖。. 2.本书作者Gerard Meszaros是...4.本书适用于采用敏捷或常规开发过程的开发人员、管理人员和测试人员,而不管他们是进行测试驱动开发还是最后写测试。...

     软件测试中的单元测试与敏捷开发

    TDD(测试驱动开发)必然没错,但是使用不当会造成开发效率的下降。在敏捷开发实践中,结 软件测试中的单元测试与敏捷开发软件测试 在要求项目要尽量快地实现的时候,质量与开发进度上会出现一定的矛盾,最突出的...

    -Hands-on-Test-Driven-Development-with-Python:Packt发行的Python动手测试驱动开发

    单元测试和测试驱动开发(TDD)是可以帮助您实现该目标的关键学科。 在本视频教程中,您将了解PyTest测试库以及如何将其用于用Python编写单元测试。 您还将设置一些常见的Python开发环境以使用PyTest。 您将使用...

    女士在TDD上的代码动手:(重新)Découvronsle测试驱动开发avec notre实际动手签名Ladies of Code

    TDD(测试驱动开发-测试开发指导)以及体操运动的发展。 您可以亲身体验开发人员的经验。 安装要求 Clônerle repo Github Depuis ton IDE(集成开发环境-développement的环境),位于ou的终端或安装了projet ...

    测试驱动的面向对象软件开发(中文版)

    本书采用通俗易懂的比喻,众所周知的编程语言,短小精悍的工作实例...本书是编程爱好者的启蒙指南,更是系统分析人员、测试人员、程序设计人员、软件开发人员以及面向对象程序研究人员等专业人士革新编程思想的必备手册。

    Cucumber行为驱动开发指南(英文版本)

    Cucumber创始人与最有经验的用户和贡献者之一的权威力作。 流行的自动化功能测试工具Cucumber的权威指南。 国内敏捷及测试群体极好口碑和期望。 很少有工具能像Cucumber那样把开发者和客户之间的鸿沟成功地桥接起来...

    Head First软件开发.pdf

    学习Mary如何满足她的客户的真实用户故事,通过测试驱动开发去避免不可见的软件灾难,通过跟踪burn-down率保持你的项目进度,通过开发速度弄清你的团队的生产率并以此进行评估。掌握经验丰富的软件开发人员的技术和...

    驱动开发工具 共6个分卷 分卷5

    驱动开发环境之Windows XP DDK2600,VC++ 6.0, Driver Studio 3.2 神秘的驱动开发,神秘的WINDOWS内核,是什么把这些搞得这么神秘呢? 搭Windows驱动开发平台就搭了两天,历经各种找不到,搞不通。我还是学计算机...

    基于Android平台应用程序的关键字驱动自动化测试-理论,工具

    鉴于此,并结合传统桌面系统上的自动化测试经验,我们在此探讨基于Android平台应用程序的关键字驱动自动化测试的可能性,并摸索一条适合在移动应用开发过程日新月异的现实情况中切实有效的实施自动化测试的方法。

    tdd:测试驱动程序设计

    佩德罗·米尼奇(Pedro Minicz) RA:1460281913040测试驱动设计测试驱动的开发经验。 :测试驱动开发的示例Passando pelosestágiosvermelho,verde e azul

Global site tag (gtag.js) - Google Analytics