Aaron的测试生活小说

半两五钱,笃志向前
  首页  :: 新随笔  :: 联系 :: 管理

译释Dozen ways to find bugs(5)——Build safety Nets

Posted on 2009-02-28 10:35  Aaron Wu  阅读(187)  评论(0编辑  收藏  举报

  英文原文名叫《A Dozen Ways to Get the Testing Bug in the New Year》,是Aaron在java.net上发现的文章。原文地址http://today.java.net/pub/a/today/2004/01/22/DozenWays.html,原文是在2004年1月22日发表的,按常理说一片早已经过了时效期的文章是没有多大用处的,但是Aaron却认为时至今日该文依然值得一阅。

     在新的一年里面我们可能希望好好锻炼一下自己的身体,可是即使这样我想我们也没必要去每天练习三项全能(来达到锻炼身体的目的吧)。同样的道理,对于一个测试新手来说,一开始就为已完成的陈旧的源代码写测试是一件很痛苦的事情。这同我们一开始就以练习三项全能来实现锻炼身体的目的其实有着相同之处,这样做只会让我们感觉到强烈的挫折感。原因是显而易见的——一口是吃不下一个大胖子的。

     不过这些话拿到现实中来则不那么有用了,除非你很幸运的正好碰到了一个新的项目,否则遗产代码——已经完成的陈旧的代码——是难以避免的话题,所以我们不得不面对这个现实。如果这些代码还是没有经过测试的,额,那么这些代码无疑是一捆定时炸弹,随时可能被引爆。作为一个刚接触这些代码的人来讲——无论你是新手还是老手——我们都不会轻易去改动这些代码,因为对于代码的不熟悉,我们的改动可能会造成原有的代码结构或功能行为被破坏掉。这怎么办呢,一方面我们的代码是陈旧的有着严重的腐朽味道甚至是发出了臭味了——布满了bug,如果不对这些代码进行改动的话,我们无法消除这些怪味道,我们也无法开展我们的测试,如此这般我们就陷入了两难的境地。

     有时候,形式决定了我们不得不更改这些代码,这个时候我建议大家试着为这些代码构建一张安全网(Safty nets),这样做可以帮助我们降低改动可能带来的风险(注意是降低,没人可以说消除,Aaron注)。这张安全网并不是说你要建立起对于所有遗产代码的全面的测试活动,这无疑是很容易让人感到沮丧的一件事情,而且还会造成时间上的问题——个人提交代码的延期。我们需要做的只是为那些需要改动的代码构建一张安全网,仅仅是把我们需要修改的代码部分用测试包裹起来。怎么构建这张安全网?(说起来很简单,实际做的时候肯定还是会困难重重)先写一些测试代码来验证我们准备改动的那些代码的功能行为,接着我们就动手去修改这些源代码,然后在改动的过程中以及改动完成后经常地运行实现完成的测试——我们要保证我们的改动对于代码没有造成伤害。

  在某些极端情况下,我们发现如果不对这些陈旧的代码进行改动,我们连半个测试都写不出来,这个时侯我们可以使用一些其他的方法来代替,比如我们可以运行相关联的功能测试用例。

  重构可以帮助我们预防代码腐烂,而我们构建的安全网则可以帮助我们保证重构对于原有的代码的改动没有造成伤害。当然,有些幸运的家伙一开始就加入到了一个新的项目中,什么都是新的,代码是自己写的,而且我们在开发的过程中坚持着测试先行的实践,那么,我想告诉你,你已经在不知不觉间构建了一张安全网了。如果在这个过程中,我们尝试重构我们的代码,这张安全网的意义则是非常重要的(还是那个原因,它可以告诉你你刚才的重构是否伤害到了代码,并且这种一开始就构建的安全网因为覆盖面大的优势,还可以帮助检查重构对于其他部分的代码是否造成了伤害,而不仅仅是修改过的那一小部分,Aaron注)。

    前面已经提醒过大家了,构建安全网并不是一件十分轻松的事情,但是由于安全网的重要性,我认为这样做还是很有必要的,而且它也值得我们这样做。