质量属性和架构评估

软件系统属性-质量属性

软件系统属性包括功能属性和质量属性,软件架构重点关注的是质量属性

架构的基本需求是在满足功能属性的前提下,关注软件系统质量属性,为了精确、定量地表达系统的质量属性,通常会采用质量属性场景的方式进行描述。在确定软件系统架构,精确描述质量属性场景后,就需要对系统架构进行评估。软件系统架构评估是在对架构分析、评估的基础上,对架构策略的选取进行决策。它也可以灵活地运用于软件架构评审等工作

软件系统质量属性 (Quality Attribute) 是一个系统的可测量或者可测试的属性

软件系统质量属性是指软件系统满足用户需求的程度,是衡量软件系统质量的重要指标。

基于软件系统的生命周期,可以将软件系统的质量属性分为开发期质量属性和运行期质量属性2个部分

开发期质量属性主要指在软件开发阶段所关注的质量属性,这个阶段关注人群主要是开发者

易理解性:指设计被开发人员理解的难易程度。

可扩展性:软件因适应新需求或需求变化而增加新功能的能力,也称为灵活性。

可重用性:指重用软件系统或某一部分的难易程度。

可测试性:对软件测试以证明其满足需求规范的难易程度。

可维护性:当需要修改缺陷、增加功能、提高质量属性时,识别修改点并实施修改的难易程度。

可移植性:将软件系统从一个运行环境转移到另一个不同的运行环境的难易程度。

运行期质量属性主要指在软件运行阶段所关注的质量属性,这个阶段关注人群主要是用户

性能:性能是指软件系统及时提供相应服务的能力,如速度、吞吐量和容量等的要求。

安全性:指软件系统同时兼顾向合法用户提供服务,以及阻止非授权使用的能力。

可伸缩性:指当用户数和数据量增加时,软件系统维持高服务质量的能力。例如,通过增加服务器来提高能力。

互操作性:指本软件系统与其他系统交换数据和相互调用服务的难易程度。

可靠性:软件系统在一定的时间内持续无故障运行的能力。

可用性:指系统在一定时间内正常工作的时间所占的比例。可用性会受到系统错误,恶意攻击,高负载等问题的影响。

鲁棒性:是指软件系统在非正常情况(用户进行了非法操作、相关软硬件系统发生了故障)下仍能够正常运行的能力,也称健壮性或容性。

质量属性

  1. 性能:指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件的个数。如响应时间、吞吐量。

设计策略:优先级队列、增加计算资源、减少计算开销、引入并发机制、采用资源调度等。

  1. 可靠性:是指系统在一段时间内保持正常运行而不发生故障的能力。它强调了系统的稳定性和可靠性,通常是通过衡量系统在一段时间内发生故障的概率来评估的。一个可靠性高的系统意味着它很少出现故障,用户可以信任它的稳定性。可靠性有一些指标需要了解。如MTTF(平均无故障时间)、MTBF(平均故障间隔时间)、MTTR(平均故障修复时间)。MTBF=MTTF+MTTR

设计策略:心跳、Ping/Echo、冗余、选举

  1. 可用性:是指系统在需要的时候可供使用的能力,即系统处于可操作状态的时间比例。可用性通常通过计算系统在一定时间内可操作的百分比来评估。一个高可用性的系统意味着它在大部分时间内都是可用的,用户可以随时访问和使用它。

设计策略:心跳、Ping/Echo、冗余、选举。

可靠性强调系统不发生故障,而可用性强调系统在需要时可供使用。两者都是衡量系统性能和质量的重要标准,但它们关注的方面略有不同

  1. 安全性:是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。如保密性、完整性、不可抵赖性、可控性。

设计策略:入侵检测、用户认证、用户授权、追踪审计。

  1. 可修改性:指能够快速的以较高的性能价格比对系统进行变更的能力。通常以某些具体的变更为基准,通过考察这些变更的代价衡量。

