【软件工程】ATAM架构权衡评估方法
ATAM架构权衡评估方法
- 概述
- 质量属性有哪些?
- 质量属性的效用树怎么构建?
- 如何确定质量属性的优先级?
概述
ATAM(Architecture Tradeoff Analysis Method)是一种系统架构评估方法,由卡梅隆大学软件工程协会提出。它主要用于在系统开发之前,对性能、可用性、安全性和可修改性等质量属性进行评价和折中。ATAM的核心是结合质量属性效用树对系统进行评价,确定风险点、敏感点、权衡点,并对系统架构做出决策和折中。
ATAM方法包含四个主要的活动阶段:
- 场景和需求收集:收集和分析系统的需求和使用场景。
- 架构视图描述 + 场景实现:描述软件架构,并展示如何通过架构实现场景。
- 属性模型构造和分析:针对每个场景构建和分析属性模型,评估架构对质量属性的满足程度。
- 对质量属性进行评价和折中:基于场景的分析结果,对质量属性进行评价和架构决策的折中。
ATAM使用质量属性效用树(Utility Tree)作为工具来对质量属性进行识别和优先级排序。效用树的结构包括树根(效用)、质量属性、属性分类和质量属性场景(叶子节点)。效用树沿着两个维度进行优先级排序:场景对系统成功的重要性以及场景实现的难易程度。每个场景都有一个优先级对,如(重要度,难易度),例如:(H, L) 表示该场景重要且易实现。
ATAM方法的实施步骤可以概括为以下几个阶段:
- 介绍ATAM方法:评估小组长向参加会议的风险承担者介绍ATAM评估方法,让大家清楚地了解评估过程和目的。
- 介绍商业动机:项目经理或系统客户介绍商业动机,明确项目的目标和需求。
- 介绍架构:首席架构师介绍项目的体系结构,包括架构的设计理念和实现方式。
- 识别使用的架构方法:评估小组确定采用的架构方法,这是评估过程中的一个重要步骤。
- 生成质量属性效用树:评估小组和项目设计决策者共同生成质量属性效用树,这一步骤是决定性的。
- 分析架构方法:评估小组确保所选的架构方法是正确的,并进行深入分析。
- 讨论和分级场景:通过对不同场景的讨论和分级,进一步细化评估结果。
- 确定场景优先级:确定场景的优先级,以及质量属性和其响应类别。
- 对场景进行分配和计算总收益:根据成本限制影响ROI选择架构策略,完成整个评估过程。
ATAM方法适用于需求变化频繁、项目规模较小、团队合作紧密且需要快速响应市场变化的项目。它特别适用于那些需要高度灵活性和客户紧密参与的软件开发环境。ATAM的优点包括提高代码质量、增强团队合作、快速响应变化和持续改进。缺点可能包括需要文化变革、对纪律要求高和规模限制。
ATAM在现代开发中的应用包括大型企业项目、高度复杂的系统,以及与敏捷方法结合使用。尽管敏捷方法如Scrum和Kanban获得了更多的关注和应用,但ATAM仍然在一些大型、复杂项目中有其独特的价值。ATAM在现代开发中的一些应用场景包括大型企业项目、高度复杂的系统,以及与敏捷方法结合使用。
质量属性有哪些?
在软件架构中,质量属性(Quality Attributes)是指那些描述系统如何满足非功能性需求的特性。这些属性通常与系统的性能、可靠性、可用性、安全性等方面有关。以下是一些常见的质量属性:
-
性能:系统在特定工作负载下响应时间、吞吐量和资源利用率等的表现。
-
可靠性:系统在特定时间内无故障运行的能力。
-
可用性:系统能够正常服务的时间比例,通常与系统的故障恢复能力相关。
-
可维护性:系统容易理解和修改的程度,包括诊断问题、更新和修复错误的容易性。
-
可扩展性:系统处理增加的工作量或用户数量的能力,而不需要重大的结构性改变。
-
安全性:系统保护信息和数据免受未授权访问和破坏的能力。
-
兼容性:系统与其他系统或组件协同工作的能力。
-
可移植性:系统从一个环境迁移到另一个环境的能力。
-
可测试性:系统容易被测试和验证其功能和性能的程度。
-
用户体验:用户与系统交互的直观性和满意度。
-
合规性:系统遵循相关法律、标准和规范的程度。
-
可恢复性:系统在发生故障后恢复到正常运行状态的能力。
-
互操作性:系统与其他系统交换数据和功能的能力。
-
可重用性:系统组件在不同上下文中重复使用的能力。
-
可变性:系统适应变化的能力,包括需求变化和技术变化。
这些质量属性在系统设计和评估过程中非常重要,因为它们直接影响到系统的成功和用户的满意度。在不同的项目和上下文中,这些属性的重要性可能会有所不同,因此需要根据具体情况进行权衡和优先级排序。在ATAM(Architecture Tradeoff Analysis Method)等架构评估方法中,质量属性的评估和折中是核心活动之一。
质量属性的效用树怎么构建?
在ATAM(Architecture Tradeoff Analysis Method)评估中,构建质量属性效用树是一个关键步骤,用于识别和优先级排序系统的质量属性。以下是构建质量属性效用树的过程:
-
确定质量属性:首先,评估团队需要确定系统的关键质量属性,这些通常包括性能、安全性、可修改性和可用性等。这些质量属性是利益相关者最为关心的方面。
-
生成初始效用树:效用树从树根到叶子节点依次为效用、质量属性、属性分类和质量属性场景。这个树形结构帮助团队集中注意力在对系统成功至关重要的不同方面。
-
修剪效用树:初始的效用树可能包含大量的场景,需要进行修剪以保留最重要的场景,通常不超过50个。对这些场景进行重要性评估,并赋予优先级标记,如高(H)、中(M)、低(L)。
-
场景实现的难易度评估:除了重要性之外,还需要根据场景实现的难易程度来确定优先级。这同样使用高(H)、中(M)、低(L)的形式来表示。
-
确定优先级对:结合场景的重要性和实现的难易程度,确定每个场景的优先级对,例如,(H, L) 表示该场景重要且易于实现。
-
利益相关者的参与:利益相关者,包括客户、用户、开发人员等,通过讨论和投票,对场景的优先级进行确认和调整,确保最终的优先级反映了所有利益相关者的关注和期望。
-
综合考虑:在确定优先级的过程中,还需要考虑项目的具体需求、约束条件、资源限制以及技术可行性。这些因素都可能影响到质量属性优先级的最终确定。
通过这一过程,ATAM评估团队能够确保架构设计决策在满足项目关键需求的同时,平衡不同质量属性之间的潜在权衡。最终,这些优先级将指导团队在架构设计中做出明智的折中选择,以优化整体系统性能和满足用户需求。
ATAM方法采用效用树(Utility tree)这一工具来对质量属性进行分类和优先级排序。效用树的结构包括:树根→质量属性→属性分类→质量属性场景(叶子节点)。ATAM主要关注4类质量属性:性能、安全性、可修改性和可用性,因为这4个质量属性是利益相关者最为关心的。
ATAM方法的实施步骤可以概括为以下几个阶段:
- 描述和介绍阶段:向参与评估的人员介绍ATAM方法的目标、流程和参与人员的角色,明确项目的背景、业务需求和约束条件。
- 调查和分析阶段:收集架构信息,与利益相关者进行访谈,了解他们对不同质量属性的关注程度和期望,识别架构的关键场景。
- 评估阶段:针对每个关键场景,分析架构在不同质量属性上的表现,确定架构的敏感点和权衡点。
- 报告阶段:总结评估结果,包括架构的优点、风险和改进建议,向利益相关者汇报评估结果。
ATAM方法强调以属性作为架构评估的核心概念,通过效用树对质量属性进行识别和优先级排序,帮助团队理解不同架构决策之间的权衡,并作出合适的架构选择。
如何确定质量属性的优先级?
在ATAM(Architecture Tradeoff Analysis Method)评估中,确定质量属性的优先级是一个关键步骤,它帮助团队识别和平衡不同质量属性的重要性。以下是确定质量属性优先级的步骤:
-
识别质量属性:首先,团队需要识别出所有可能影响系统的关键质量属性。这些通常包括性能、安全性、可维护性、可扩展性、可靠性等。
-
创建效用树:效用树是一种图形化工具,用于表示不同质量属性的重要性及其相互之间的关系。效用树的根是系统效用,分支是各个质量属性,叶子节点是具体的质量属性场景。
-
场景分析:为每个质量属性定义具体的使用场景,这些场景描述了系统在特定条件下的行为。场景应该具体、可测试,并且能够体现质量属性的影响。
-
利益相关者参与:利益相关者(包括客户、用户、开发人员、维护人员等)参与到优先级确定的过程中。他们根据自己的需求和期望,对每个场景的重要性进行评估。
-
评估和排序:通过讨论和评估,团队对每个场景的重要性进行排序。通常使用高、中、低三个等级来表示场景的重要性。
-
难易度评估:除了重要性之外,还需要评估实现每个场景的难易程度。这有助于识别哪些场景容易实现,哪些场景可能需要更多的资源和努力。
-
确定优先级对:结合场景的重要性和实现的难易程度,确定每个场景的优先级对。例如,一个场景可能被标记为“重要且容易实现”,而另一个场景可能是“重要但难以实现”。
-
综合考虑:在确定优先级时,还需要考虑项目的具体需求、约束条件、资源限制以及技术可行性。这些因素都可能影响到质量属性优先级的最终确定。
-
迭代和调整:优先级确定是一个迭代过程,可能需要根据项目的进展和反馈进行调整。
通过这一过程,ATAM评估团队能够确保架构设计决策在满足项目关键需求的同时,平衡不同质量属性之间的潜在权衡。最终,这些优先级将指导团队在架构设计中做出明智的折中选择,以优化整体系统性能和满足用户需求。
相关文章:

