6.3.1 软件测试的定义
软件测试(Software Testing)是软件工程过程的一个重要阶段,在软件投入运行前,对软件需求分析、设计和编码各阶段产品的最终检查,是为了保证软件开发产品的正确性、完全性和一致性,从而进行检测错误和修正错误的过程。软件开发的目的是开发出满足用户需求的高质量、高性能的软件产品,而软件测试以检查软件产品内容和功能特性为核心,是软件质量保证的关键步骤,也是成功实现软件开发目标的重要保障。可以说,软件测试的过程就是发现并改正软件缺陷的过程。
1983年,Bill Hetzel在IEEE软件工程标准术语中提出的软件测试文档标准(IEEE Standard for Software Test Document)中,对软件测试下了一个标准的定义:“使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求,或是弄清预期结果与实际结果之间的差别。”这就非常明确地提出了软件测试以检验是否满足需求为目标,得到了国际标准的采纳。在1990年颁布的软件工程标准术语集中沿用了这一定义,它非常明确地提出了软件测试是以检验软件是否满足需求为目标,包含两个方面的含义。
(1)软件是否满足规定的需求。
(2)软件是否有差别。如果有差别,说明设计或实现过程中存在故障,自然不满足规定的需求。
近年来,也有学者从软件测试的不同阶段定义软件测试,如图6.1所示。

图6.1 软件测试的三个阶段(https://www.daowen.com)
从图6.1可以看出,软件测试历经了三个主要阶段。
第一阶段,软件测试是寻找产品中的Bug。Bug的定义很广泛,在软件使用过程中所出现的任何一个可疑问题,或者导致软件不能符合设计要求或满足消费者需要的问题都是Bug,即使这个Bug在实践中是可行的。
第二阶段,软件测试是对软件质量的度量。
第三阶段,软件测试是为了度量和提高被测试软件的质量,对软件测试进行设计、使用和维护的过程。软件测试过程中所使用的软件测试案例、软件测试脚本等都称为软件测试件,使用软件测试去度量和提高被测试软件的质量。
目前,在中国大部分软件企业,尤其是中小型的软件企业,软件测试主要用来寻找软件中的Bug,所以软件测试基本停留在第一阶段。一些公司可能使用软件测试案例和软件测试脚本等,但并不完全依据软件测试案例进行软件测试。目前软件测试案例等工作更多地成为一种形式上的产物,因此,实际的软件测试工作多处于第一、二阶段之间。
软件测试贯穿于软件生存周期的全过程。软件交付后,软件测试只是从软件测试人员移到用户,用户每次使用程序都是一次软件测试,软件测试是一门技术,是一个从实践到理论再由理论到实践循环往复的过程,是一门包括编程方法、模型设计、统计方法、预测等多领域的实践性很强的综合学科。不同系统、不同环境、不同对象所关心的侧重点不同,采用的软件测试方法自然随着具体系统而设定。