分析大型软件系统的经典方法

简介: 【6月更文挑战第19天】本文介绍ATAM(架构权衡分析方法)是一种评估大型软件系统架构的工具,着重考虑性能、可用性、安全性和可修改性等质量属性的交互。ATAM提供了一种结构化方法,确保在设计早期就能理解和平衡各种质量属性,以优化系统整体性能。

1 简介

假设您计划开发一套系统,自己也认为相当有信心,但是有时候我们需要更深入的量化它,如何评估这种“相当不错”的感觉?而一个大型系统可能更加难以决定。

特别地,大型软件系统的质量属性主要是由系统的软件体系结构决定。

也就是说,在大型系统,性能、可用性和可修改性等质量的实现更多地取决于整体软件架构。

这是相对比于代码级实践而言的,比如语言选择、详细设计、算法、数据结构、测试等。

这并不是说选择算法或数据结构并不重要,而是这种选择对系统成功的重要性不如它的整体软件结构,它的架构。

因此,它给我们提供的兴趣是在建造之前就尝试分析和确定是否系统确实可以满足其期望的品质。我们可以开始这条漫漫长路。

treeoflife6.png

2 大型软件的质量分析方法

传统方法往往单独分析这些属性,但ATAM强调属性间的权衡和交互。通过需求收集、架构描述、属性模型分析和决策制定等四个阶段。

ATAM帮助识别敏感点(影响特定质量的组件)和权衡点(影响多质量属性的点),并管理风险。效应树用于可视化和分析这些关系。

虽然分析特定质量属性的方法已经存在,但是这些分析通常是单独执行的。
实际上,一个系统的交互性能会影响可修改性。

比如可用性会影响安全性。安全性会影响性能。这一切又将影响成本,等等。

虽然经验丰富的设计师知道这些权衡存在,但是还没有原则性的方法用于表征它们,特别是表征这些属性之间的交互。

出于这个原因,软件架构通常设计为“黑盒”的过程。

很多属性需要权衡 - 如果系统是要构建的,质量权衡将不能避免。但它们是通常是以临时方式构建的。

想象一下,一位画师被赋予一个 38 种色彩的图形均衡器,其中均衡器的每个控件都有效果与其他控件的某些子集交互。

但是工程师没有获得任何分析仪,并被要求设置色彩以获得最佳保真度。显然,这样的需要是站不住脚的。

实际上软件架构中的软件系统拥有的更多超过38个色彩的独立但相互作用的变量需要“调整”和“权衡”。

设计人员已经使用了一些技术来尝试降低选择架构以满足广泛的质量属性的风险。
编程方面的最新活动:设计模式和架构风格就是一个例子。

设计师可能会选择一种图案,因为它“有利于可移植性“,另一个是因为它”易于修改”。
但对模式的分析并没有比这更深入。

这些模式的用户不知道如何做到更易用,或者可修改或更健壮的架构,直到它被构建出来。

3 控制开发质量 架构权衡分析方法

架构权衡分析方法(Architecture Tradeoff Analysis Method, ATAM) ATAM是一种系统架构评估方法,
主要在系统开发之前,针对性能、可用性、安全性和可修改性等质量属性进行评价和折中。

ATAM 可以分为 4个主要的活动阶段包括:

需求收集、架构视图描述、属性模型构造和分析、架构决策与折中,

整个评估过程强调以属性作为架 构评估的核心概念。现代的 ATAM 方法采用效用树对质量属性进行分类和优先级排序,其基本活动结构如下图。

image.png

用 ATAM 方法评估软件体系结构分为演示调查和分析、测试和报告 ATAM。

4 敏感点

实现质量目标时应注意的点,它是一个或多个构件(或构件之间的关系)的特性。

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

关键:对查询请求处理时间的要求将影响系统的数据传输协议和处理过程的设计。

5 权衡点

指影响多个质量特征,并对多个质量特征都是敏感点的质量特征 。
改变业务数据编码方式对系统性能和安全产生影响。
影响多个质量属性的敏感点。

6 风险

不以标准术语出现。某些做法有一些隐患可能导致一些问题。
对系统某业务逻辑的描述尚未达成共识,可能导致部分业务功能模块重复,影响系统可修改性。

7 非风险

可行的做法。比如 业务响应小于30ms,则请求响应超时设定为1秒是可以接受的。

8 效应树和执行步骤

一个评估过程包括九大步骤如下,

描述ATAM方法;
描述业务动机;
描述架构;
确定架构方法;
生成质量效应树;
分析架构方法;
讨论场景和对场景分级;
分析架构方法;
描述评估结果。 

一个典型的效应树结构示例如下:

image.png

9 总结

本文简单介绍了架构权衡分析方法(ATAM)基本概念,它是一种易于理解的结构化技术,评估设计中固有的属性权衡。

