随着计算机技术的高速发展,软件在生产生活中用的越来越多:从日常的家电业,到航天领域,软件已经“泛滥”得无所不在,计算机病毒、黑客、ERP、电子政务、电子商务等名词也无时无刻不在冲击着我们的生活。

  软件设计的概念现在与以往相比已经截然不同:软件开发开始是个别程序员的“英雄主义”行为,设计成果可以看成一件个人艺术品;而现在软件开发逐渐发展成为一个系统化工程,设计出的软件要充分考虑可用性、通用性、复用性等因素,大部分软件是作为商品来获取利润的。

  1.背景知识

  60年代中期到70年代中期,软件业取得了快速发展,软件开始作为一种产品为人们所广泛使用,这个时刻出现了“软件作坊”。但是软件的数量急剧膨胀,需求也越来越复杂,开发成本也越来越高。随着用户对软件的要求越来越高,市场对软件质量的各个方面,都提出了新的要求,但是软件开发的管理水平却没有跟上,开发成本越来越高,终,软件危机发生了。

  1968年初,北大西洋公约组织的在联邦德国召开的国际学术会议上,计算机科学家们正式提出了“软件危机”(Softwre Crisis)一词,总结了软件危机的如下表现:

  (1) 对进度和成本估计不准确,开发成本远远超出预算,项目进度严重滞后;

  (2) 用户对提交的产品经常会不满意;

  (3) 产品的质量不可靠,缺陷很多,维护成本非常高;

  (4) 软件开发过程的文档匮乏;

  (5) 软件的成本不断提高;

  (6) 软件开发的效率跟不上计算机硬件的发展速度和人们的需求。

  软件危机的原因,一方面是软件的特殊性,与传统制造业的产品不同,它使一种逻辑实体,尽管可以存储,但具体的形态仍然不可见;另一方面是软件开发和维护的方法不规范。

  1968年秋季,北约的科技委员会召集了许多的编程人员、计算机科学家和工业界巨头,商讨如何摆脱软件危机的策略。在这次会议上,首次提出了软件工程(Software Engineering)的概念。软件工程的提出主要包含两方面的内容:软件开发技术和软件项目管理。软件开发技术主要包含软件开发方法学、软件工具和软件工程环境;软件项目管理主要包含软件度量、项目估算、进度控制、人员组织、配置管理、质量管理、软件测试、项目计划等。

  到目前为止,软件工程已经发展了30多年,取得了很大的成。软件测试伴随着软件工程,逐渐发展起来:

  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)中对软件测试做了进一步定义:“测试是为了度量和提高被测软件的质量,对测试件进行工程设计、实施和维护的整个生命周期过程。”这些经典论著对软件测试研究的理论化和体系化产生了巨大的影响。