五十多年以前,当我刚开始从事计算机行业的时候,计算机是极其稀少而珍贵的。当我发现自己坐在一间巨大的房间前的控制台面前时,还只是一个十几岁的少年。那个房间里塞满了硬件,大约拥有当时世界上整个计算能力的百分之十。我只要伸出手指按一下,就可以关掉这样的计算能力——有时候这确实就是我的工作。.
只要愿意排队,你就可以用大约两倍于我月薪的钱来租用这样的计算能力一个小时。今天,计算机已经非常便宜,实际上我已经在捐赠一些计算速度比那些早期型号快五万倍,内存也要大五万倍的计算机。捐赠的这些机器非常紧凑而轻便,我可以很轻松地把它放进公文包中。而它的计算能力却连当今世界计算能力的十亿分之一都不到。
显然,我目睹了计算机技术的长足发展,不过这一发展对我的影响是潜移默化的。我实际上并未注意到这些变化,直到几年前听到一则有关卡纳维拉尔角取消一次火箭发射的新闻报道。在播音员结束新闻报道时,其中一人说:“太空总署(NASA)说这是一个计算机软件错误。”
另一名播音员回应道:“像计算机这么简单而常见的东西也会出这样的错,难道不奇怪吗?”
第一个人回答道:“是很奇怪,难道你认为他们不会对软件进行测试?”
不错,我认为他们会对软件进行测试。事实上,我确信他们进行了测试。不过,播音员显然认为测试必然应该产生完美的、没有任何缺陷的产品。
我无法停止思考这段对话以及播音员不切实际的期望。一开始,我只是耸耸肩膀,对自己说:“这就是普通大众对软件测试的无知。”不过现在要忽视这一问题已经太晚了。我的警觉已经被提高了。我开始发现甚至我那些生产软件的客户公司的经理们也表现出了同样的无知。尤其是那些经理们,软件测试简直要让他们抓狂。
我是一个容易认同别人感情的人。当我周围的人痛苦时,我会同样感到痛苦。我理解软件经理们正在感受痛苦,他们的员工和客户同样如此。我还知道他们感到痛苦的原因,几乎所有人都并不完全是因为软件测试非常复杂或者耗时耗力,而更多的是由于他们对软件测试的不合理期望和那些靠不住的测试模型。
“最后,我决定还是按照我发现无知导致了问题时喜欢采用的应对方法来做:写下这个问题以及可能的解决方案。我写下的内容最终形成了本书。”..
在我多年以前写作《The Psychology of Computer Programming》一书时,我希望它能够帮助那些想了解编程的人[1]。有不少人告诉我它确实为他们提供了帮助,所以,在一定程度上也许是那本书的成功促使我着手写作这本书:为了帮助那些想了解测试的人。
这本书的预期读者非常广泛:我预想这本书会拿在专业测试人员、开发人员、客户、分析师、设计师、程序员,以及他们的所有经理和同事手中。
大部分专业测试人员都知道这本书中的大部分内容,但我还是希望他们可以通过阅读本书发现与他们的经理、开发人员、同事和客户交流他们知道的那些信息的新途径。
我希望能够帮助开发人员和测试人员了解他们的经理在遇到软件测试事宜时会面对哪些情况。
我希望能够帮助客户,也就是那些买软件的人,了解更多的信息。
最后,既然现在每个人都会受到软件的影响,并且受到未经良好测试的软件的伤害,我希望能够帮助所有人更为注意测试。
由于我希望能够获得广泛的受众,所以我选择尽可能使用平直的文字,避免那些高度技术化的术语和过于详细的分析。(对于那些有兴趣学习有关软件测试的更多技术细节的人,我在本书结尾的其他阅读材料部分指出了一些非常可靠的参考书籍。)为了集中精力帮助那些希望了解软件测试的人,我根据下面这些会让大多数人感到困惑的问题来组织本书:
为什么在看起来测试只会耽搁时间的时候我们还要进行测试?
为什么大家不能一开始就构建正确的软件,从而不需要测试?
我们需要对所有的可能都进行测试吗?
为什么不对所有的可能都进行测试?
.是什么原因导致测试如此困难?
为什么测试需要这么长的时间?
是否有可能构建完美的软件?
为什么我们就是不能接受一些缺陷?
G. M. W.
2008年4月于新墨西哥州阿尔伯克基...