对于一个成熟的软件产业来说,软件产品的质量至观重要。人们设定软件产品的质量目标就是要找到用户的质量需求与这些质量特性的相关性,并将其转化为开发过程中可度量的技术指标或能力指标,作为质量控制的依据。
随着社会上软件产品应用的日益普及,市场对软件产品质量的要求会不断提高,致使软件测试的地位变得越来越来重要了。软件质量是指软件产品中能满足给定需求的各种特性的总和。这些特性称做质量特性,ISO/IEC
9126中规定了软件的6个质量特性(如图1所示),即功能性(functionality)、可靠性(reliability)、易用性(usability)、效率(efficiency)、维护性(maintainability)和可移植性(portability),每个特性包含若干子特性。人们设定产品的质量目标就是要找到用户的质量需求与这些质量特性的相关性,并将其转化为开发过程中可度量的技术指标或能力指标,作为质量控制的依据。
图1 ISO/IEC 9126的质量模型
不容忽视的软件测试
软件测试是从大量的测试用例中选择有限的测试用例,发现软件中的大部分缺陷的一种技术。它是目前用来验证软件是否能够完成所期望的功能的唯一有效方法。软件测试通常要在不同层次上执行,大体上划分为三大阶段:单元测试、集成测试、系统测试。
单元测试 用于验独立软件模块的功能与《详细设计说明书》的符合程度。软件模块可以是独立子程序,也可以是由紧密相关的数个单元组成的较大构件。单元测试一般需要对被测代码进行访问和借助测试工具的支持,并且可能需要被测代码编程人员的介入。
集成测试 在单元测试的基础上,检验系统各模块间的交互性与《概要设计说明书》的符合程度。通常采用自顶向下(需要提供桩模块)或自底向上(不需要提供桩模块)的集成方法,用于传统的、分级的结构化软件系统。现代的集成测试策略更多是结构驱动的,这意味着对软件模块或子系统的集成是基于确定的功能线程,因此集成测试是一个连续活动,在每一阶段测试人员必须抽象出低一级的情况并集中于正在处理的这一级的状况。
系统测试 检验整个系统是否满足《需求规格说明书》所提出的所有需求。它需要将系统与非功能性系统需求进行比较,非功能性系统需求指系统的安全性、速率、精确性、可靠性等。系统与其它软件、应用程序、硬件设备或操作环境的外部接口评估也在系统测试中进行。系统测试的类别有:功能测试;性能测试(包括负载测试、压力测试等);外部接口测试;人机界面测试;安全性测试;可靠性测试(包括强度测试、恢复测试等)。
作好测试工作,首先可以验证软件是否满足软件科研任务书、需求规格说明书和软件设计所规定的技术要求;其次,通过测试,人们可以尽早发现软件缺陷,并确保其得以修复;最后,完善的测试为软件可靠性与安全性评估提供了重要依据。
科学测试:从质量开始
针对软件产品的6个质量特性,笔者结合具体测试工作中的体会,分别论述软件测试的必要性和重要性。
1.功能性(functionality) 在指定条件下,软件产品应满足明确或隐含需求功能的能力。
ISO/IEC 9126质量模型在该质量特性下,进一步定义了5个子特性,分别为:适合性(suitability);准确性(accuracy);互操作性、互用性(interoperability);依从性(compliance);安全性(security)。
软件的功能性主要应该考察三个方面。首先该软件产品的功能是否满足需求;其次现有功能是否达到设计要求;最后,所有功能是否实现正常。粗看起来,这三个要求比较简单,但是要实现起来却有相当的难度。这关系到庞大的市场需求调查、用户群定位和需求分析。
软件需求分析是系统功能和设计之间的桥梁,它是对系统功能的进一步细化,以此作为设计和测试的依据。
软件开发和使用的最终目的是为了满足用户需求,因此以必须以用户需求作为评判软件质量的标准,并以此判别软件缺陷(Software
Bug)的定义:一是软件未达到用户需求的功能和性能;二是软件出现了用户需求不能容忍的错误;三是软件功能超出了用户需求的范围;四是软件未达到用户需求未提出但应该达到的目标;五是软件的使用未能符合用户的习惯和工作环境,难以理解、不易使用、运行速度缓慢。
必须指出的是,在软件开发的生命周期中,由于软件需求规格说明书的不完整性、经常变更性,设计方案的不足,编程人员知识水平、工作经验的不同等因素都会造成软件各个阶段的缺陷(如图2)。因此,软件测试应该贯穿于整个软件开发周期中的各个阶段,只有这样才能确保周期中的每个阶段都经得起考验。
图2 软件工程项目的生存周期
在软件测试过程中,如果运行测试用例的结果与该用例的预期结果不符,则需要先判定缺陷的严重等级。缺陷分级定义如下:
第一级,不能满足系统需求,致使系统不能正常工作。如:程序非正常退出、程序挂起、死机、登录不成功等。
第二级:严重影响系统要求或基本功能的实现,与需求规格说明书、设计规格说明书、操作说明书不相符,并且不存在变通的解决办法。
第三级,严重影响系统要求或基本功能的实现,与需求规格说明书、设计规格说明书、操作说明书不相符,但却存在变通的解决办法(重新安装或重新启动该软件不属于变通的解决办法)。
第四级,不影响满足系统要求或基本功能的实现,但操作不方便、用词不当、窗体控件没有完全显示等其它问题。
当该缺陷的严重等级为第二级以上(包括第二级)时,则此项测试为不通过,并记录实际输出结果。系统测试所产生的测试报告就是测试人员执行测试用例的结果汇总。
2.可靠性(reliability) 在规定的一段时间和条件下,软件产品维持规定的性能水平的能力。
ISO/IEC 9126质量模型在该质量特性下,进一步定义了3个子特性,分别为:成熟性(maturity);容错性(fault
tolerance);易恢复性(recoverability)。
在进行软件系统的可靠性测试时,测试人员应主要考察以下四个方面:屏蔽用户操作错误,当程序认为输入错误或输入未经定义时,应视为不允许的输入,不加处理;日志管理,提供操作日志查询和管理的功能;不会导致系统崩溃、异常退出和丢失数据的情况,包括由产品描述中列出的其他程序或用户造成的错误输入,以及用户文档中明确规定的非法指令。
3.易用性(usability) 在指定条件使用时,软件产品被理解、学习、使用和吸引用户的能力。
ISO/IEC 9126质量模型在该质量特性下,进一步定义了3个子特性,分别为:易理解性(understandability);易学性(learnability);易操作性(operability)。
在易理解性方面要考虑:
a)程序的问题、消息和结果是易理解的(如,术语、图形表示、背景信息、帮助信息等);b)出错提示消息必须准确(如解释错误产生的原因和纠正的详细信息等)。
在易浏览性方面要考虑:
a)程序以易观察易读的形式向用户提供信息(如,确认、程序询问、警告、出错消息等);
b)屏幕输入格式,报表和其他输入、输出设计清晰和易于浏览。
在可操作性方面要考虑:对具有严重后果的功能执行是可逆的,或者程序给出该后果的明显警告,并且在执行该命令前要求确认。
4.效率(efficiency) 在规定条件下,相对于所用资源数量,软件产品提供适当性能的能力。
ISO/IEC 9126质量模型在该质量特性下,进一步定义了2个子特性,分别为:时间特性;资源特性(resource
behaviour)。
系统的性能覆盖面非常广泛,对一个软件系统而言,包括执行效率、资源占用、稳定性、安全性、兼容性、可扩展性、可靠性等。在进行软件系统的性能测试时,我们主要考察以下2个方面:
·负载测试(Load Testing):确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统组成部分的相应输出项(如,通过量、响应时间、CPU占用率、内存使用等)。
·压力测试(Stress Testing):通过确定一个系统的瓶颈或者不能接收的性能点,获得系统能提供的最大服务级别。
5.维护性(maintainability) 软件产品可被修改的能力,包括为了适应环境的变化和需求、功能规格说明的变化而对软件进行的修改、改进或更改。
ISO/IEC 9126质量模型在该质量特性下,进一步定义了4个子特性,分别为:易分析性(analysability);易改变性(changeability);稳定性(stability);易测试性。
在进行软件系统的维护性测试时,我们主要考察以下几个方面:
·易分析性:对于程序异常可以提供错误原因提示信息。
·稳定性:对于局部错误的修改不影响整体程序的运行。
·易测试性:需求变更后的各项功能点可通过测试用例进行测试。
6.可移植性(portability) 软件产品从一种环境迁移到另外一种环境的能力。
ISO/IEC 9126质量模型在该质量特性下,进一步定义了4个子特性,分别为:适应性(adaptability);易安装性(installability);遵循性(conformance);易替换性(replaceability)。
在进行软件系统的可移植性测试时,我们主要考察以下几个方面:
·适应性:系统软件无须为适应不同环境采用特殊方法或手段,即可在指定环境中正常安装、运行。
·易安装性:依据用户安装手册,在指定环境下能成功安装系统软件。
·遵循性:系统软件可以遵循与可移植性有关的标准或约定。
·易替换性:系统软件在不影响原有系统正常运行的情况下,能够正确替换旧系统。
必须指出的是,软件测试是提高软件产品质量的必要条件而非充分条件,它是提高软件产品质量最直接、快捷的手段,但绝不是一种根本手段。
|