【软件工程】ATAM架构权衡评估方法
ATAM架构权衡评估方法 概述质量属性有哪些?质量属性的效用树怎么构建?如何确定质量属性的优先级? 概述 ATAM(Architecture Tradeoff Analysis Method)是一种系统架构评估方法,由卡梅隆大学软件工程协会提出…...
MFC 重写了listControl类(类名为A),并把双击事件的处理函数定义在A中,主窗口如何接收表格是否被双击
刚接触MFC遇到的问题,我在主对话框的.cpp里添加了表格的双击处理事件,但是没用,试了下添加单击的,发现居然可以进单击的处理函数,就很懵逼,然后我就把处理双击事件的函数添加到表格的类中,那这样…...
c和cpp的异常处理
### 课堂讨论 **老师**:今天我们来深入探讨一下C的异常处理机制。想象一下,我们正在玩一场探险游戏。你会遇到一些意外情况,比如掉进陷阱。这就像我们的程序在运行中遇到错误。我们该怎么处理呢?🤔 **学生**…...

monkey-安卓稳定性测试
一、adb执行命令 1.monkey随机事件指令: adb shell monkey -p com.tytu.enter --ignore-crashes --ignore-timeouts --ignore-security-exceptions -v -v -v --throttle 300 -s 121212 --pct-syskeys 0 --pct-anyevent 0 --pct-touch 100 --pct-motion 0 100000 2&…...

