一、质量属性概念
1.质量属性的定义
软件系统属性包括功能属性和质量属性,软件架构重点关注的是质量属性。质量属性是描述软件系统“好坏”的非功能性要求,不关心系统“做什么”(功能性需求),而关注系统“做得怎么样”——例如,系统是否快速、是否安全、是否易于修改等。
在国家标准(GB/T 16260.1)中,将软件质量属性分为六大维度:功能性、可靠性、易用性、效率、维护性、可移植性。
2.开发期质量属性与运行期质量属性
根据软件生命周期的不同阶段,可以将软件系统的质量属性分为开发期质量属性和运行期质量属性。
(一)开发期质量属性
开发期质量属性主要指在软件开发阶段所关注的质量属性,主要包含以下6个方面:
易理解性:设计被开发人员理解的难易程度。
可扩展性:软件因适应新需求或需求变化而增加新功能的能力,也称为灵活性。
可重用性:重用软件系统或某一部分的难易程度。
可测试性:对软件测试以证明其满足需求规范的难易程度。
可维护性:当需要修改缺陷、增加功能、提高质量属性时,识别修改点并实施修改的难易程度。
可移植性:将软件系统从一个运行环境转移到另一个不同的运行环境的难易程度。
(二)运行期质量属性
运行期质量属性主要指在软件运行阶段所关注的质量属性,主要包含以下7个方面:
性能:软件系统及时提供相应服务的能力,如速度、吞吐量和容量等。
安全性:软件系统同时兼顾向合法用户提供服务,以及阻止非授权使用的能力。
可伸缩性:当用户数和数据量增加时,软件系统维持高服务质量的能力。
互操作性:本软件系统与其他系统交换数据和相互调用服务的难易程度。
可靠性:软件系统在一定的时间内持续无故障运行的能力。
可用性:系统在一定时间内正常工作的时间所占的比例。
鲁棒性:软件系统在非正常情况(如用户进行了非法操作、相关的软硬件系统发生了故障等)下仍能够正常运行的能力,也称健壮性或容错性。
二、面向架构评估的质量属性
架构评估过程中,评估人员重点关注的是系统的质量属性。面向架构评估的质量属性主要包括以下8类:
(1)性能
性能是指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理事件的个数。经常用单位时间内所处理事务的数量或系统完成某个事务处理所需的时间来对性能进行定量表示。典型的度量方式包括响应时间、吞吐量、抖动、缺失率等。
(2)可靠性
可靠性是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本能力。可靠性通常用平均失效等待时间(MTTF)和平均失效间隔时间(MTBF)来衡量。可靠性可以分为容错和健壮性两个方面。
(3)可用性
可用性是系统能够正常运行的时间比例。经常用两次故障之间的时间长度或在出现故障时系统能够恢复正常的速度来表示。可用性受到系统错误、恶意攻击、高负载等问题的影响。
(4)安全性
安全性是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。安全性可划分为机密性、完整性、不可否认性及可控性等特性。
(5)可修改性
可修改性是指能够快速地以较高的性价比对系统进行变更的能力。通常以某些具体的变更为基准,通过考查这些变更的代价来衡量可修改性。可修改性包含可维护性、可扩展性、结构重组、可移植性四个方面。
(6)功能性
功能性是系统能完成所期望的工作的能力。一项任务的完成需要系统中许多或大多数构件的相互协作。
(7)可变性
可变性是指架构经扩充或变更而成为新架构的能力。当要将某个架构作为一系列相关产品(例如,软件产品线)的基础时,可变性是很重要的。
(8)互操作性
软件作为系统组成部分不是独立存在的,通常与其他系统或自身环境相互作用。为了支持互操作性,软件架构必须为外部可视的功能特性和数据结构提供精心设计的软件入口。
三、质量属性场景描述
为了精确、定量地表达系统的质量属性,通常会采用质量属性场景的方式进行描述。质量属性场景是一种面向特定质量属性的需求,主要关注可用性、可修改性、性能、可测试性、易用性和安全性等6类质量属性。
1.质量属性场景的六要素
质量属性场景由以下六部分组成:
| 刺激源 | ||
| 刺激 | ||
| 环境 | ||
| 制品 | ||
| 响应 | ||
| 响应度量 |
2.六类质量属性场景要点
(1)可用性质量属性场景
可用性质量属性场景所关注的方面包括:系统故障发生的频率、出现故障时会发生什么情况、允许系统有多长时间非正常运行、什么时候可以安全地出现故障、如何防止故障的发生以及发生故障时要求进行哪种通知。
典型响应度量:系统必须可用的时间间隔、故障修复时间、系统可在降级模式下运行的时间间隔。
(2)可修改性质量属性场景
可修改性质量属性场景主要关注系统在改变功能、质量属性时需要付出的成本和难度,可能发生在系统设计、编译、构建、运行等多种情况和环境下。
典型响应度量:根据所影响元素的数量度量的成本、努力、资金;该修改对其他功能或质量属性所造成影响的程度。
(3)性能质量属性场景
性能质量属性场景主要关注系统的响应速度,可以通过效率、响应时间、吞吐量、负载来客观评价性能的好坏。
典型响应度量:等待时间、期限、吞吐量、抖动、缺失率、数据丢失率。
(4)可测试性质量属性场景
可测试性质量属性场景主要关注系统测试过程中的效率,发现系统缺陷或故障的难易程度。
(5)易用性质量属性场景
易用性质量属性场景主要关注用户在使用系统时的容易程度,包括系统的学习曲线、完成操作的效率、对系统使用过程中的满意程度等。
(6)安全性质量属性场景
安全性质量属性场景主要关注系统在安全性方面的要素,衡量系统在向合法用户提供服务的同时,阻止非授权用户使用的能力。
四、系统架构评估方法
系统架构评估的方法通常分为三类:基于调查问卷或检查表的方式、基于场景的方式、基于度量的方式。其中,基于场景的评估方式是最为常用的方法,它通过分析软件架构对场景的支持程度,从而判断该架构对这一场景所代表的质量需求的满足程度。基于场景的评估方法主要有以下三种:
(1)SAAM(软件架构分析方法)
SAAM是软件架构分析方法的简称,最初用于评估可修改性,后扩展到性能、可靠性等其他质量属性。该方法包括5个步骤:场景开发、架构描述、单个场景评估、场景交互和总体评估。
(2)ATAM(架构权衡分析法)
ATAM是在SAAM基础上发展而来的方法,专注于多个质量属性之间的权衡,是目前应用最广泛的方法之一。ATAM采用效用树对质量属性进行分类和优先级排序,其关注的质量属性包括性能、安全性、可修改性和可用性。
(3)CBAM(成本效益分析法)
CBAM侧重于从经济角度出发,建立软件的成本、收益、风险和进度等方面的经济模型,在ATAM的基础上进一步考虑了成本效益分析。
五、软件架构评估中的关键概念
在软件架构评估过程中,需要关注以下几个重要概念:
敏感点:是指为了实现某一种特定的质量属性,一个或多个构件所具有的特性。敏感点对系统的关键质量属性有重大影响,需要特别关注。
权衡点:是影响多个质量属性的特性,是多个质量属性的敏感点的交集。在做出架构决策时,需要在不同的质量属性间做出权衡。
风险点:指架构设计中潜在的、存在问题的架构决策所带来的隐患,可能导致项目失败或产生严重后果。
非风险点:是指不会带来隐患的架构决策,一般以“XXX要求是可以实现(或接受)的”方式表达。
夜雨聆风