系统架构设计师【第8章】: 系统质量属性与架构评估 (核心总结)

news2025/2/26 2:34:59

文章目录

    • 8.1 软件系统质量属性
      • 8.1.1 质量属性概念
      • 8.1.2 面向架构评估的质量属性
      • 8.1.3 质量属性场景描述
    • 8.2 系统架构评估
      • 8.2.1 系统架构评估中的重要概念
      • 8.2.2 系统架构评估方法
    • 8.3 ATAM方法架构评估实践
      • 8.3.1 阶段1—演示(Presentation)
      • 8.3.2 阶段2—调查和分析
      • 8.3.3 阶段3—测试
      • 8.3.4 阶段4—报告ATAM

8.1 软件系统质量属性

8.1.1 质量属性概念

软件系统质量属性是一个系统的可测量或可测试的属性,基于软件系统的生命周期,可将软件系统的质量属性分为开发期质量属性和运行期质量属性。

1.开发期质量属性

  • (1)易理解性 : 指设计被开发人员理解的难易程度。
  • (2)可扩展性 : 软件因适应新需求或需求变化而增加新功能的能力,也称为灵活性。
  • (3)可重用性 : 指重用软件系统或某一部分的难易程度。
  • (4)可测试性 : 对软件测试以证明其满足需求规范的难易程度。
  • (5)可维护性 : 当需要修改缺陷、增加功能、提高质量属性时,识别修改点并实施修改的难易程度。
  • (6)可移植性 : 将软件系统从一个运行环境转移到另一个不同的运行环境的难易程度。

2.运行期质量属性

  • (1) 性能 : 性能是指软件系统及时提供相应服务的能力,如速度、吞吐量和容量等的要求。
  • (2) 安全性 : 指软件系统同时兼顾向合法用户提供服务,以及阻止非授权使用的能力。
  • (3) 可伸缩性 : 指当用户数和数据量增加时,软件系统维持高服务质量的能力。例如,通过增加服务器来提高能力。
  • (4) 互操作性 : 指本软件系统与其他系统交换数据和相互调用服务的难易程度。
  • (5) 可靠性 : 软件系统在一定的时间内持续无故障运行的能力。
  • (6) 可用性 : 指系统在一定时间内正常工作的时间所占的比例。可用性会受到系统错误,恶意攻击,高负载等问题的影响。
  • (7) 鲁棒性 : 是指软件系统在非正常情况(如用户进行了非法操作、相关的软硬件系统发
    生了故障等)下仍能够正常运行的能力,也称健壮性或容错性。

8.1.2 面向架构评估的质量属性

在架构评估过程中, 评估人员所关注的是系统的质量属性。评估方法所普遍关注的质量属性有以下几种。
1.性能
性能 (Performance) 是指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段事件内系统所能处理的事件的个数。

提升性能的策略可以从以下几个方面考虑:

  • 资源的需求 : 减少处理事件时对资源的占用、减少处理事件的数量、控制资源的使用。
  • 资源管理 : 并发机制、增加资源。
  • 资源仲裁 : 先来先服务、固定优先级、动态优先级、静态调度。

2.可靠性
可靠性 (Reliability) 是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本能力。

  • (1) 容错。出现错误后仍能保证系统争取运行,且自行修正错误;
  • (2) 健壮性。错误不对系统产生影响,按既定程序忽略错误。

3.可用性
可用性 (Availability) 是系统能够正常运行的时间比例。

提升可用性的策略可以从以下几个方面考虑:

  • 错误检测 : 心跳、Ping/Echo、异常。
  • 错误恢复 : 表决、主动冗余、被动冗余、重新同步、内测、检查点/回滚。
  • 错误避免 : 服务下线、事务、进程监控器。

4.安全性
安全性 (Security) 系统向合法用户提供服务并阻止非法用户的能力。

提升安全性的策略可以从以下几个方面考虑:

  • 抵抗攻击 : 用户身份验证、用户授权、维护数据机密性与完整性、限制暴露、限制访问。
  • 检测攻击 : 入侵检测系统。
  • 从攻击中恢复 : 恢复状态、识别攻击者。

5.可修改性
可修改性 (Modifability) 是指能够快速地以较高的性价比对系统进行变更的能力。包含以下4个
方面:

  • (1)可维护性 (Maintainability)。 局部修复使故障对架构的负面影响最小化。
  • (2)可扩展性 (Extendibility)。 因松散耦合更易实现新特性/功能,不影响架构。
  • (3)结构重组 (Reassemble)。 不影响主体进行的灵活配置。
  • (4)可移植性 (Portability)。 适用于多样的环境(硬件平台、语言、操作系统等)。