【贪心算法】贪心算法三
贪心算法三 1.买卖股票的最佳时机2.买卖股票的最佳时机 II3.K 次取反后最大化的数组和4.按身高排序5.优势洗牌(田忌赛马) 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励&#…...
LeetCode 40-组合总数Ⅱ
题目链接:LeetCode40 欢迎留言交流,每天都会回消息。 class Solution {List<List<Integer>> rs new ArrayList<>();LinkedList<Integer> path new LinkedList<>();public List<List<Integer>> combinatio…...

STM32WB55RG开发(1)----开发板测试
STM32WB55RG开发----1.开发板测试 概述硬件准备视频教学样品申请源码下载产品特性参考程序生成STM32CUBEMX串口配置LED配置堆栈设置串口重定向主循环演示 概述 STM32WB55 & SENSOR是一款基于STM32WB55系列微控制器的评估套件。该套件采用先进的无线通信技术,支…...

误删分区数据恢复全攻略
一、误删分区现象描述 在日常使用电脑的过程中,我们可能会遇到一种令人头疼的情况——误删分区。这通常发生在用户对磁盘管理操作不当,或者在进行系统重装、分区调整时不慎删除了重要分区。误删分区后,原本存储在该分区的数据将无法直接访问…...

《XGBoost算法的原理推导》12-14决策树复杂度的正则化项 公式解析
本文是将文章《XGBoost算法的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。 我们定义一颗树的复杂度 Ω Ω Ω,它由两部分组成: 叶子结点的数量;叶子结点权重向量的 L 2 L2 L2范数; 公式(…...

昇思大模型平台打卡体验活动:项目4基于MindSpore实现Roberta模型Prompt Tuning
基于MindNLP的Roberta模型Prompt Tuning 本文档介绍了如何基于MindNLP进行Roberta模型的Prompt Tuning,主要用于GLUE基准数据集的微调。本文提供了完整的代码示例以及详细的步骤说明,便于理解和复现实验。 环境配置 在运行此代码前,请确保…...
hadoop 3.x 伪分布式搭建
hadoop 伪分布式搭建 环境 CentOS 7jdk 1.8hadoop 3.3.6 1. 准备 准备环境所需包上传所有压缩包到服务器 2. 安装jdk # 解压jdk到/usr/local目录下 tar -xvf jdk-8u431-linux-x64.tar.gz -C /usr/local先不着急配置java环境变量,后面和hadoop一起配置 3. 安装had…...
springboot 整合mybatis
一,引入MyBatis起步依赖 <!--mybatis依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.0</version></dependency> 二&a…...

餐饮门店收银系统源码、php收银系统源码
1. 系统开发语言 核心开发语言: PHP、HTML5、Dart后台接口: PHP7.3后台管理网站: HTML5vue2.0element-uicssjs线下收银台(安卓/PC收银、安卓自助收银): Dart3框架:Flutter 3.19.6移动店务助手: uniapp线上商城: uniapp 2.系统概况及适用行业…...

canal1.1.7使用canal-adapter进行mysql同步数据
重要的事情说前面,canal1.1.8需要jdk11以上,大家自行选择,我这由于项目原因只能使用1.1.7兼容版的 文章参考地址: canal 使用详解_canal使用-CSDN博客 使用canal.deployer-1.1.7和canal.adapter-1.1.7实现mysql数据同步_mysql更…...

揭秘文心一言,智能助手新体验
一、产品描述 文心一言是一款集先进人工智能技术与自然语言处理能力于一体的智能助手软件。它采用了深度学习算法和大规模语料库训练,具备强大的语义理解和生成能力。通过简洁直观的用户界面,文心一言能够与用户进行流畅的对话交流,理解用户…...

良心无广,这5款才是你电脑上该装的神仙软件,很多人都不知道
图吧工具箱 这是一款完全纯净的硬件检测工具包,体积小巧不足0.5MB,却全面整合了CPU、硬盘、内存、显卡等电脑大神常用的检测工具与压力测试软件。 还特别为游戏爱好者们准备了直达平台官网的链接以及Directx修复工具,而且全部免费哦…...
Scala图书馆创建图书信息
图书馆书籍管理系统相关的练习。内容要求: 1.创建一个可变 Set,用于存储图书馆中的书籍信息(假设书籍信息用字符串表示,如 “Java 编程思想”“Scala 实战” 等),初始化为包含几本你喜欢的书籍。 2.添加两本…...
【Python】深入理解Python中的单例模式:用元类、装饰器和模块实现高效的单例设计
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 单例模式是一种重要的设计模式,旨在确保一个类的实例在整个应用程序中仅存在一个。Python作为一种动态语言,为实现单例模式提供了多种方式…...

Flutter 小技巧之 Shader 实现酷炫的粒子动画
在之前的《不一样的思路实现炫酷 3D 翻页折叠动画》我们其实介绍过:如何使用 Shader 去实现一个 3D 的翻页效果,具体就是使用 Flutter 在 3.7 开始提供 Fragment Shader API ,因为每个像素都会过 Fragment Shader ,所以我们可以通…...
【LeetCode】【算法】42. 接雨水
LeetCode 42. 接雨水 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...