返回知识库

软考

在游戏中攻打此考点

质量属性与架构评估(ATAM/SAAM)深化

六类质量属性 × 各 3 场景实例 / 效用树完整构建 / ATAM 9 步详操作 / SAAM 6 步 / ARID·CBAM 区分 / 敏感点·权衡点·风险点·非风险点判定,案例第 1 题必考

软考质量属性ATAMSAAM案例分析论文真题

一句话定位

案例第 1 题几乎必考”质量属性场景识别 + 效用树填空 + 敏感点 / 权衡点 / 风险点判定”,论文也常考 ATAM;本篇把这些落成完整案例操作到可默写。

NOTE

本篇是 03-architecture-core.mdx 的”质量评估深化版”。事实据教材第 2 版 §3.7.2~§3.7.3 + 2020-2025 真题核对(2026-07-29)。

A. 质量属性场景六要素(必考填空)

六要素定义

要素含义典型取值
刺激源 Source谁产生刺激用户 / 外部系统 / 内部组件
刺激 Stimulus到达系统的事件请求 / 故障 / 变更 / 攻击
制品 Artifact被刺激的对象处理 / 数据 / 通信
环境 Environment刺激发生时的条件正常运行 / 降级 / 峰值 / 启动
响应 Response系统的反应处理 / 通知 / 拒绝 / 恢复 / 报警
响应度量 Response Measure可量化的指标时间 / 吞吐 / 数据量 / 概率

IMPORTANT

填空套路 callout

  • “用户请求到达后,系统应在 200ms 内响应”
    • 刺激源 = 用户
    • 刺激 = 请求到达
    • 制品 = 系统的处理
    • 环境 = 正常运行
    • 响应 = 处理请求
    • 响应度量 = 200ms 内响应
  • “服务器宕机后 30 秒内切换”
    • 刺激 = 服务器宕机
    • 响应 = 切换到备用
    • 响应度量 = 30 秒内
    • 属性 = 可用性

2025-11 案例真题对应

  • 题干:“集成新的 API”对应(刺激);“故障恢复时间 ≤ 30 秒”对应(响应度量);“系统峰值时段”对应(环境)。

B. 六类质量属性 × 各 3 场景实例

B1 可用性 Availability

关注:系统失效频率、失效时恢复速度。

#场景描述度量
1服务器宕机后切换备用切换时间 ≤ 30 秒
2月度停机时长≤ 5 分钟(99.99%)
3数据库故障数据零丢失

战术清单

  • 错误检测:Ping/Echo、心跳 Heartbeat、异常 Exception
  • 错误恢复:主动冗余(热备)、被动冗余(暖备)、备件 Spare、表决、状态再同步、回滚、降级、重试、重启
  • 错误预防:服务从服务中移除、事务、进程监视器

B2 可修改性 Modifiability

关注:变更成本。

#场景度量
1新增支付方式(微信/支付宝)1 周内上线
2UI 主题切换不影响业务逻辑
3增加业务字段修改 ≤ 3 处代码

战术清单

  • 局部化修改:维持语义一致性、模块分解、模块通用化、预期期望变更
  • 防止连锁反应:信息隐藏、接口与实现分离、维持现有接口、限制通信路径、使用中介者
  • 推迟绑定时间:运行时注册、配置文件、多态、组件替换、遵守已发布协议

B3 性能 Performance

关注:处理事件延迟与吞吐。

#场景度量
1用户下单平均 TPS ≥ 1000
2响应时间P95 ≤ 200ms
3双 11 峰值10 倍平时流量不崩溃

战术清单

  • 资源需求:提高计算效率、减少计算开销、管理事件率、控制采样频率
  • 资源管理:引入并发、维持数据/计算多副本、增加资源
  • 资源仲裁(调度):FIFO、固定优先级、动态优先级(轮转)、SJF、静态/动态调度

B4 安全性 Security

关注:抗攻击、数据机密完整可用。

#场景度量
1用户登录身份验证(密码+短信验证码)
2数据存储AES-256 加密
3攻击防御抵御 SQL 注入(OWASP Top 10)

战术清单

  • 抵抗攻击:身份验证(认证)、用户授权、数据加密、限制访问、维护数据完整性
  • 检测攻击:入侵检测、异常行为检测/比较
  • 从攻击中恢复:审计跟踪 audit trail、恢复

B5 可测试性 Testability

关注:通过测试发现错误容易度。