提升可修改性的策略可以从以下几个方面考虑:

  • 局部化修改 : 高内聚低耦合、预测变更、使模块通用。
  • 防止连锁反应 : 信息隐藏、维持现有接口、限制通信路径、使用中介。
  • 推迟绑定时间 : 运行时注册、多态、配置文件。

6.功能性
功能性 (Functionality) 是系统能完成所期望的工作的能力。

7.可变性
可变性 (Changeability) 是指架构经扩充或变更而成为新架构的能力。

8.互操作性
通过可视化或接口方式提供更好的交互操作体验

8.1.3 质量属性场景描述

质量属性场景是一种面向特定质量属性的需求,由刺激源、刺激、环境、制品、响应、响应度量组成。

  • (1) 刺激源(Source) : 某个生成该刺激的实体(人、计算机系统或者任何其他刺激器)。
  • (2) 刺激(Stimulus) : 指当刺激到达系统时需要考虑的条件。
  • (3) 环境(Environment) : 指该刺激在某些条件内发生。当激励发生时,系统可能处于过载、运行或者其他情况。
  • (4) 制品(Artifact) : 某个制品被激励,可能是整个系统,也可能是系统的一部分。
  • (5) 响应(Response) : 指在激励到达后所采取的行动。
  • (6 ) 响应度量(Measurement) : 当响应发生时,应当能够以某种方式对其进行度量,以对需
    求进行测试。

8.2 系统架构评估

系统架构评估是在对架构分析、评估的基础上,对架构策略的选取进行决策,通常分为:

  • (1)基于调查问卷或检查表的方法: 缺点是很大程度上依赖于评估人员的主观判断。
  • (2)基于场景的评估方法: 应用在架构权衡分析法(ATAM)和软件架构分析方法(SAAM)中。
  • (3)基于度量的评估方法: 建立质量属性和度量之间的映射原则→在软件文档中获取度量信
    息→分析推导系统质量属性。

8.2.1 系统架构评估中的重要概念

(1) 敏感点: 实现质量目标时应注意的点,是一个或多个构件的特性。
(2) 权衡点: 影响多个质量属性的敏感点。
(3) 风险承担者或利益相关人: 影响体系结构或被体系结构影响的群体。
(4) 场景: 确定架构质量评估目标的交互机制,一般采用触发机制(教材中解释为“刺激”)、环境和影响三方面来描述。

8.2.2 系统架构评估方法

(1)软件架构分析方法(Software Architecture Analysis Method,SAAM)
SAAM 是卡耐基梅隆 大学软件工程研究所的 Kazman 等人于 1983 年提出的一种非功能质量属性的架构分析方法,是最早形成文档并得到广泛应用的软件架构分析方法。SAAM 的主要输入是 问题描述、需求说明和架构描述, 其分析过程主要包括 场景开发、架构描述、单个场景评估、场景交互和总体评估,如图
在这里插入图片描述

(2) 架构权衡分析法(Architecture Tradeoff Analysis Method,ATAM)
ATAM 是一种系统架 构评估方法,主要在系统开发之前,针对 性能、可用性、安全性和可修改性 等质量属性进行评价和 折中。传统的 ATAM 可以分为 4 个主要的活动阶段,包括需求收集、架构视图描述、属性模型构 造和分析、架构决策与折中,整个评估过程强调以 属性作为架构评估的核心概念

现代的 ATAM 方法采用效用树对质量属性进行分类和优先级排序。用 ATAM 方法评估软件体 系结构分为演示、调查和分析、测试和报告,如图 :
在这里插入图片描述

(3)成本效益分析法(Cost Benefit Analysis Method,CBAM)
分为整理场景→对场景进行求 精→确定场景的优先级→分配效用→架构策略涉及哪些质量属性及响应级别→使用内插法确定“期 望的”质量属性响应级别的效用→计算各架构策略的总收益→根据受成本限制影响的 ROI 选择架 构策略。

