1.3.2 两个软件质量模型
1.ISO/IEC 9126标准下的软件质量模型
ISO/IEC 9126标准描述了关于软件产品质量的两部分模型:内部质量和外部质量,使用质量。
(1)内部质量和外部质量
1)内部质量和外部质量的定义。
内部质量(internal quality)是指产品属性的总和,决定了产品在特定条件下使用时,满足明示和隐含需求的能力。内部质量是基于内部视角的软件产品特性的总体。内部质量针对内部质量需求而被测量和评价。
外部质量(external quality)是指产品在特定条件下使用时,满足明示和隐含需求的程度。外部质量是基于外部视角的软件产品特性的总体,即当软件执行时,通常是在模拟环境中用模拟数据测试时,使用外部度量所测量和评价的质量。在测试期间,大多数故障都应该可以被发现和消除。然而,在测试后仍会存在一些故障。这是因为难以纠正软件的体系结构或软件其他的基础设计方面的错误,所以基础设计在整个测试中通常保持不变。估计的(或预测的)外部质量是在了解内部质量的基础上,对每个开发阶段的最终软件产品的各个质量特性加以估计或预测的质量。
2)内部质量和外部质量的质量模型。
质量模型(quality model)是指一组特性及特性之间的关系,它提供规定质量需求和评价质量的基础。软件产品质量宜使用已定义的质量模型来评价。质量模型旨在为软件产品和中间产品设置质量目标时使用。软件产品质量应该按层次分解为一个由特性和子特性所组成的质量模型,该模型可作为与质量相关的问题清单来使用。
根据ISO 9126系列标准,内部质量是指在特定的使用条件下产品满足明示的和隐含的需求所明确具备能力的全部固有特性,体现了产品的内在质量,而外部质量是指在特定的使用条件下产品能够满足明示的和隐含的需求的程度,是产品质量的外部(实际)表现。从上述定义可知,外部质量和内部质量有着相同要求,前者是外部表现,后者是内在特性,所以外部质量和内部质量的模型(质量属性、度量指标)基本是一致的。外部和内部质量的质量模型将软件质量属性划分为六个特性(功能性、可靠性、易用性、效率、可维护性和可移植性),并进一步细分为若干子特性。这些子特性均可用内部或者外部度量来测量。外部和内部质量的质量模型如图1-2所示。
图1-2 外部和内部质量的质量模型
为了帮助大家理解外部和内部质量,下面进行举例说明。
例如当下十分流行的短视频App,如果不能准确地提供人脸动态识别、体感识别功能,那么就丧失了其功能性,如果不能在短短几十秒时间内抓住用户的碎片化时间,就缺乏了易用性。
再例如设计一个集合类时,应该确保集合基本的增、删、改功能操作正确。设计者可以在集合的删除操作中抛出“NotSupportedException”或断言错误以表明该集合是一个只增集合。但是,设计者不能通过忽略删除方法的实现来达到同样的目的。一个逻辑上不严整的设计往往会对将来使用该模块的开发人员造成误导,如果开发人员没有经过测试而直接使用该设计,最终将会在可维护性方面出现问题。
上述所提到的质量模型,均分为三个层次,分别对应质量特性、子特性和度量,目前被国内和国际标准采用,这对应到软件质量评价阶段就是:
高层:软件质量需求评价准则(Software Quality Requirement Code,SQRC)。软件质量需求评价准则推荐了最高级的六个质量特性,分别是:功能性、可靠性、易用性、效率、可维护性和可移植性。
中层:软件质量设计评价准则(Software Quality Design Code,SQDC)。软件质量设计评价准则推荐了:合理性、准确性、交互性、安全性、其他功能性合规;成熟性、容错性、可恢复性、其他可靠性合规;易理解性、易学性、易操作性、吸引性、其他易用性合规;时间响应、资源利用率、其他效率合规性;可分析性、可变更性、稳定性、可测试性、其他维护性合规;适应性、可安装性、兼容性、可替换性、其他移植性合规。
低层:软件质量度量评价准则(Software Quality Measurement Code,SQMC)。软件质量度量评价准则并未明确给出相关推荐度量,各实际使用单位可视实际情况而定。
三层准则的关系如图1-3所示。
图1-3 三层准则的关系
(2)使用质量
从ISO/IEC 9126标准看,软件测试还要关注使用质量。
1)使用质量的定义。
使用质量是软件产品使指定用户在特定的使用环境下达到满足有效性、生产率、安全性及满意度要求的特定目标的能力。(注:“用户”指的是任何类型的预期用户,包括操作者和维护者,而他们的需求可能是不同的。)
2)使用质量的质量模型。
使用质量的质量模型如图1-4所示。使用质量的属性分类为五个特性:有效性、效率、满意度、远离风险和语境覆盖。在使用质量中,不仅包含基本的功能和非功能特性,如功能(有效、有用)、效率(性能)、安全性等,还要求用户在使用软件产品的过程中获得愉悦,对产品信任,产品也不应该给用户带来经济、健康和环境等风险,并能处理好业务的上下文关系,覆盖完整的业务领域。
图1-4 使用质量的质量模型
为了帮助大家理解使用质量,下面举例进行说明。例如某些手机软件的自动下载功能,在未判断用户手机连接的是Wi-Fi还是3G/4G网络的情况下,自动下载一些视频/音频,此时若用户没有连接Wi-Fi,则会耗费大量流量,可能超出流量套餐额度,给用户带来不必要的经济损失。从功能上看,自动下载是一个不错的功能,但有很大的经济风险,在使用质量上有明显缺陷。再以健康风险为例,市面上有许多游戏产品,游戏越吸引人、越让用户爱不释手,说明产品越好,但同时,游戏需设置防玩家沉迷的功能或提示,尽量减少游戏软件对青少年健康的负面影响。
(3)内部质量、外部质量和使用质量的关系
软件的内部质量、外部质量和使用质量是从不同的视角在软件生命周期的不同阶段对于软件产品质量和相关度量的一种人为约定的描述,如图1-5所示。使用质量是基于用户观点的质量。使用质量的获得依赖于取得必需的外部质量,而外部质量的获得则依赖于取得必需的内部质量。例如,在生命周期开始阶段作为质量需求而规定的质量大多数是从外部和用户的角度出发的,与设计质量这样的内部质量不同,后者大多是从内部和开发者的角度来看问题的。
图1-5 软件生命周期中的质量
内部质量影响外部质量、外部质量影响使用质量,而使用质量依赖外部质量、外部质量依赖内部质量,各部分之间存在如图1-6所示的关系。
图1-6 内部质量、外部质量、使用质量之间的关系
2.ISO/IEC 25000标准下的软件质量模型
根据目前国际标准ISO/IEC 25000,软件质量分为使用质量和产品质量(将ISO 9126系列标准中的内部质量、外部质量合并为产品质量,使用质量部分未发生改变)。
(1)产品质量的定义
ISO/IEC 25000系列标准中将产品质量定义为在特定的使用条件下产品满足明示的和隐含的需求所明确具备能力的全部固有特性(内在特性),体现了产品满足要求的程度(外部表现),是产品的质量属性。
(2)产品质量模型
由与软件静态特性和计算机系统动态特性相关的八个特性(进一步细分为子特性)组成的产品质量模型,每个特性由一组相关的子特性组成。产品质量模型如图1-7所示。
图1-7 产品质量的质量模型
为了帮助大家理解产品质量,下面举例进行说明。以常见的导航软件为例,如果不能够为用户提供符合精度的正确导航结果,那么该导航软件的正确性存在缺陷;如果产生导航结果的时间超出了用户可以接受的范围,那么其时间行为特性存在缺陷;如果用户很难掌握该软件的使用方法,那么其易学性和易操作性都存在缺陷。对于维护软件的二级用户来说,如果难以评估、修改某个部件对软件整体的影响,或者难以诊断故障的原因,那么其易分析性是不好的。
3.质量特性、子特性和度量
在模型中,软件产品质量属性的总体分类为特性和子特性的一个层次结构。该结构的最高层由质量特性所组成,最低层则由若干软件质量属性所组成。这个层次结构并不完美,因为一些属性可能对多个子特性起作用,一个属性可能影响一个或更多的特性,而一个特性也可能受到多个属性的影响,已经发现某些内部属性的级别对一些外部属性的级别产生影响,所以大多数特性既有外部属性也有内部属性。例如,可靠性可以通过观察软件在试用期内一段给定的执行时间中的失效数从外部进行测量,也可以通过审查详细的规格说明和源代码来评估容错性级别而从内部进行测量。内部属性被称为外部属性的指标。质量特性、子特性和属性的具体关系如图1-8所示。
图1-8 质量特性、子特性和属性的关系
例如,在内部和外部质量模型中,安全性这一子特性是指软件产品或系统保护信息和数据的程度,我们评价一个金融领域的软件的质量时,软件必须能够保证不泄露用户的数据,禁止未经允许上传用户数据,直接体现就是软件的加密性,传输数据的过程中通过采用全程加密的手段来保证其安全性。子特性可以通过内部度量或者外部度量来测量。在上述例子中,我们为了获取软件的全程加密属性,可以通过外部度量手段(如干扰攻击、截取数据解密的方式)来测量加密属性,也可以采用内部度量手段在编码阶段就进行全程加密判断来测量加密属性。
度量是指定义的测量方法和测量标度,通过度量得到产品的属性,进而衡量产品是否符合某个子特性。
通过外部的测量得到内部属性并不是很可靠,在外部来测量一个给定的内部属性一般是靠经验决定的,并且依赖于该软件使用的特定环境。
同样地,外部属性(例如适合性、准确性、容错性或时间特性)将影响我们观测的质量情况。使用质量中的失效(例如用户不能完成任务)可以追溯到外部质量属性(例如适合性或易操作性)和必须改变的相关内部属性。