#场景度量
1单元测试覆盖率 ≥ 80%
2接口测试支持录制/回放
3模块测试可独立部署、独立测试

战术清单

  • 输入/输出管理:录制/回放(Record/Playback)、接口与实现分离
  • 内部监视:内置监视器

B6 易用性 Usability

关注:用户完成任务容易度。

#场景度量
1新用户首次下单5 分钟内完成
2误操作支持撤销
3多语言切换不需重启

战术清单

  • 运行时战术:任务模型、用户模型、系统模型
  • 设计时战术:用户接口分离
  • 支持用户主动:取消、撤销、聚合、多个视图、历史、保存

C. 效用树(Utility Tree)构建实例

结构(4 层)

根 (Utility)
  ├── 可用性 Availability
  │   ├── 故障检测
  │   │   ├── 场景 1(心跳检测)(H, M)
  │   │   └── 场景 2(宕机切换)(H, H)
  │   └── 数据可靠性
  │       └── 场景 3(数据 0 丢失)(M, H)
  ├── 性能 Performance
  │   ├── 延迟
  │   │   └── 场景 4(P95 < 200ms)(H, H)
  │   └── 吞吐
  │       └── 场景 5(TPS 1000)(H, M)
  ├── 可修改性
  │   └── 场景 6(新增支付方式 1 周)(M, M)
  └── 安全性
      └── 场景 7(AES-256)(H, L)

优先级标记 (Importance, Difficulty)

  • (H, H) = 高重要性 × 高难度 → 最优先关注
  • (H, M) = 高重要性 × 中难度 → 次优
  • (M, *) = 中重要性 → 第三
  • (L, *) = 低优先级

IMPORTANT

效用树构建套路 callout(四步)

  1. 列质量属性:从根开始,至少 4 类(A/M/P/S)
  2. 细化属性:每个属性 1~3 个属性细化(如”延迟”/“吞吐”)
  3. 列场景:每细化 1~3 个场景,含六要素
  4. 排序:(重要性, 实现难度) 二维投票,(H,H) 最高优先级

电商系统效用树(完整构建示例)

图 C:电商系统效用树(H=High / M=Medium / L=Low)

IMPORTANT

优先级最高的 4 个场景:(H,H) 的 场景2 宕机切换、场景3 数据 0 丢失、场景4 P95 200ms。架构评估重点围绕这 4 个场景做方法分析。

D. ATAM 架构权衡分析法(必考,论文级深度)

9 步流程

图 D:ATAM 9 步流程(来源:教材第 2 版 §3.7.3)

9 步详细操作

步骤名称主要活动
0ATAM 准备组建评估团队、确定参与者、收集材料
1ATAM 方法展示向干系人介绍 ATAM 方法、流程
2商业动机展示业务目标、约束、驱动因素
3架构展示架构视图、关键决策、技术选型
4架构方法识别识别使用的架构风格 / 模式(如分层+微服务)
5效用树生成 + 场景优先级构建效用树、确定优先级最高场景
6架构方法分析针对高优先级场景,识别敏感点 / 权衡点 / 风险点
7场景头脑风暴 + 投票干系人提出场景,按重要性 / 难度投票排序
8架构方法再次分析针对新场景再次分析
9结果呈现输出风险点 / 非风险点 / 敏感点 / 权衡点报告

关键产出四要素

要素定义判定示例
敏感点 Sensitivity Point影响某单个质量属性的属性心跳检测间隔 → 影响可用性
权衡点 Tradeoff Point影响多个质量属性的属性增加数据副本数 → 影响可用性(+)+ 性能(-)+ 成本(-)
风险点 Risk可能引发问题的决策单点数据库 → 风险
非风险点 Non-Risk已验证无问题的决策使用成熟开源组件 Redis

IMPORTANT

关键产出判定流程 callout

  1. 看属性 X:是否只影响 1 个质量属性?
    • 是 → 敏感点
    • 否 → 权衡点(影响 ≥2)
  2. 看是否有”隐患”(如单点 / 瓶颈)?是 → 风险点
  3. 看是否”已验证安全”?是 → 非风险点

常考示例

  • “使用 Redis 缓存降低 60% 数据库压力” → 性能敏感点
  • “心跳检测间隔 5s” → 可用性敏感点
  • “增加 3 副本” → 可用性 vs 性能 vs 成本权衡点
  • “单一数据库” → 风险点
  • “使用 SSL/TLS 加密通信” → 非风险点(成熟方案)