这种方法是为开发流程提供了一种有原则的方法来评估软件架构在多个竞争质量方面的适用性。

属性:其经典内容包括

可修改性、安全性、性能、可用性

这些属性相互作用:经常改进一个属性代价将使一个或多个其他情况恶化,这将在此论文中得到了证明。

ATAM是螺旋模型的设计:遵循假设候选架构之一通过分析和风险缓解,达成精细的架构。

目录
相关文章
|
存储 SQL Prometheus
盘点市面上主流的时序数据库
万物互联时代,工业物联网产生的数据量比传统的信息化要多数千倍甚至数万倍,并且是实时采集、高频度、高密度,动态数据模型随时可变。传统数据库在对这些数据进行存储、查询、分析等处理操作时捉襟见肘,迫切需要一种专门针对时序数据来做优化的数据库系统,即时间序列数据库。
9437 0
盘点市面上主流的时序数据库
|
6月前
|
运维 Prometheus 监控
运维不是救火队
运维不是救火队
283 6
|
10月前
|
缓存 运维 监控
《微服务架构从故障频发到自愈可控的实战突围方案》
本文以某金融科技平台支付结算系统的“超时连锁故障”为切入点,复盘了微服务架构在高并发场景下的稳定性危机。故障根源在于渠道路由模块配置加载的并发冲突,以及线程池与超时参数的失配,且因缺乏有效隔离机制导致故障蔓延。团队通过重构配置加载逻辑、构建参数动态匹配模型、搭建三维监控体系、引入服务隔离与流量治理策略,并结合混沌工程演练,将架构从“被动修复”升级为“自愈可控”。最终系统交易成功率稳定在99.98%以上,同时沉淀出微服务韧性建设的实战方法论。
335 0
|
缓存 物联网 数据库
InfluxDB vs TDengine :2025 年了,谁家用的数据库还不能高效读缓存?
在工业互联网和物联网的大数据应用场景中,实时数据的写入和查询性能至关重要。如何快速获取最新设备状态并实时处理数据,直接影响到业务的高效运转。本文将深入分析 TDengine 和 InfluxDB 在缓存机制上的差异,帮助读者更好地理解这两款主流时序数据库在性能优化方面的优劣。
1275 1
|
NoSQL 关系型数据库 MySQL
Redis集群和数据同步你了解多少
Redis集群和数据同步你了解多少
542 0
|
供应链 数据挖掘 API
1688APP 原数据 API 接口的开发、应用与收益
1688作为阿里巴巴旗下的B2B平台,汇聚海量供应商和商品资源。其APP原数据API接口为开发者提供获取商品详细信息的强大工具,涵盖商品标题、价格、图片等。通过注册开放平台账号、申请API权限并调用接口,开发者可构建比价工具、供应链管理及自动化上架工具等应用,提升用户体验与运营效率,创造新的商业模式。示例代码展示了如何使用Python调用API并解析返回结果。
1342 8
|
存储 C# 图形学
Unity 逐字显示 打字机效果
在 Unity 中实现逐字显示的打字机效果,主要通过 UGUI Text 组件和 C# 脚本完成。核心原理是将文本逐字拆分并按时间间隔依次显示。具体步骤如下:1. 创建 Text 组件和脚本;2. 使用协程或 Update 方法控制字符逐个显示。代码示例展示了两种实现方式,一种使用协程 `IEnumerator`,另一种通过 `Update` 方法结合 `Substring` 实现逐字显示效果。
|
缓存 前端开发 JavaScript
前端的全栈之路Meteor篇(二):容器化开发环境下的meteor工程架构解析
本文详细介绍了使用Docker创建Meteor项目的准备工作与步骤,解析了容器化Meteor项目的目录结构,包括工程准备、环境配置、容器启动及项目架构分析。提供了最佳实践建议,适合初学者参考学习。项目代码已托管至GitCode,方便读者实践与交流。
381 6
|
缓存 JSON NoSQL
为什么是删除缓存,而不是更新缓存?
本文介绍了数据库与缓存一致性的常见方案——Cache-Aside Pattern(旁路缓存模式),并分析了其工作流程及优势。该模式通过应用程序显式管理缓存,确保数据一致性。文章详细探讨了删除缓存而非更新缓存的原因,包括避免数据不一致、简化操作、减少并发问题及提高性能。删除缓存能有效保证下次请求获取最新数据,尤其在高并发场景下,确保系统的简单性和可靠性。
1093 0
|
测试技术
软件复杂度量化:McCabe度量法及其环路复杂度的计算方法
McCabe度量法(McCabe's Cyclomatic Complexity)是一种经典的方法,用于度量软件程序的复杂度。通过计算程序中独立路径的数量,帮助开发人员评估代码的维护难度和测试覆盖率。本文详细介绍了McCabe度量法的原理、计算方法及其在实际应用中的作用。
3370 0