架构评估
考试趋势:本章平均每年约4~5 分。
- 架构评估题长期持续出现,近年仍有稳定记录,且部分年份会与软件质量属性合并考查,题量波动比单纯概念题更明显。
- ATAM、SAAM、CBAM 的定位,以及敏感点、权衡点、风险、效用树等概念是复习重点;做题时先判断评估依据和方法目标。
架构评估是在系统开发前或架构决策阶段,依据质量目标和质量属性场景判断架构是否满足需求,并识别风险、敏感点和权衡点。它关注的是架构决策对系统质量的影响,不是检查功能代码是否已经全部实现。
1. 架构评估基础
- 敏感点:一个或多个构件及其关系的特性,会对某个质量属性产生显著影响,是影响该属性的关键设计因素。
- 权衡点:一个架构决策同时影响多个质量属性,且这些属性之间可能存在冲突。提高加密级别同时影响安全性和性能,就是典型的权衡点。
- 风险点:带有不确定性、可能导致架构无法满足质量目标的设计决策。
- 非风险点:在当前条件下已经验证不会引发质量问题的设计内容。
- 利益相关者:参与架构评估并提出质量目标和使用关注点的人员,如用户、开发人员、维护人员、性能工程师和安全专家。
架构评估中的场景从利益相关者的角度描述与系统的交互,通常用刺激、环境、响应三个方面概括。它不同于上一章质量属性场景的六要素。
两种分析视角也常出现在题目中:
- 自底向上分析:从具体构件、构件关系和运行数据出发,归纳架构的实际特性,更接近实现层面的运行效率和资源表现;
- 基于场景的分析:从利益相关者目标和质量属性场景出发,分析架构是否支撑预期质量目标。
对应真题:#2026.05-52#2026.05-58#2025.11-5#2025.11-6#2025.11-32#2025.05-49#2024.11-34#2024.11-62#2024.05-44#2021.11-43#2020.11-25#2014.11-37
2. 常见评估方法
按评估依据,架构评估通常分为三类:
基于调查问卷或检查表:利用相关人员的经验和知识评价架构,主观性较强;
基于场景:分析架构对具体场景的支持程度,SAAM 和 ATAM 属于这一类;
基于度量:先建立质量属性与度量指标的映射,再从架构文档获取度量信息,最后推导系统的质量属性。
SAAM:较早文档化的基于场景的架构分析方法,由 Rick Kazman 等提出;主要输入是问题描述、需求声明和体系结构描述,重点关注需求变化对架构和可修改性的影响。
ATAM:在 SAAM 基础上发展,面向系统开发早期,分析性能、可用性、安全性、可修改性等多个质量属性之间的权衡。
CBAM:在 ATAM 基础上引入经济学分析,根据成本、收益和投资回报率(ROI)在多个架构方案中进行选择。
SAEM:覆盖软件架构的产品属性和过程属性,用于形成较完整的架构质量评估框架。
SASAM:典型的静态分析方法,通过映射、比较预期架构与实际架构模型,检查架构结构和构件组织的一致性。
SAABNet:基于贝叶斯信念网络进行定性架构评估,依靠概率推理分析架构属性。
按关键词区分:SAAM 看场景和可修改性,ATAM 看多质量属性权衡,CBAM 看成本收益,SASAM 看静态结构,SAABNet 看贝叶斯推理。
对应真题:#2026.05-53#2025.11-31#2024.05-46#2023.11-17#2018.11-33#2015.11-41#2014.11-38
3. ATAM 重点
ATAM 的四个主要活动领域是:
- 场景和需求收集;
- 体系结构视图和场景实现;
- 属性模型构造和分析;
- 折中。
ATAM 使用质量属性效用树对质量属性分类并排序。效用树从根到叶依次是:效用 → 质量属性 → 属性分类 → 质量属性场景。场景优先级同时考虑场景对系统成功的重要性,以及实现该场景的难易程度,通常用高(H)、中(M)、低(L)表示;不能认为某一种质量属性永远是最高优先级。
ATAM 通过头脑风暴识别三类场景:
- 用例场景:来自用户的真实操作,验证当前业务需求;
- 增长场景:描述未来的扩展、升级或规模增长,考查架构的可扩展性和可演化性;
- 探索性场景:通过极端负载、极端故障等条件挑战架构的适应能力和鲁棒性。
增长场景还可以进一步描述用户数、数据量或业务规模的极端增长,用于检验架构的扩展能力。
ATAM 以需求说明为出发点,在系统开发前对质量属性进行评价和折中;题目问完整质量属性场景时,才写刺激源、刺激、环境、制品、响应和响应度量。
ATAM 设计之初重点关注的四种质量属性是性能、安全性、可修改性和可用性。评估时先明确质量目标,再通过场景、视图和属性模型分析架构,最后识别敏感点、权衡点和风险并进行架构折中。
题库分类中有少量与质量属性、ABSD 或事件驱动交叉的题目,仍保留在下方真题区;正文只按架构评估主线整理。
对应真题:#2025.11-36#2025.11-39#2024.11-21#2024.11-22#2024.11-50#2024.05-23#2023.11-28#2023.11-39#2022.11-48#2022.11-49#2022.11-52#2021.11-36#2021.11-42#2013.11-34