真题举一反三

2022-11 案例题:某系统使用 Redis 缓存,缓存命中率影响响应时间。这是什么点?

  • 解:性能敏感点(缓存大小单一影响性能)

2024-05 案例题:某系统增加数据冗余副本,提升了可用性,但增加了写入延迟。这是什么点?

  • 解:权衡点(同时影响可用性 + 性能)

2025-11 案例题:某核心交易系统所有数据存于单点 MySQL,无主备。这是什么点?

  • 解:风险点(单点故障)

E. SAAM 软件架构分析法

SAAM 6 步流程

图 E:SAAM 6 步流程(来源:教材第 2 版 §3.7.3)

关键概念

概念含义
直接场景 Direct Scenario当前架构直接支持,无需修改
间接场景 Indirect Scenario需修改架构才能支持
场景交互 Scenario Interaction多个间接场景修改同一构件 → 耦合度高 → 设计差

IMPORTANT

SAAM 关键结论 callout

  • 场景交互越多 → 构件被多个场景修改 → 高耦合 → 设计越差
  • SAAM 重点关注可修改性评估(单一属性,对比 ATAM 多属性权衡)
  • SAAM 是最早的架构评估法,ATAM 是其演化

真题举一反三

2023-05 综合题:SAAM 第 3 步场景分类包含哪两类?

  • 解:直接场景 + 间接场景

2024-05 案例题:SAAM 评估时发现某构件被 5 个间接场景同时修改,说明什么?

  • 解:该构件耦合度高,设计差(场景交互判定)

F. 四评估法区分(必考)

四方法对比表

方法全称关注阶段输出
SAAMSoftware Architecture Analysis Method单一属性(可修改性)中后期场景交互报告
ATAMArchitecture Tradeoff Analysis Method多属性权衡中后期风险点 / 敏感点 / 权衡点
ARIDArchitecture Reviews for Intermediate Design中间件 / 构件可复用性中段(设计中期)复用度评估
CBAMCost Benefit Analysis Method成本收益ATAM 后投资决策

IMPORTANT

四方法记忆 callout

  • SAAM = 最早、单一可修改性
  • ATAM = 多属性权衡(最常考)
  • ARID = 中间件复用、设计中期
  • CBAM = 成本收益(钱)

真题举一反三

2021-11 综合题:评估某构件在不同上下文的复用度,应用什么方法?

  • 解:ARID

2024-11 综合题:在 ATAM 之后,决定投资哪个架构改进方案,应用什么方法?

  • 解:CBAM

G. 论文段落模板

G1 ATAM 论文段落(800 字骨架)

“2023 年 X 月,我作为系统架构设计师负责某银行核心交易系统的架构评估项目。该项目采用 Spring Cloud 微服务架构,含 20 个核心服务,日均交易 1000 万笔。为评估架构在’高可用’与’高性能’上的权衡,我引入 SEI 的 ATAM(架构权衡分析法)方法开展评估。

评估过程

  1. 准备阶段:组建 7 人评估团队(架构师 + 开发负责人 + DBA + 运维 + 业务专家 + SEI 评估师 + 记录员);收集架构文档、性能数据、故障历史。
  2. 第 1 阶段:商业动机展示——业务目标’可用性 99.99%、TPS 5000、新功能上线周期 ≤ 1 周’;架构展示——展示分层 + 微服务 + Redis 集群 + MySQL 主从 + Kafka;识别架构方法(事件驱动 + 数据库读写分离)。
  3. 效用树构建:根 → 4 质量属性 → 12 细化 → 28 场景。投票选出 (H,H) 优先级最高的 5 个场景(如双 11 峰值 1 万 TPS、机房故障 30s 内切换、新增信用卡支付 1 周上线)。
  4. 架构方法分析:针对每场景分析架构方法的影响。发现 8 个风险点(如订单服务依赖单点 Redis、消息队列无死信处理、数据库主从延迟达 5 秒)、5 个敏感点(Redis 缓存大小影响性能、心跳间隔影响可用性)、3 个权衡点(增加 MySQL 副本数:可用性↑但写入性能↓成本↑)。

改进效果:评估报告推动 3 项重大改造——Redis 哨兵集群化、Kafka 死信队列、MySQL 读写一致性优化;上线后可用性从 99.95% 升至 99.995%,TPS 峰值从 3000 提升到 8000。“

G2 SAAM 论文段落(800 字骨架)

