为了能够在产品发布前,对产品质量能够做出比较准确的判断,需要清楚质量的属性,这就需要建立质量模型,如McCall质量模型、Boehm 模型、ISO 9126 模型等。根据目前国际标准ISO/IEC TR 9126(2003)或ISO/IEC 25000(2010)系列标准或国内标准,软件质量分为内部质量、外部质量、使用质量,其关系如图2-3所示,内部质量影响外部质量、外部质量影响使用质量,而使用质量依赖外部质量、外部质量依赖内部质量。
图1 内部质量、外部质量、使用质量之间的关系
1. 内部质量和外部质量
根据IEEE Standard 24765-2010,内部质量是指在特定的使用条件下产品满足明示的和隐含的需求所明确具备能力的全部固有特性,体现了产品的内在质量,而外部质量在特定的使用条件下产品能够满足明示的和隐含的需求的程度,是产品质量的外部(实际)表现。从上述定义,外部质量和内部质量有着相同要求,只是前者是外部表现,后者是内在特性,所以外部质量和内部质量的模型(质量属性、度量指标)基本是一致的,包括功能性、可靠性、易用性、效率、可维护性和可移植性,如图1-5所示。系统安全性(security)被看作功能的一部分,而另一个安全性(safety)则与可靠性、可维护性、功能性等有更紧密的关系。其中内部质量需要考虑内部技术度量,包括代码规模、代码复杂度和开发规范的度量,如代码耦合性、数据耦合性、模块化、变量命名、程序规范性等。
图2 内部/外部质量模型
下面将功能性、可靠性、易用性、效率、可维护性和可移植性等进行简要介绍,以帮助大家理解为什么要进行功能性测试还要进行非功能性测试,以及本书的各章为什么进行如此布局。
i. 功能性(functionality):软件所实现的功能达到它的设计规范和满足用户需求的程度。
ii. 可靠性(reliability):在规定的时间和条件下,软件所能维持其正常的功能操作、性能水平的程度/概率,如用MTTF(mean time to failure,平均失效前时间)或MTBF(mean time Between failures,平均故障间隔时间)来衡量可靠性。
iii. 易用性(usability):对于一个软件,用户学习、操作、准备输入和理解输出所作努力的程度,如安装简单方便、容易使用、界面友好,并能适用于不同特点的用户,包括对残疾人、有缺陷的人能提供产品使用的有效途径或手段。
iv. 效率(efficiency):在指定条件下,软件对操作的响应速度以及实现某种功能有效利用计算机资源(包括内存大小、CPU占用时间等)的程度。
v. 可维护性(maintainability):当一个软件投入运行应用后,需求发生变化、环境改变或软件发生错误时,进行相应修改所做努力的程度。
vi. 可移植性(portability)软件从一个计算机系统或环境移植到另一个系统或环境的容易程度,或者是一个系统和外部条件共同工作的容易程度。
2. 使用质量
从ISO/IEC 25000标准看,软件测试还要关注使用质量,如图1-6所示。在使用质量中,不仅包含基本的功能和非功能特性,如功能(有效、有用)、效率(性能)、安全性等,还要求用户在使用软件产品过程中获得愉悦,对产品信任,产品也不应该给用户带来经济、健康和环境等风险,并能处理好业务的上下文关系,覆盖完整的业务领域。
图3 使用质量的属性描述
为了帮助大家理解使用质量,举一个我自己亲身经历的例子,当我在手机上安装了一个英语学习软件后,趁我讲课时,也没有判断我手机连接的是Wi-Fi还是3G/4G,它自动下载该款软件用到的多个语音库(如新概念英语、六级英语等),造成我的流量大大超过套餐额度,带来额外的300元流量费。从功能上看,自动下载是一个不错的功能,但有很大的经济风险,在使用质量上有明显缺陷。