(4)其他评估方法

  • 1)SAEM 方法: 将软件架构看作一个最终产品以及涉及过程中的一个中间产品,从外部质量 属性和内部质量属性阐述的评估模型。
  • 2)SAABNet 方法: 辅助架构的定性评估,帮助诊断软件问题的可能原因,分析架构中的修改 给质量属性带来的影响、预测架构的质量属性,帮助架构设计人员做决策。SAABNet 度量的对象 包括架构属性、质量准则和质量因素。
  • 3)SACMM 方法: 一种软件架构修改的度量方法,首先基于内核定义差异度量准则来计算两 个软件架构之间的距离,然后分析对象之间的相似性。
  • 4)SASAM 方法: 通过对预期架构和实际架构进行映射和比较来静态地评估软件架构。
  • 5)ALRRA 方法: 是软件架构可靠性风险评估方法,使用动态复杂度准则和动态耦合度准则来定义组件和连接件的复杂性因素。
  • 6)AHP 方法: 把定性分析和定量计算相结合,对各种决策因素进行处理。 7)COSMIC+UML 方法:针对不同表达方式的软件架构,采用统一的软件度量 COSMIC 方法
    来进行度量和评估。

8.3 ATAM方法架构评估实践

用ATAM方法评估软件体系结构,其工作分为4个基本阶段,即 演示、调查和分析、测试、报告ATAM

8.3.1 阶段1—演示(Presentation)

使用 ATAM 评估软件体系结构的初始阶段,包括 3 个步骤:

  • 1 介绍 ATAM: 描述 ATAM 评估过程。
  • 2 介绍业务驱动因素: 着重业务视角,提供有关系统功能、主要利益相关方、业务目标和其他限制等信息。
  • 3 介绍要评估的体系结构: 侧重可用性以及体系结构的质量要求。

8.3.2 阶段2—调查和分析

使用 ATAM 技术评估架构第 2 阶段,对一些关键问题彻底调查,包括 3 个步骤:

  • 1 确定架构方法: 涉及能够理解系统关键需求的关键架构方法。
  • 2 生成质量属性效用树: 确定最重要的质量属性,并确定优先次序。
  • 3 分析体系结构方法: 彻底调查和分析,找出处理相应质量属性架构的方法。包括 4 个主要阶段:调查架构方法→创建分析问题→分析问题的答案→找出风险、非风险、敏感点和权衡点。

8.3.3 阶段3—测试

  • 1 头脑风暴和优先场景: 将头脑风暴的优先列表与生成质量属性效用树中所获取的优先方案进行比较。
  • 2 分析架构方法

8.3.4 阶段4—报告ATAM

提供评估期间收集的所有信息,呈现给利益相关者。 上述两种主要评估方法的对比,如表:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1719398.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卷积网络迁移学习:实现思想与TensorFlow实践

摘要:迁移学习是一种利用已有知识来改善新任务学习性能的方法。 在深度学习中,迁移学习通过迁移卷积网络(CNN)的预训练权重,实现了在新领域或任务上的高效学习。 下面我将详细介绍迁移学习的概念、实现思想&#xff0c…

SpringMVC响应数据 View

1.如何封装数据返回页面 使用ModelAndView: ModelAndView modelAndView new ModelAndView() modelAndView.addObject() 方法封装数据 使用Controller中内置Model对象 model: model.addAttribute("name","zz"); 2.跳转的方式…

el-date-picker的使用,及解决切换type时面板样式错乱问题

这里选择器的类型可以选择日月年和时间范围&#xff0c;根据类型不同&#xff0c;el-date-picker的面板也展示不同&#xff0c;但是会出现el-date-picker错位&#xff0c;或者面板位置和层级等问题。 源代码&#xff1a; <el-selectv-model"dateType"placeholder&…

【PTA】7-4 朋友圈(C++ * 并查集思想)代码实现 一点反思

题目如下&#xff1a; AC代码如下&#xff08;参考PTA 7-2 朋友圈&#xff08;25 分&#xff09;_处理微信消息pta-CSDN博客&#xff09; #include<bits/stdc.h> using namespace std; #define sz 30005 typedef struct node{int rk, fa; }Node; Node tree[sz]; void In…

HTTPS 原理技术

HTTPS原理技术 背景简介原理总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日子。本文内容并非完全原创&am…

Ubuntu安装GCC编译器

GCC编译器安装 GCC编译器安装切换软件源(换成国内的服务器)1 、创建一个文本文档并命名为“sources.list”2 、复制软件源列表清华源:阿里源:3 、把修改之后的.list 文件覆盖原有的文件4 、更新软件列表5 、安装6 、检查是否安装成功7、GCC 编译器:GCC编译器安装 这里演示…

二维数组传参时不用二级指针接收

先放结论&#xff1a; 1. 二维数组数组名指向的类型是 int [x] 类型&#xff0c;int** 指针指向类型是 int* &#xff0c;如果用二级指针接收会导致访问错误&#xff0c;因为 int [x] 类型和 int* 类型不同。 2. 指向什么类型的指针1就按照该类型的字节数1移动。 最近在学…

