软件测试(第2版)
上QQ阅读APP看书,第一时间看更新

1.4 软件测试学科的发展历程

前面的故事告诉我们,任何一个系统都可能存在故障,计算机系统也不例外。有了计算机软件,就可能存在问题;有了问题,就需要测试,一切看起来都是自然而然地发展起来的。实际上,软件测试的发展历程并不一帆风顺,经历了一些波折。特别是在早期阶段,软件测试得不到重视,测试技术发展比较慢,而在最近20年发展比较快,成为软件业的热门领域之一,也达到了较高的水准。

测试的历史

对于软件测试的发展历史,没有统一的、明确的阶段划分。有一种划分是从测试的基本思想或导向来划分的,分为4个阶段。

1)1957年至1978年,以功能验证为导向,测试是为了证明软件是正确的(正向思维)。

2)1978年至1983年,以破坏性为导向,测试是为了找到软件中的错误(逆向思维)。

3)1983年至1987年,以质量评估为导向,测试是为了提供产品的评估和质量度量。

4)1988年起,以缺陷预防为导向,测试是为了展示软件符合设计要求,发现缺陷,预防缺陷。

这里将软件测试历史分为3个阶段——初期阶段、发展阶段和成熟阶段。

1. 初级阶段(1957~1971年)

在早期,软件规模都很小,复杂程度低,软件开发的过程混乱无序,相当随意,测试的含义比较狭窄,测试被视为“调试”,目的是纠正软件中已经知道的故障。对测试的投入极少,测试介入比较晚,不到代码全部写完,测试都不会开始。这一阶段还没有形成真正意义上的软件测试,也没有出现专业的测试人员。

直到1957年,软件测试才开始与调试区别开来,成为一种发现软件缺陷的活动。但测试通常被认为是对产品进行事后检验,检查软件产品是否能正常工作,所以测试活动始终落后于开发活动,往往被安排在软件生命周期中最后阶段。

这一阶段缺乏有效的测试方法,主要依靠“错误推测(Error Guessing)”来寻找软件中的缺陷。因此,软件交付后,一般会存在比较多的问题,软件产品的质量无法得到保证。

2. 发展阶段(1972~1982年)

这个阶段的标志性事件是1972年在美国北卡罗来纳大学(The University of North Carolina)召开了历史上第一次关于软件测试的正式会议。而此前,软件危机愈演愈重,迫使人们开始思考如何用系统的、工程化的方法来克服软件危机。1968年,北大西洋公约组织(NATO)的计算机科学家在联邦德国召开国际会议,讨论软件危机问题,正式提出了“软件工程”思想。软件开发的方式逐渐由混乱无序的开发过程过渡到结构化的开发过程,在需求分析、设计和测试等活动中普遍采用了结构化方法。软件工程的思想,促进了软件测试的发展,软件测试地位也得到了确认。

这一阶段产生了专业的测试人员,软件测试开始得到重视。软件测试的先驱者建议在软件生命周期的开始阶段就应该根据需求制订测试计划,并进行了大量的研究、探索和实践。人们开始进行主动的测试,努力搜寻软件缺陷,但软件测试的工作主要集中在基本的软件功能验证之上。

3. 成熟阶段(1983年至今)

从20世纪80年代以来,软件业进入了高速发展时期,渗透到工业的各个领域和人们日常生活中的各个方面,软件产业逐渐走向成熟,软件质量越来越重要。同时,软件系统规模越来越大,复杂程度越来越高,对软件开发和测试不断提出了新的挑战。

测试不单纯是一个发现错误的过程,而且包含软件质量评价的内容。软件开发人员和测试人员开始坐在一起探讨软件工程和测试问题。制定软件测试的专业标准。1983年,国际电气和电子工程师协会(IEEE)发布了国际标准Std 829-1983《软件测试文档IEEE标准》(IEEE Standard For Software Test Documentation,其最新版本是Std 829-2008 IEEE Standard for Software and System Test Documentation),这可以看作是一个标志性的事件。软件测试终于有了自己的国际标准,形成一门独立的学科和专业,成为软件工程学科中的一个重要组成部分。这也预示着软件测试走向成熟,从此,软件测试的内涵发生了变化,测试不再停留在发现问题上面,软件测试被看作是软件质量保证(SQA)的重要手段,软件测试完全融于整个软件生命周期中。正如Bill Hetzel在《软件测试完全指南》(Complete Guide of Software Testing)一书中指出:“测试是以评价一个程序或者系统属性为目标的任何一种活动。测试是对软件质量的度量。”

2002年,Rick和Stefan在《系统的软件测试》(Systematic Software Testing)中对软件测试重新进行了定义:“测试是为了度量和提高被测软件的质量,对测试件进行工程设计、实施和维护的整个生命周期过程”,进一步推动了软件测试研究和发展。软件测试的理论、方法和技术也逐渐走向成熟。例如,面向对象的测试方法、面向构件的测试方法和测试驱动开发的思想等相继诞生。软件测试工具也得到了快速发展,无论是商业化的测试工具还是开源的软件测试工具,可以说,应有尽有。