设计策略:接口-实现分类、抽象、信息隐藏(是不是感觉有点像结构化开发和面向对象开发的设计原则)。

  1. 功能性:是系统所能完成所期望的工作的能力。一项任务的完成需要系统中许多或大多数构件的相互协作。

  2. 可变性(可扩展):指体系结构经扩充或变更而成为新体系结构的能力。这种新体系结构应该符合预先定义的规则,在某些具体方面不同于原有的体系结构。当要将某个体系结构作为一系列相关产品的基础时,可变性是很重要的。

  3. 互操作性:作为系统组成部分的软件不是独立存在的,经常与其他系统或自身环境相互作用。为了支持互操作性,软件体系结构必须为外部可视的功能特性和数据结构提供精心设计的软件入口。程序和用其他编程语言编写的软件系统的交互作用就是互操作性的问题,也影响应用的软件体系结构。

  4. 易用性:它关注的是软件系统的用户界面和交互设计,以确保用户能够轻松、高效地使用系统,并感到满意。易用性不仅关乎用户界面的外观,还包括用户体验、交互流程和用户学习曲线等方面

质量场景描述

通常采用质量属性场景 (Quality Attribute Scenario) 作为描述质量属性的手段。质量属性场景是一个具体的质量属性需求,是利益相关者与系统的交互的简短陈述。

质量属性场景是一种用于描述系统如何满足特定质量属性需求的情境或情景。它由6部分组成:

刺激源(谁):这是某个生成该刺激的实体(人、计算机系统或者任何其他刺激器)。

刺激(做什么):该刺激是当刺激到达系统时需要考虑的条件。

环境(在什么样的环境下)∶该刺激在某些条件内发生。当激励发生时,系统可能处于过载、运行或者其他情况。

制品(对哪个功能):某个制品被激励。这可能是整个系统,也可能是系统的一部分。

响应(得到什么反馈):该响应是在激励到达后所采取的行动。

响应度量(对反馈进行度量)︰当响应发生时,应当能够以某种方式对其进行度量,以对需求进行测试。

系统架构评估

敏感点:是指为了实现某一种特定的质量属性,一个或多个构件所具有的特性。

权衡点:是影响多个质量属性的特性,是多个质量属性的敏感点

软件架构评估在架构设计之后,系统设计之前,因此与设计、实现、测试都没有关系。评估的目的是为了评估所采用的架构是否能解决软件系统需求

评估方式

1 . 基于调查问卷(检查表)的方式

2、基于度量的方式

3、基于场景的方式

评估方法

基于场景的架构分析方法SAAM

SAAM是一种非功能质量属性的架构分析方法,是最早形成文档并得到广泛应用的软件架构分析方法。针对可修改性

SAAM的主要输入是问题描述、需求声明和架构描述

架构权衡分析法ATAM

是一种系统架构评估方法,主要在系统开发之前,针对性能、可用性、安全性和可修改性等质量属性进行评价和折中,让架构师明确如何权衡多个质量目标,参与者有评估小组、项目决策者和其他项目相关人

ATAM被分为四个主要的活动领域,分别是

场景和需求收集、体系结构(架构)视图和场景实现、属性模型构造和分析以及架构评审与折中。

整个评估过程强调以属性(质量属性)作为架构评估的核心概念

ATAM 方法采用效用树 (Utility tree) 这一工具来对质量属性进行分类和优先级排序。效用树的结构包括:树根—质量属性—属性分类—质量属性场景(叶子节点)

得到初始的效用树后,需要修剪这棵树,保留重要场景(通常不超过50个),再对场景按重要性给定优先级(用 H/M/L 的形式),再按场景实现的难易度来确定优先级(用 H/M/L的形式),这样对所选定的每个场景就有一个优先级对(重要度、难易度),如 (H、L) 表示该场景重要且易实现。

ATAM的阶段解释:

1 . 描述和介绍阶段:

目标: 此阶段的目标是收集相关架构材料,定义评估的目标和评估的软件架构,明确要优化的质量属性以及介绍ATAM方法的步骤和原则。

活动: 在这个阶段,评估团队会与项目干系人一起定义评估的目标,确定评估的软件架构,并收集架构文档和相关信息。团队还会介绍ATAM方法的步骤,以确保所有参与者了解评估的过程。

示例: 对于电子商务网站的架构评估,评估团队会与项目干系人合作,确定评估的目标是提高性能和安全性。他们收集有关网站架构的文档,如架构图和设计文档。

