在今天的工作中我对一个同事说,PyDev 2.5.0 现在对TDD(测试驱动开发)可以说是提供了很酷的支持了。当然,我并不是一个对TDD很痴迷的倡导者,对其它事物也一样,但是仍不能避免激起一场讨论。而这个同时,让我们暂是叫他约翰,说:“在开发一个功能的时候,TDD可以节省开发的时间,但是,有的时候一个功能需求,要求的是这样的紧急,所以我们要尽可能快的交付这个功能,那么软件测试只能放在以后再说。”
但是,诸如这样的话实在是让我欲哭无泪。
因此我极力解释说,如果没有测试,那么发布的代码将会存在不可想象的风险。而就像这个功能非常的重要一样,你的产品也可能会因此受到严重的破坏。尤其当你在使用Python语言时,很少会有问题在编译期显示出来(一个简单的书写错误就有可能导致运行期的一个AttributeError,甚至是更糟糕)。而我认为这种风险过高所以不可接受。但是约翰回复说,也许你说的是对的,但是是否值得去冒这样的风险,这种权利还把握在项目经理手里。而如果你使用TDD,那么实际上你就是剥夺了他认为可以“放弃软件测试以后在说”的权利。“
说实话,对于这样的逻辑观念,我不知道如何回答。不错,老板有权利决定是否需要测试我的程序,但是…他应该这样吗?一个建筑工人被告知先把砖块码起来,灰泥以后再补,这样合理吗?
在我读过的书本中显示,这种想法是错误的。软件测试并不是一个功能。它不是一个由客户提出来的需求。它不是”最好测一下“。
它是一个软件的任何一段代码的固有组成。
不错,你可以开发出不经测试的软件。它甚至可以运行,就像是摞起来的砖块看起来也是一堵墙。但如果遇到大一点的风,它有可能就会砸到某人的头上。
你会对持这样观点的人做怎样的回复?
[本文英文原文链接:Testing is not a Feature ]