“某 ERP 系统已运行 5 年,为评估其’可修改性’,我选用 SAAM 方法。

评估过程

  1. 场景形成:与业务方讨论,形成 20 个变更场景(如新增报销类型、调整审批流程、对接新支付通道)。
  2. 架构描述:当前架构为单体 Java EE,含 30 个模块,模块间通过 EJB 调用。
  3. 场景分类:直接场景 8 个(不需修改)+ 间接场景 12 个(需修改)。
  4. 间接场景评估:每个间接场景需修改的模块数从 1~7 不等。
  5. 场景交互评估:发现 ‘core-service’ 模块被 7 个间接场景修改——耦合度过高
  6. 改进建议:拆分 core-service 为 4 个独立模块,引入 DDD 限界上下文。

效果:重构后场景交互从平均 3.2 降至 1.5,新功能上线周期从 4 周缩短到 1.5 周。“

H. 反查表

考点关键点真题锚点
质量属性六要素刺激源/刺激/制品/环境/响应/响应度量2025-11§A
可用性战术心跳/Ping/冗余/重试2022-11§B1
可修改性战术信息隐藏/接口分离/中介者2024-05§B2
性能战术并发/缓存/调度2025-11§B3
效用树四层结构根→属性→细化→场景2024-11§C
优先级 (M,L)重要性 × 难度2024-11§C
ATAM 9 步0~9 步2022-11, 2024-05, 2025-11§D
ATAM 第一阶段1~6 步2024-11§D
ATAM 第二阶段7~9 步2024-11§D
敏感点影响单个质量属性2022-11§D
权衡点影响多个质量属性2024-05, 2025-11§D
风险点 / 非风险点是否有隐患2025-11§D
SAAM 6 步形成场景→描述→分类→评估→交互→报告2023-05§E
SAAM 直接/间接场景直接支持 vs 需修改2023-05§E
SAAM 场景交互交互越多耦合越高2024-05§E
ARID 中间件复用设计中期2021-11§F
CBAM 成本收益ATAM 后2024-11§F
四评估法对比单一/多属性/复用/成本综合§F

记忆口诀 / 易错点汇总

  1. 六要素:刺激源 / 刺激 / 制品 / 环境 / 响应 / 响应度量
  2. 六质量属性:可用性 / 可修改性 / 性能 / 安全性 / 可测试性 / 易用性(口诀:可·改·性·安·测·易
  3. ATAM 9 步:0 准备 → 1 方法 → 2 商业 → 3 架构 → 4 方法识别 → 5 效用树 → 6 分析 → 7 场景 → 8 再分析 → 9 报告
  4. SAAM 6 步:形成 → 描述 → 分类 → 评估 → 交互 → 报告
  5. 敏感点 vs 权衡点:单属性 → 敏感;多属性 → 权衡
  6. 四评估法:SAAM 单一 / ATAM 权衡 / ARID 复用 / CBAM 成本

TIP

避坑建议

  • ATAM 第 5 步是效用树,第 6 步才做敏感点 / 权衡点分析(次序易混)
  • SAAM 关注可修改性,不是多属性
  • 敏感点和风险点不互斥——一个点可能既是敏感点又是风险点
  • 论文写 ATAM 必须给数字(场景数、风险点数、改造前后对比)

交叉引用

本系列笔记

主计划文档

详见 主计划 §3.7.2~§3.7.3 质量属性与评估 的对应内容。

外部延伸

  • 官方教材:《系统架构设计师教程(第 2 版)》§3.7.2~§3.7.3
  • 经典著作:Bass《Software Architecture in Practice》(SEI 三部曲之一)
  • 真题练习:2020-2025 案例第 1 题 + 论文

自测题

  1. 六要素:写出质量属性场景六要素。
  2. 效用树:构建一个”在线教育系统”的效用树,至少 4 个 (H,H) 场景。
  3. ATAM 9 步:默写 9 步名称。
  4. 判定:使用 Sentinel 熔断器降低级联故障,是什么点?(答:可用性敏感点)
  5. 判定:增加数据冗余副本提升可用性但增加延迟,是什么点?(答:权衡点)
  6. SAAM:场景交互多说明什么?(答:耦合度高,设计差)

IMPORTANT

如果只能”看着面熟”但说不出来,说明还没真正掌握,建议回看对应章节并多做真题。


下一篇导引设计模式 23 种逐个详解 将讲述每种 GoF 模式的意图、结构、角色与真题考法,帮助你掌握设计模式全部考点。