2. 调查和分析阶段:

目标: 此阶段的目标是确定架构方法,分析架构并评估这些架构方法对质量属性的影响,同时识别潜在的问题和权衡决策。

活动: 在这个阶段,评估团队会定义架构方法,分析不同的架构设计,生成质量属性效应树以表示不同决策对质量属性的影响。他们还会识别潜在的问题和决策权衡。

产出: 在此阶段,产出质量属性效应树(Quality Attribute Utility Tree),用于表示不同架构决策对质量属性的影响以及它们之间的权衡关系。

示例: 对于电子商务网站的架构评估,评估团队会定义不同的架构决策,如引入缓存或增加服务器资源。他们生成质量属性效应树,以分析这些决策对性能和安全性的影响。

3. 测试阶段:

目标: 测试阶段旨在验证架构是否满足质量属性需求。

活动: 团队创建测试用例来模拟质量属性场景,包括性能测试、安全性测试等。他们运行这些测试用例,测量系统的性能和行为,并记录测试结果。在此阶段,评估团队讨论各种质量属性场景,对它们进行分级,以确定哪些场景对系统的关键性最高。团队还会分析不同的架构方法,以确定哪种方法最有可能满足关键场景的需求。最后,项目干系人会对不同的架构方法和场景分级进行投票,以帮助团队确定最佳的架构方案。

示例: 评估团队可能会讨论电子商务网站的性能、可伸缩性和安全性场景,分级它们的重要性,并分析引入缓存或增加服务器资源等不同架构方法的影响。项目干系人会进行投票,以选择最合适的架构方法。

4. 报告阶段:

目标: 报告阶段的目标是总结评估的结果、提供改进建议,并为决策者提供决策依据。

活动: 团队生成ATAM评估报告,其中包括评估的发现、性能数据、可能的改进建议以及权衡决策。报告应该清晰地传达关键信息,以便决策者可以做出明智的架构决策。

示例: 电子商务网站的评估报告可能包括性能测试结果、安全性评估、建议的架构改进,以及与质量属性场景相关的权衡决策。报告将提供给项目管理团队,以指导后续的架构决策和改进。

成本效益分析法CBAM

用来对架构建立的成本来进行设计和建模,让决策者根据投资收益率来选择合适的架构,可以看做对ATAM的补充,在ATAM确定质量合理的基础上,再对效益进行分析

中间件

在一个分布式系统环境中处于操作系统和应用程序之间的软件,可以在不同的技术之间共享资源,将不同的操作系统、数据库、异构的网络环境以及若干应用结合成一个有机的协同工作整体

中间件位于客户机/服务器的操作系统之上,管理计算机资源和网络通信,

中间件是一类软件,而非一种软件;

中间件不仅仅实现互连,还要实现应用之间的互操作;

中间件是基于分布式处理的软件,最突出的特点是网络通信

使应用程序开发变得更容易,通过提供统一的程序抽象,隐藏异构系统和分布式系统下低级别编程的复杂度

1、数据库访问中间件:通过一个抽象层访问数据库,从而允许使用相同或相似的代码访问不同的数据库资源。典型的技术如Windows平台的ODBC和Java平台的JDBC等。

2、远程过程调用(RPC):是一种广泛使用的分布式应用程序处理方法。一个应用程序使用RPC来“远程”执行一个位于不同地址空间内的过程,从效果上看和执行本地调用相同。

3、面向消息中间件(MOM):利用高效可靠的消息传递机制进行平台无关的数据交流,并可基于数据通信进行分布系统的集成。通过提供消息传递和消息排队模型,可在分布环境下扩展进程间的通信,并支持多种通信协议、语言、应用程序、硬件和软件平台。典型的产品如RabbitMQ。

4、分布式对象中间件:随着对象技术与分布式计算技术的发展,两者相互结合形成了分布式对象技术,并发展成为当今软件技术的主流方向。典型的产品如OMG的CORBA、Sun的RMI/EJB、Microsoft的DCOM等。

5、事务中间件:也称事务处理监控器(TPM),最早出现在大型机上。事务处理监控程序位于客户和服务器之间,完成事务管理与协调、负载平衡、失效恢复等任务,提高系统的整体性能。