接前一篇文章:软考 系统架构设计师系列知识点之软件质量属性(1)
这个十一注定是一个不能放松、保持“紧”的十一。由于报名了全国计算机技术与软件专业技术资格(水平)考试,11月4号就要考试,因此8天长假绝不能荒废,必须要好好利用起来。现在将各个核心知识点一一进行提炼并做记录。
所属章节:
第8章. 系统质量属性与架构评估
第2节. 面向架构评估的质量属性
2. 面向架构评估的质量属性
为了评价一个软件系统、特别是软件系统的架构,需要进行架构评估。在架构评估过程中,评估人员所关注的是系统的质量属性。评估方法所普遍关注的质量属性有以下几种:
(1)性能
性能(Performance)是指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件的个数。经常用单位时间内所处理事物的数量或系统完成某个事务处理所需的时间来对性能进行定量表示。性能测试经常要使用基准测试程序。
(2)可靠性
可靠性(Reliability)是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本能力。可靠性是最重要的软件特性,通常用来衡量在规定的条件和时间内,软件完成规定功能的能力。可靠性通常用平均失效等待时间(Mean Time To Failure,MTTF)和平均时效时间间隔(Mean Time Between Failure,MTBF)来衡量。在失效率为常数和修复时间很短的情况下,MTTF和MTBF几乎相等。
可靠性可以分为以下两个方面。
1)容错
容错的目的是在错误发生时确保系统正确的行为,并进行内部“修复”。例如,在一个分布式软件系统中失去了一个与远程构件的连接,接下来恢复了连接。在修复这样的错误之后,软件系统可以重新或重复执行进程间的操作,直到错误再次发生。
2)健壮性
这里是指保护应用程序不受错误使用和错误输入的影响,在发生意外错误事件时确保应用系统处于预先定义好的状态。
值得注意的是,和容错相比,健壮性并不是说在错误发生时软件可以继续运行,它只保证软件按照某种事先定义好的方式终止执行。
(3)可用性
可用性(Availability)是系统能够正常运行的时间比例。经常用两次故障之间的时间长度或在出现故障时系统能够恢复正常的速度来表示。
(4)安全性
安全性(Security)是指系统在向合法用户提供服务的同时,能够阻止非授权用户使用的企图或拒绝服务的能力。安全性可根据系统可能受到的安全威胁类型来分类。安全性又可划分为机密性、完整性、不可否认性及可控性等特性。
1)机密性
机密性保证信息不泄露给非授权的用户、实体或过程。
2)完成性
完整性保证信息的完整和准确,放置信息被非法修改。
3)不可否认性
不可否认性是指信息交换的双方不能否认其在交换过程中发送信息或接收信息的行为。
4)可控性
可控性保证对信息的传播及内容具有控制的能力,防止为非法者所用。
(5)可修改性
可修改性(Modifiability)是指能够快速地以较高的性价比对系统进行变更的能力。通常以某些具体的变更为基准,通过考查这些变更的代价来衡量可修改性。可修改性包含以下4个方面。
1)可维护性
可维护性(Maintainability)主要体现在问题的修复上,在错误发生后“修复”软件系统。可维护性好的软件架构往往能做局部性的修改并能使得对其它构件的负面影响最小化。
2)可扩展性
可扩展性(Extendbility)关注的是使用新特性来扩展软件系统,以及使用改进版本方式替换构件,并删除不需要或不必要的特性和构件。为了实现可扩展性,软件系统需要松散耦合的构件。其目标是实现一种架构,能使开发人员在不影响构件客户的情况下替换构件。支持把新构件集成到现有的架构中也是必要的。
3)结构重组
这一点处理的是重新组织软件系统的构件以及构件间的关系,例如通过将构件移动到一个不同的子系统而改变它的位置。为了支持结构重组,软件系统需要精心设计构件之间的关系。理想情况下,它们允许开发人员在不影响实现的主体部分的情况下灵活地配置构件。
4)可移植性
可移植性使软件系统适用于多种硬件平台、用户界面、操作系统、编程语言或编译器。为了实现可移植,需要按照硬件、软件无关的方式组织软件系统。可移植性是系统能够在不同计算环境下运行的能力,这些环境可能是硬件、软件,也可能是两者的结合。如果移植到新的系统需要做适当更改,则该可移植性就是一种特殊的可修改性。
(6)功能性
功能性(Functionality)是系统能完成所期望的工作的能力。一项任务的完成需要系统中许多或大多数构件的相互协作。
(7)可变性
可变性(Changeability)是指架构经扩充或变更而成为新架构的能力。这种新架构应该符合预先定义的规则,在某些具体方面不同于原有的架构。当要将某个架构作为一系列相关产品(例如,软件产品线)的基础时,可变性是很重要的。
(8)互操作性
作为系统组成部分的软件不是独立存在的,通常与其它系统或自身环境相互作用。为了支持互操作性,软件架构必须为外部可视的功能特性和数据结构提供精心设计的软件入口。程序和用其它编程语言编写的软件系统的交互作用就是互操作性的问题,这种互操作也影响应用的软件架构。