第1章 测试工程师的“三年之痒”
1.1 软件测试发展简史
其实软件开发出现时就有软件测试了。不过最初的软件测试一般是由开发人员自己完成的,投入极少,那时的测试叫“调试”更为恰当,还称不上真正的软件测试。
随着软件行业的发展,混乱无序的软件开发过程已经不能适应软件功能日益复杂的现状,“软件危机”[1]爆发。1968年秋季,北约召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱软件危机的对策。在那次会议上提出了“软件工程”的理念。随着软件工程的发展,软件测试也开始逐步发展起来,图1-1总结了软件测试发展进程。
图1-1 软件测试简史
1975年,两位软件测试先驱John Good Enough和Susan Cerhart在IEEE上发表了《软件数据选择的原理》一文,将软件测试确定为一种研究方向。此时软件测试普遍被定义为“证明软件工作正确的活动”,这个理念被简称为“证实”。
1979年,Glenford J.Myers撰写的《软件测试的艺术》一书出版(该书到现在已经出版到第3版,依然被大多数软件测试人员奉为经典)。该书结合测试心理学,对测试重新进行了定义,认为测试是为了“发现错误而进行的活动”,这个理念又被称为“证伪”。“证实”和“证伪”至今依然是软件测试领域重要的理念,对测试工程师有着深远的影响。
1983年,另一本软件测试的重量级著作《软件测试完全指南》(由Bill Hetzel撰写)横空出世。这本书指出:“测试是以评价一个程序或者系统属性为目标的任何活动,测试是对软件质量的度量。”至此,人们开始意识到,软件测试不应该仅在事后用来证明软件是对的或是不对的,而应该走向前端,进行缺陷预防。
20世纪90年代,软件测试开始迅猛发展。自动化测试技术开始盛行,软件测试开始向体系化发展,测试成熟度模型(TMM)、测试能力成熟度模型(TCMM)等开始出现。软件测试体系日益成熟、完善。
2002年,Rick和Stefan在《系统的软件测试》一书中对软件测试做了进一步定义:“测试是为了度量和提高被测软件的质量,对测试软件进行工程设计、实施和维护的整个生命周期过程。”这进一步丰富了软件测试的内容,扩展了软件测试的外延,测试进入“全生命周期测试”时代。
[1] 1968年,北大西洋公约组织(简称北约)的计算机科学家在德国召开的国际学术会议上第一次提出“软件危机”。概括说来,软件危机包括两方面的问题:如何开发软件,以满足不断增长、日趋复杂的需求;如何维护数量不断膨胀的软件产品。