软件测试是伴随着软件的产生而产生的。早期的软件开发过程中,测试的含义比较狭窄,将测试等同于“调试”,目的是纠正软件中已经知道的故障,常常由开发人员自己完成这部分的工作。对测试的投入极少,测试介入也晚,常常是等到形成代码,产品已经基本完成时才进行测试。
直到1957年,软件测试才开始与调试区别开来,作为一种发现软件缺陷的活动。由于一直存在着“为了让我们看到产品在工作,就得将测试工作往后推一点”的思想,测试仍然是后于开发的活动。潜意识里,我们的目的是使自己确信产品能工作。
到了20世纪70年代,尽管对“软件工程“的真正含义还缺乏共识,但这一词条已经频繁出现。1972年,在美国北卡罗来纳大学举行了首届软件测试正式会议。1979年,Glenford Myers的《软件测试艺术》(The Art of Software Testing)中作出了当时最好的软件测试定义:“测试是为发现错误而执行的一个程序或者系统的过程。”
直到上世纪80年代早期,“质量”的号角才开始吹响。软件测试定义发生了改变,测试不单纯是一个发现错误的过程,而且包含软件质量评价的内容。软件开发人员和测试人员开始坐在一起探讨软件工程和测试问题。制定了各类标准,包括IEEE(Institute of Electrical and Electronic Engineers)标准、美国ANSI(American National Standard Institute)标准以及ISO(International Standard Organization)国际标准。1983年,Bill Hetzel在《软件测试完全指南》(Complete Guide of Software Testing)一书中指出:“测试是以评价一个程序或者系统属性为目标的任何一种活动。测试是对软件质量的度量。”Myers和Hetzel的定义至今仍被引用。
上世纪90年代,测试工具终于盛行起来。人们普遍意识到,工具不仅仅是有用的,而且要对今天的软件系统进行充分的测试,工具是必不可少的。
到了2002年,Rick和Stefan在《系统的软件测试》(Systematic Software Testing)中对软件测试做了进一步定义:“测试是为了度量和提高被测软件的质量,对测试件进行工程设计、实施和维护的整个生命周期过程。”这些经典论著对软件测试研究的理论化和体系化产生了巨大的影响。
近20年来,随着计算机和软件技术的飞速发展,软件测试技术研究也取得了很大的突破。测试专家总结了很好的测试模型,比如著名的V模型、W模型等,在测试过程改进方面提出了TMM(Testing Maturity Model)的概念,在单元测试、自动化测试、负载压力测试以及测试管理等方面涌现了大量优秀的软件测试工具。
虽然软件测试技术的发展很快,但是其发展速度仍落后于软件开发技术的发展速度,使得软件测试在今天面临着很大的挑战,主要体现在以下几个方面:
1.软件在国防现代化、社会信息化和国民经济信息化的作用越来越重要,由此产生的测试任务越来越繁重。
2.软件规模越来越大,功能越来越复杂,如何进行充分而有效的测试成为难题。
3.面向对象的开发技术越来越普及,但是面向对象的测试技术却刚刚起步。
4.对于分布式系统整体性能还不能进行很好的测试。
5.对于实时系统来说,缺乏有效的测试手段。
6.随着安全问题的日益突出,信息系统的安全性如何进行有效的测试与评估,成为世界性的难题。