对于一个成熟的软件产业来说,软件产品的质量至观重要。人们设定软件产品的质量目标就是要找到用户的质量需求与这些质量特性的相关性,并将其转化为开发过程中可度量的技术指标或能力指标,作为质量控制的依据。
随着社会上软件产品应用的日益普及,市场对软件产品质量的要求会不断提高,致使软件测试的地位变得越来越来重要了。软件质量是指软件产品中能满足给定需求的各种特性的总和。这些特性称做质量特性,ISO/IEC 9126中规定了软件的6个质量特性(如图1所示),即功能性(functionality)、可靠性(reliability)、易用性(usability)、效率(efficiency)、维护性(maintainability)和可移植性(portability),每个特性包含若干子特性。人们设定产品的质量目标就是要找到用户的质量需求与这些质量特性的相关性,并将其转化为开发过程中可度量的技术指标或能力指标,作为质量控制的依据。
图1 ISO/IEC 9126的质量模型
不容忽视的软件测试
软件测试是从大量的测试用例中选择有限的测试用例,发现软件中的大部分缺陷的一种技术。它是目前用来验证软件是否能够完成所期望的功能的唯一有效方法。软件测试通常要在不同层次上执行,大体上划分为三大阶段:单元测试、集成测试、系统测试。
单元测试用于验独立软件模块的功能与《详细设计说明书》的符合程度。软件模块可以是独立子程序,也可以是由紧密相关的数个单元组成的较大构件。单元测试一般需要对被测代码进行访问和借助测试工具的支持,并且可能需要被测代码编程人员的介入。
集成测试在单元测试的基础上,检验系统各模块间的交互性与《概要设计说明书》的符合程度。通常采用自顶向下(需要提供桩模块)或自底向上(不需要提供桩模块)的集成方法,用于传统的、分级的结构化软件系统。现代的集成测试策略更多是结构驱动的,这意味着对软件模块或子系统的集成是基于确定的功能线程,因此集成测试是一个连续活动,在每一阶段测试人员必须抽象出低一级的情况并集中于正在处理的这一级的状况。
系统测试检验整个系统是否满足《需求规格说明书》所提出的所有需求。它需要将系统与非功能性系统需求进行比较,非功能性系统需求指系统的安全性、速率、精确性、可靠性等。系统与其它软件、应用程序、硬件设备或操作环境的外部接口评估也在系统测试中进行。系统测试的类别有:功能测试;性能测试(包括负载测试、压力测试等);外部接口测试;人机界面测试;安全性测试;可靠性测试(包括强度测试、恢复测试等)。
作好测试工作,首先可以验证软件是否满足软件科研任务书、需求规格说明书和软件设计所规定的技术要求;其次,通过测试,人们可以尽早发现软件缺陷,并确保其得以修复;最后,完善的测试为软件可靠性与安全性评估提供了重要依据。