软考
在游戏中攻打此考点质量属性与架构评估(ATAM/SAAM)深化
六类质量属性 × 各 3 场景实例 / 效用树完整构建 / ATAM 9 步详操作 / SAAM 6 步 / ARID·CBAM 区分 / 敏感点·权衡点·风险点·非风险点判定,案例第 1 题必考
一句话定位
案例第 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 周内上线 |
| 2 | UI 主题切换 | 不影响业务逻辑 |
| 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(四步):
- 列质量属性:从根开始,至少 4 类(A/M/P/S)
- 细化属性:每个属性 1~3 个属性细化(如”延迟”/“吞吐”)
- 列场景:每细化 1~3 个场景,含六要素
- 排序:(重要性, 实现难度) 二维投票,(H,H) 最高优先级
电商系统效用树(完整构建示例)
IMPORTANT
优先级最高的 4 个场景:(H,H) 的 场景2 宕机切换、场景3 数据 0 丢失、场景4 P95 200ms。架构评估重点围绕这 4 个场景做方法分析。
D. ATAM 架构权衡分析法(必考,论文级深度)
9 步流程
9 步详细操作
| 步骤 | 名称 | 主要活动 |
|---|---|---|
| 0 | ATAM 准备 | 组建评估团队、确定参与者、收集材料 |
| 1 | ATAM 方法展示 | 向干系人介绍 ATAM 方法、流程 |
| 2 | 商业动机展示 | 业务目标、约束、驱动因素 |
| 3 | 架构展示 | 架构视图、关键决策、技术选型 |
| 4 | 架构方法识别 | 识别使用的架构风格 / 模式(如分层+微服务) |
| 5 | 效用树生成 + 场景优先级 | 构建效用树、确定优先级最高场景 |
| 6 | 架构方法分析 | 针对高优先级场景,识别敏感点 / 权衡点 / 风险点 |
| 7 | 场景头脑风暴 + 投票 | 干系人提出场景,按重要性 / 难度投票排序 |
| 8 | 架构方法再次分析 | 针对新场景再次分析 |
| 9 | 结果呈现 | 输出风险点 / 非风险点 / 敏感点 / 权衡点报告 |
关键产出四要素
| 要素 | 定义 | 判定示例 |
|---|---|---|
| 敏感点 Sensitivity Point | 影响某单个质量属性的属性 | 心跳检测间隔 → 影响可用性 |
| 权衡点 Tradeoff Point | 影响多个质量属性的属性 | 增加数据副本数 → 影响可用性(+)+ 性能(-)+ 成本(-) |
| 风险点 Risk | 可能引发问题的决策 | 单点数据库 → 风险 |
| 非风险点 Non-Risk | 已验证无问题的决策 | 使用成熟开源组件 Redis |
IMPORTANT
关键产出判定流程 callout:
- 看属性 X:是否只影响 1 个质量属性?
- 是 → 敏感点
- 否 → 权衡点(影响 ≥2)
- 看是否有”隐患”(如单点 / 瓶颈)?是 → 风险点
- 看是否”已验证安全”?是 → 非风险点
常考示例:
- “使用 Redis 缓存降低 60% 数据库压力” → 性能敏感点
- “心跳检测间隔 5s” → 可用性敏感点
- “增加 3 副本” → 可用性 vs 性能 vs 成本权衡点
- “单一数据库” → 风险点
- “使用 SSL/TLS 加密通信” → 非风险点(成熟方案)
真题举一反三
2022-11 案例题:某系统使用 Redis 缓存,缓存命中率影响响应时间。这是什么点?
- 解:性能敏感点(缓存大小单一影响性能)
2024-05 案例题:某系统增加数据冗余副本,提升了可用性,但增加了写入延迟。这是什么点?
- 解:权衡点(同时影响可用性 + 性能)
2025-11 案例题:某核心交易系统所有数据存于单点 MySQL,无主备。这是什么点?
- 解:风险点(单点故障)
E. SAAM 软件架构分析法
SAAM 6 步流程
关键概念
| 概念 | 含义 |
|---|---|
| 直接场景 Direct Scenario | 当前架构直接支持,无需修改 |
| 间接场景 Indirect Scenario | 需修改架构才能支持 |
| 场景交互 Scenario Interaction | 多个间接场景修改同一构件 → 耦合度高 → 设计差 |
IMPORTANT
SAAM 关键结论 callout:
- 场景交互越多 → 构件被多个场景修改 → 高耦合 → 设计越差
- SAAM 重点关注可修改性评估(单一属性,对比 ATAM 多属性权衡)
- SAAM 是最早的架构评估法,ATAM 是其演化
真题举一反三
2023-05 综合题:SAAM 第 3 步场景分类包含哪两类?
- 解:直接场景 + 间接场景
2024-05 案例题:SAAM 评估时发现某构件被 5 个间接场景同时修改,说明什么?
- 解:该构件耦合度高,设计差(场景交互判定)
F. 四评估法区分(必考)
四方法对比表
| 方法 | 全称 | 关注 | 阶段 | 输出 |
|---|---|---|---|---|
| SAAM | Software Architecture Analysis Method | 单一属性(可修改性) | 中后期 | 场景交互报告 |
| ATAM | Architecture Tradeoff Analysis Method | 多属性权衡 | 中后期 | 风险点 / 敏感点 / 权衡点 |
| ARID | Architecture Reviews for Intermediate Design | 中间件 / 构件可复用性 | 中段(设计中期) | 复用度评估 |
| CBAM | Cost 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(架构权衡分析法)方法开展评估。
评估过程:
- 准备阶段:组建 7 人评估团队(架构师 + 开发负责人 + DBA + 运维 + 业务专家 + SEI 评估师 + 记录员);收集架构文档、性能数据、故障历史。
- 第 1 阶段:商业动机展示——业务目标’可用性 99.99%、TPS 5000、新功能上线周期 ≤ 1 周’;架构展示——展示分层 + 微服务 + Redis 集群 + MySQL 主从 + Kafka;识别架构方法(事件驱动 + 数据库读写分离)。
- 效用树构建:根 → 4 质量属性 → 12 细化 → 28 场景。投票选出 (H,H) 优先级最高的 5 个场景(如双 11 峰值 1 万 TPS、机房故障 30s 内切换、新增信用卡支付 1 周上线)。
- 架构方法分析:针对每场景分析架构方法的影响。发现 8 个风险点(如订单服务依赖单点 Redis、消息队列无死信处理、数据库主从延迟达 5 秒)、5 个敏感点(Redis 缓存大小影响性能、心跳间隔影响可用性)、3 个权衡点(增加 MySQL 副本数:可用性↑但写入性能↓成本↑)。
改进效果:评估报告推动 3 项重大改造——Redis 哨兵集群化、Kafka 死信队列、MySQL 读写一致性优化;上线后可用性从 99.95% 升至 99.995%,TPS 峰值从 3000 提升到 8000。“
G2 SAAM 论文段落(800 字骨架)
“某 ERP 系统已运行 5 年,为评估其’可修改性’,我选用 SAAM 方法。
评估过程:
- 场景形成:与业务方讨论,形成 20 个变更场景(如新增报销类型、调整审批流程、对接新支付通道)。
- 架构描述:当前架构为单体 Java EE,含 30 个模块,模块间通过 EJB 调用。
- 场景分类:直接场景 8 个(不需修改)+ 间接场景 12 个(需修改)。
- 间接场景评估:每个间接场景需修改的模块数从 1~7 不等。
- 场景交互评估:发现 ‘core-service’ 模块被 7 个间接场景修改——耦合度过高。
- 改进建议:拆分 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 |
记忆口诀 / 易错点汇总
- 六要素:刺激源 / 刺激 / 制品 / 环境 / 响应 / 响应度量
- 六质量属性:可用性 / 可修改性 / 性能 / 安全性 / 可测试性 / 易用性(口诀:可·改·性·安·测·易)
- ATAM 9 步:0 准备 → 1 方法 → 2 商业 → 3 架构 → 4 方法识别 → 5 效用树 → 6 分析 → 7 场景 → 8 再分析 → 9 报告
- SAAM 6 步:形成 → 描述 → 分类 → 评估 → 交互 → 报告
- 敏感点 vs 权衡点:单属性 → 敏感;多属性 → 权衡
- 四评估法: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 题 + 论文
自测题
- 六要素:写出质量属性场景六要素。
- 效用树:构建一个”在线教育系统”的效用树,至少 4 个 (H,H) 场景。
- ATAM 9 步:默写 9 步名称。
- 判定:使用 Sentinel 熔断器降低级联故障,是什么点?(答:可用性敏感点)
- 判定:增加数据冗余副本提升可用性但增加延迟,是什么点?(答:权衡点)
- SAAM:场景交互多说明什么?(答:耦合度高,设计差)
IMPORTANT
如果只能”看着面熟”但说不出来,说明还没真正掌握,建议回看对应章节并多做真题。
下一篇导引:设计模式 23 种逐个详解 将讲述每种 GoF 模式的意图、结构、角色与真题考法,帮助你掌握设计模式全部考点。