高并发项目-分布式Session解决方案

分布式Session解决方案 1.保存Session&#xff0c;进入商品列表页面 1.保存Session 1.编写工具类 1.MD5Util.java package com.sxs.seckill.utils;import org.apache.commons.codec.digest.DigestUtils;/*** Description: MD5加密工具类** Author sun* Create 2024/5/5 14…

uni-app实现页面通信EventChannel

uni-app实现页面通信EventChannel 之前使用了EventBus的方法实现不同页面组件之间的一个通信&#xff0c;在uni-app中&#xff0c;我们也可以使用uni-app API —— uni.navigateTo来实现页面间的通信。注&#xff1a;2.8.9 支持页面间事件通信通道。 1. 向被打开页面传送数据…

【Linux】操作系统之冯诺依曼体系

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 操作系统中 冯诺依曼体系 的相关内容。 如果看到最后您觉得这篇文…

File(文件)

File对象表示一个路径&#xff0c;可以是文件的路径&#xff0c;也可以是文件夹的路径。 这个路径可以存在&#xff0c;也允许不存在。 创建File对象的方法 public class test {public static void main(String [] args) {//根据字符串创建文件String str"C:\\Users\\PC…

每日一题——力扣141. 环形链表(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 专业点评 时间复杂度分析 空间复杂度分析 总结 我要更强 方法2&#x…

cdo | 常用命令

整理一下平时经常会使用的cdo命令 如何来更改netcdf数据中的变量名呢&#xff1f; 假设我现在有一个sst月平均数据,希望将里面的变量名称sst修改为sst_new netcdf oisst_monthly { dimensions:lat 180 ;lon 360 ;time UNLIMITED ; // (476 currently)nbnds 2 ; variable…

V90 PN总线伺服通过FB285速度控制实现正弦位置轨迹运动(解析法和数值法对比测试)

V90总线伺服相关内容请参考专栏系列文章,这里不在详述 1、V90伺服PN总线速度随动控制 V90伺服PN总线速度随动控制(手摇轮功能)_手摇轮可以接总线plc吗?-CSDN博客文章浏览阅读632次。V90PN总线控制相关内容,请参考下面文章链接:博途1200/1500PLC V90 PN通信控制 (FB284功能…

【html】用html模拟微信布局

您做的这个模拟微信布局的作品很不错,使用了Flexbox布局来实现元素的灵活排列。以下是关于您代码的一些分析和建议: 效果图: 代码分析: 全局样式重置: 您使用了* { margin: 0; padding: 0; }来重置所有元素的边距。这是一个常见的做法,可以避免不同浏览器默认样式的差…

ARM32开发——LED点灯

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 点灯的两种方式灌入电流法输出电流法扩展板点灯点灯方式点亮LED1-4完整实现 点灯的两种方式 不同颜色LED&#xff0c;达到相同亮度…

LLM Agent提效揭秘4:多智能体协作工作流深度剖析

在此之前&#xff0c;我们已经从论文到代码深度解读了吴恩达&#xff1a;GPT-4Agents Workflow&#xff0c;性能比肩GPT-5的三种大语言模型Agent工作流&#xff1a;反思、工具使用和规划。今天我们将深入最后一种Agent工作流&#xff1a;多智能体协作工作流。 想象一个未来&am…

3.spring源码:refresh()第一个方法prepareRefresh()

重点: 1.了解prepareRefresh()方法的作用:就是为容器刷新做了准备工作 2.整体了解refresh()方法 synchronized加锁的原因:刷新和销毁( "refresh" and "destroy" 都是一个完整的过程,需要加锁 改方法进入可以看到是空的,是为了扩展用的 该方法我们可以自己重…

visual studio code 全局搜索

VScode写代码的时候&#xff0c;会经常性的需要进行查找代码&#xff0c;那么怎么在Visual Studio Code中进行查找呢&#xff0c;下面就来大家vscode全局搜索的方法。 想要在vscode全局搜索进行全局搜索&#xff0c;使用快捷键CTRLSHIFTF即可进行搜索&#xff0c;也可以在左边…

GSM信令流程(附着、去附着、PDP激活、修改流程)

1、联合附着流程 附着包括身份认证、鉴权等 2、去附着流程 用户发起去附着 SGSN发起去附着 HLR发起去附着 GSSN使用S4发起去附着 3、Activation Procedures(PDP激活流程) 4、PDP更新或修改流程 5、Deactivate PDP Context 6、RAU(Routeing Area Update)流程 7、鉴权加…