软件系统属性包括功能属性和质量属性,软件架构重点关注的是质量属性。架构的基本需求是在满足功能属性的前提下,关注软件系统质量属性。为了精确、定量地表达系统的质量属性,通常会采用质量属性场景的方式进行描述。
概念
软件系统的质量就是“软件系统与明确地和隐含地定义的需求相一致的程度”。
更具体地说,软件系统质量是软件与明确地叙述的功能和性能需求文档 中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。
根据 GB/T 16260.1 定义,从管理角度对软件系统质量进行度量,可将影响软件质量 的主要因素划分为 6 种维度特性:功能性、可靠性、易用性、效率、维护性与可移植性 。
功能性包括适合性、准确性、互操作性、依从性、安全性 ; 可靠性包括容错性、易恢复性、成熟性 ; 易用性包括易学性、易理解性、易操作性 ; 效率包括资源特性和时间特性 ; 维护性包括可测试性、可修改性、稳定性和易分析性 ; 可移植性包括适应性、易安装性、一致性和可替换性 。
软件系统质量属性 (Quality Attribute) 是一个系统的可测量或者可测试的属性 ,用来描述系统满足利益相关者 (Stakeholders) 需求的程度。基于软件系统的生命周期 ,可以将软件系统的质量属性分为开发期质量属性 和运行期质量属性 2个部分。
开发期质量属性
开发期质量属性主要指在软件开发阶段所关注的质量属性,主要包含 6 个方面。 (1)易理解性 :指设计被开发人员理解的难易程度。 (2)可扩展性 :软件因适应新需求或需求变化而增加新功能的能力,也称为灵活性。 (3)可重用性 :指重用软件系统或某一部分的难易程度。 (4)可测试性 :对软件测试以证明其满足需求规范的难易程度。 (5)可维护性 :当需要修改缺陷、增加功能、提高质量属性时,识别修改点并实施修改的难易程度。 (6)可移植性 :将软件系统从一个运行环境转移到另一个不同的运行环境的难易程度。
运行期质量属性
运行期质量属性主要指在软件运行阶段所关注的质量属性,主要包含 7 个方面。 (1)性能 :性能是指软件系统及时提供相应服务的能力,如速度、吞吐量和容量等的要求。 (2)安全性 :指软件系统同时兼顾向合法用户提供服务,以及阻止非授权使用的能力。 (3)可伸缩性 :指当用户数和数据量增加时,软件系统维持高服务质量的能力。例如通过增加服务器来提高能力。 (4)互操作性 :指本软件系统与其他系统交换数据和相互调用服务的难易程度。 (5)可靠性 :软件系统在一定的时间内持续无故障运行的能力。 (6)可用性 :指系统在一定时间内正常工作的时间所占的比例。可用性会受到系统错误,恶意攻击,高负载等问题的影响。 (7)鲁棒性 :是指软件系统在非正常情况(如用户进行了非法操作、相关的软硬件系统发生了故障等)下仍能够正常运行的能力,也称健壮性或容错性。
面向架构评估的质量属性
性能 :指系统的响应能力 ,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件的个数。如响应时间、吞吐量 。 设计策略:优先级队列、增加计算资源、减少计算开销、引人并发机制、采用资源调度等 。可靠性 :是指系统在一段时间内保持正常运行而不发生故障的能力 。它强调了系统的稳定性和可靠性,通常是通过衡量系统在一段时间内发生故障的概率来评估的。一个可靠性高的系统意味着它很少出现故障,用户可以信任它的稳定性 。可靠性有一些指标需要了解。如MTTF(平均故障时间)、MTBF(平均故障间隔时间)、MTTR(平均故障修复时间)。 可靠性通常用平均失效等待时间 (Mean Time To Failure, MTTF) 和平均失效间隔时间 (Mean Time Between Failure, MTBF) 来衡量。在失效率为常数和修复时间很短的情况下, MTTF 和 MTBF几乎相等。可靠性可以分为两个方面:容错、健壮性 。 设计策略:心跳、Ping/Echo、冗余、选举 。可用性 :是指系统在需要的时候可供使用的能力 ,即系统处于可操作状态的时间比例。可用性通常通过计算系统在一定时间内可操作的百分比来评估。一个高可用性的系统意味着它在大部分时间内都是可用的,用户可以随时访间和使用它 。 设计策略:心跳、Ping/Echo、冗余、选举 。安全性 :是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力 。如保密性、完整性、不可抵赖性、可控性。 设计策略:人侵检测、用户认证、用户授权、追踪审计 。可修改性 :指能够快速的以较高的性能价格比对系统进行变更的能力 。通常以某些具体的变更为基准,通过考察这些变更的代价衡量。 设计策略:接口-实现分类、抽象、信息隐藏(是不是感觉有点像结构化开发和面向对象开发的设计原则) 。功能性 :是系统所能完成所期望的工作的能力 。一项任务的完成需要系统中许多或大多数构件的相互协作。可变性(可扩展性) :指体系结构经扩充或变更而成为新体系结构的能力 。这种新体系结构应该符合预先定义的规则,在某些具体方面不同于原有的体系结构。当要将某个体系结构作为一系列相关产品的基础时,可变性是很重要的。互操作性 :作为系统组成部分的软件不是独立存在的,经常与其他系统或自身环境相互作用 。为了支持互操作性,软件体系结构必须为外部可视的功能特性和数据结构提供精心设计的软件入口。程序和用其他编程语言编写的软件系统的交互作用就是互操作性的问题,也影响应用的软件体系结构,易用性 :它关注的是软件系统的用户界面和交互设计,以确保用户能够轻松、高效地使用系统,并感到满意易用性不仅关乎用户界面的外观,还包括用户体验、交互流程和用户学习曲线等方面 。
质量属性场景描述
为了精确描述软件系统的质量属性,通常采用质量属性场景 (Quality Attribute Scenario) 作为描述质量属性的手段。质量属性场景是一个具体的质量属性需求,是利益相关者与系统的交互的简短陈述。
质量属性场景是一种面向特定质量属性的需求。它由六部分组成:
刺激源 (Source): 这是某个生成该刺激的实体(人、计算机系统或者任何其他刺激器)。刺激 (Stimulus): 该刺激是当刺激到达系统时需要考虑的条件。环境 (Environment): 该刺激在某些条件内发生。当激励发生时,系统可能处于过载、运行或者其他情况。制品 (Artifact): 某个制品被激励。这可能是整个系统,也可能是系统的一部分。响应 (Response): 该响应是在激励到达后所采取的行动。响应度量 (Measurement): 当响应发生时,应当能够以某种方式对其进行度量,以对需求进行测试。
质量属性场景主要关注可用性、可修改性、性能、可测试性、易用性和安全性 六类质量属性。