1.4.6 软件测试发展历程和发展趋势
软件测试是伴随着软件的产生而产生的,有了软件生成和运行就必然有软件测试。在早期的软件开发过程中,测试的含义比较窄,将测试等同于“调试”,目的是纠正软件中已经知道的故障,常常由开发人员自己完成这部分工作,并且对测试的投入很少,测试介入得也晚,常常是等到形成代码、产品已经基本完成时才进行测试。
20世纪50年代后期到20世纪60年代,高级语言相继诞生并得到广泛的应用,程序的复杂性也增强了。但是,由于受硬件系统的制约,软件相对而言仍占次要地位,对软件正确性的把握主要依赖于编程人员的水平。因此,测试理论和方法在这一时期发展比较缓慢。
到了20世纪70年代,随着计算机处理速度的提高和内存、外存容量的快速增加,软件的规模越来越大,软件的复杂性也急剧增加,软件在计算机系统中的重要性越来越高。许多测试理论和测试方法相继诞生,逐渐形成一套体系。1979年,Glenford Myers的《软件测试艺术》可算是软件测试领域的第一本最重要的专著,Myers将软件测试定义为:“测试是为发现错误而执行的一个程序或者系统的过程”。Myers和他的同事们在20世纪70年代的工作对软件测试的发展起到了重要的作用。
到了20世纪80年代初期,IT行业开始大发展,软件趋向大型化、高复杂度,软件的质量越来越重要。1982年,美国卡来纳大学召开了首次软件测试技术会议,这是软件测试、软件质量研究人员与开发人员的第一次聚会,这次会议成为软件测试技术发展的里程碑。1983年,Bill Hetzel在《软件测试完全指南》一书中指出:“测试是以评价一个程序或者系统属性为目标的任何一种活动,测试是对软件质量的度量”,这个定义至今仍被引用。1983年IEEE提出的软件工程术语中给软件测试下的定义是:“使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。”这个定义明确指出软件测试的目的是为了检验软件系统是否满足需求。软件测试再也不是一个一次性的、而且只是开发后期的活动,而是与整个开发流程融为一体。软件测试已成为一个专业,需要运用专门的方法和手段,由专门人才和专家来承担。
进入20世纪90年代,软件行业开始迅猛发展,软件的规模变得非常大,在一些大型软件开发过程中,测试活动需要花费大量的时间和成本,而当时测试的手段几乎完全都是手工测试,测试的效率非常低;并且随着软件复杂度的提高,出现了很多通过手工方式无法完成测试的情况,于是,很多测试实践者开始尝试开发一些测试工具来支持测试,辅助测试人员完成某一类型或某一领域内的测试工作,测试工具开始盛行起来。人们普遍意识到测试工具不仅是有用的,而且要对今天的软件系统进行充分的测试,测试工具是必不可少的,测试工具的选择和应用也越来越受到重视。测试工具的发展,大大提高了软件测试的自动化程度。到了2002年,Rich和Stefan在《系统的软件测试》一书中对软件测试做了进一步定义:“测试是为了度量和提高被测软件的质量,对测试软件进行工程设计、实施和维护的整个生命周期过程”。这些经典论著对软件测试研究的理论化和体系化产生了巨大的影响。
近30年来,随着计算机和软件技术的飞速发展,对软件测试技术的研究也取得了很大突破。1982年在美国卡来纳大学召开了首次软件测试技术会议之后,该学术会议每2年召开一次。此外,国际上还有软件可靠性会议,从会议的规模以及论文的数量和质量上看,从事软件测试的人员在大幅度增加,对软件测试技术的研究也越来越深入。
可以预测,在未来的时间里,软件测试技术与软件测试行业将得到更快的发展,软件测试理论和技术将更加完善,测试效率将逐渐提高,更实用的软件测试工具将大量出现,测试工程师将得到充分的尊重,设置独立的软件测试部门将成为越来越多的软件公司的共识。但是,随着软件在社会各领域中的作用越来越重要,测试任务越来越繁重,软件规模越来越大,功能越来越复杂,如何进行充分而有效的测试仍然是软件工程领域需要积极探索的问题。而且随着安全问题的日益突出,如何对信息系统的安全性进行有效的测试与评估,也将成为亟待解决的难题。