1.2 软件测试的定义及发展历程
1.2.1 软件测试的定义
软件测试是指鉴定软件的正确性、完整性、安全性的过程,即在规定条件下运行软件以发现其中的错误、评价软件质量,并对其是否能满足设计要求进行评估的过程。
1.2.2 软件测试的发展历程
1.1957年之前,调试为主(Debugging Oriented)
最初的软件测试其实只是“调试”,还算不上真正的软件测试,一般是由开发人员自己独立完成的。
2.1957—1978年,证明为主(Demonstration Oriented)
随着软件行业的发展,混乱无序的软件开发过程已经不能适应软件功能日益复杂的现状,从而出现了“软件危机”。1968年秋季,NATO(北约)的科技委员会召集了近50名一流的编程人员、计算机学家和工业界巨头,讨论和制订摆脱软件危机的对策。在这次会议上提出了“软件工程”的理念,随着软件工程的发展软件测试也开始逐步发展起来。
1975年,约翰(John Good Enough)和苏珊(Susan Cerhart)两位软件测试先驱在IEEE上发表了“软件数据选择的方法”一文,将软件测试确定为一种研究领域。此时软件测试普遍被认为是“证明软件的工作是否正确”的活动,这个理念被简称为“证明”。
3.1979—1982年,破坏为主(Destruction Oriented)
1979年,格伦福德(Glenford J.Myers)著名的《软件测试艺术》一书出版。该书结合测试心理学对测试重新进行了定义,认为测试是为了“发现错误而执行的活动”,这个理念又被称为“证伪”。“证实”和“证伪”至今依然是软件测试领域中的重要理念,对软件测试工程师有着深远的影响。
4.1983—1987年,评估为主(Evaluation Oriented)
1983年,另一本软件测试的重量级著作——《软件测试完全指南》(Bill Hetzel著)横空出世。这本书指出:“测试是以评价一个程序或者系统属性为目标的任何一种活动,测试是对软件质量的度量。”至此,人们已经开始意识到软件测试不应该仅是事后用来证明软件是对或是不对的,而应该走向前端进行缺陷预防。
5.1988年至今,预防为主(Prevention Oriented)
20世纪90年代,软件测试开始迅猛发展。软件测试工具开始流行,极大地提升了软件测试的能力;同时自动化测试技术也开始迅猛发展,各种对软件测试系统的评估方法也开始被提出。例如,1996年提出的“测试成熟度模型”(TMM)和“测试能力成熟度模型”(TCMM)等,软件测试体系日益成熟完善。
2002年,Rick和Stefan在《系统的软件测试》一书中对软件测试做了进一步定义:“测试是为了度量和提高被测软件的质量,对测试软件进行工程设计、实施和维护的整个生命周期过程。”这一定义进一步丰富了软件测试的内容,扩展了软件测试的外延。
软件测试的发展史其实就是一部探索“什么是软件测试,我们该如何理解它、发展它”的历史,软件测试从软件开发中的“调试”到“证明软件工作是对的”,再到“证明软件工作存在错误”和“预防”,早已不再蹒跚学步、懵懂无知。软件测试已经逐渐形成了自己的一套体系,拥有成熟的评价方法。随着软件开发的发展,敏捷、迭代等各种软件开发实践也为软件测试带来很多新的挑战,产生了更多软件测试的新技术和新理念。