质量属性 & 质量属性战术
案例分析第 1 题 80% 概率考,与架构风格组合,15~25 分的核心考点
⭐ 必背:6 大质量属性
运行期 3 个:性能(Performance)、可用性(Availability)、安全性(Security)
开发期 3 个:可修改性(Modifiability)、可测试性(Testability)、易用性(Usability)
口诀:「性可安 · 改测易」
注:部分教材把"可靠性"独立列出,常考的还有 可靠性、互操作性、功能性。
一、质量属性场景:6 元素描述法 ⭐⭐⭐
案例分析 必考的画图/填空 题,口诀:「源激环 · 制响度」
| 元素 | 英文 | 说明 | 例 |
|---|---|---|---|
| 刺激源 | Source | 谁产生刺激 | 用户、外部系统、内部模块 |
| 刺激 | Stimulus | 到达系统的事件 | 请求、故障、攻击、变更需求 |
| 环境 | Environment | 刺激发生时的系统状态 | 正常运行、过载、降级 |
| 制品 | Artifact | 被刺激的部分 | 整体系统、特定模块、通信链路 |
| 响应 | Response | 系统的反应活动 | 处理请求、记录、报警、降级 |
| 响应度量 | Response Measure | 响应的可测指标 | 延迟 ≤ 200ms、可用度 99.99% |
📝 答题模板(必背)
"当 [刺激源] 在 [环境] 下向 [制品] 发出 [刺激] 时,系统应做出 [响应],并在 [响应度量] 范围内完成"
例:用户(源)在 系统满载(环境)下向 商品搜索接口(制品)发出 查询请求(刺激),系统应 返回结果(响应),平均响应时间 ≤500ms,P99 ≤ 1s(响应度量)。
二、6 大质量属性 · 战术大全 ⭐⭐⭐
1. 性能(Performance)
关注处理事件的时间、吞吐、延迟
指标响应时间、吞吐量(TPS)、并发数、资源利用率
三大类战术:
- 资源需求:提高计算效率、减少计算开销、管理事件率、控制采样频率
- 资源管理:引入并发、维持数据/计算多副本、增加资源
- 资源仲裁:调度策略(FIFO、固定优先级、动态优先级、SJF)
口诀:性能 = 需求(降)+ 管理(加)+ 仲裁(调)
2. 可用性(Availability)
关注系统持续提供服务的能力,故障容忍
指标可用度 = MTBF / (MTBF + MTTR)、999... 个 9
三大类战术:
- 错误检测:Ping/echo、心跳、异常检测、时间戳
- 错误恢复(准备+修复):主动冗余、被动冗余、备件、表决、状态再同步、回滚、降级、重试
- 错误预防:服务从服务中移除、事务、进程监视器
口诀:可用性 = 检测 + 恢复 + 预防 · "测·修·防"
9 的可用度对照表 ⭐
- 2 个 9 = 99% = 年宕机 87.6 小时
- 3 个 9 = 99.9% = 年宕机 8.76 小时
- 4 个 9 = 99.99% = 年宕机 52.6 分钟
- 5 个 9 = 99.999% = 年宕机 5.26 分钟(电信级)
3. 安全性(Security)
关注CIA 三性 = 机密性、完整性、可用性 + 抗抵赖
三大类战术:
- 抵抗攻击:身份认证、用户授权、数据加密、限制访问、维护数据完整性
- 检测攻击:入侵检测(IDS/IPS)、异常行为分析
- 从攻击中恢复:审计跟踪、恢复
口诀:安全 = 抵抗 + 检测 + 恢复 · "抗·测·复"
4. 可修改性(Modifiability)
关注变更代价、变更生效时间
三大类战术:
- 局部化修改:维持语义一致性、预测期望变更、模块通用化、抽象通用服务
- 防止连锁反应:信息隐藏、接口与实现分离、维持现有接口、限制通信路径、使用中介者
- 推迟绑定时间:运行时注册、配置文件、多态、组件替换、遵循协议
口诀:可修改性 = 局部 + 防连锁 + 延迟绑定
5. 可测试性(Testability)
关注通过测试发现错误的难易程度
两大类战术:
- 输入/输出管理:记录回放、接口实现分离、特殊化访问接口
- 内部监视:内置监视器
6. 易用性(Usability)
关注用户完成任务的容易程度、系统给予的支持
三大类战术:
- 运行时战术:任务模型、用户模型、系统模型
- 设计时战术:用户接口分离
- 支持用户主动:取消、撤销、聚合、显示多个视图
三、案例分析答题大法
题型 1:给场景,判断这是什么质量属性?
关键词速查表(必背!):
| 关键词 / 指标 | 质量属性 |
|---|---|
| 响应时间、TPS、吞吐量、延迟 | 性能 |
| 宕机、恢复、MTBF、99.99%、心跳、冗余 | 可用性 |
| 加密、认证、授权、防攻击、防篡改、CIA | 安全性 |
| 未来扩展、新增功能、变更代价、解耦 | 可修改性 |
| 测试用例、回归测试、单元测试、覆盖率 | 可测试性 |
| 用户操作、学习曲线、撤销、向导 | 易用性 |
| 故障率、MTBF、错误率(不要求恢复) | 可靠性 |
| 对接外系统、协议、数据交换 | 互操作性 |
题型 2:给一段设计描述,问采用了什么战术?
| 设计手段 | 战术 → 属性 |
|---|---|
| 缓存 / CDN | 资源仲裁 → 性能 |
| 负载均衡 / 集群 | 引入并发 → 性能 / 可用性 |
| 主备热切换 | 主动冗余 → 可用性 |
| 心跳检测 | 错误检测 → 可用性 |
| HTTPS / SSL | 加密 → 安全性 |
| OAuth / 单点登录 | 身份认证 → 安全性 |
| IDS 入侵检测 | 检测攻击 → 安全性 |
| 配置文件 / 反射 | 延迟绑定 → 可修改性 |
| 接口 / 抽象类 | 信息隐藏 → 可修改性 |
| 分层架构 / MVC | 限制通信 → 可修改性 |
| Mock / Stub | 记录回放 → 可测试性 |
| 限流 / 熔断 | 资源管理 → 性能 / 可用性 |
| 降级 | 从故障恢复 → 可用性 |
题型 3:针对某质量属性提出 3 个具体设计方案
万能答题套路:战术 + 技术 + 收益
例:针对"性能"提出 3 个方案 →
- 引入缓存(Redis):把热点数据放在内存,减少数据库压力,响应时间从 200ms → 30ms。
- 负载均衡 + 水平扩展:用 Nginx 把请求分发到多个应用服务器,提升吞吐量 5 倍。
- 异步消息队列(Kafka):将耗时的非核心操作异步化,主流程 TPS 从 500 → 3000。
四、必背口诀总览
六大质量属性:性·可·安 + 改·测·易
场景六元素:源激环 · 制响度
性能战术:需求(降)· 管理(加)· 仲裁(调)
可用性战术:测 · 修 · 防
安全性战术:抗 · 测 · 复
可修改性战术:局部 · 防连锁 · 延迟绑定
✅ 自测 3 连
1. 描述质量属性场景的 6 个元素是什么?
2. 引入缓存属于哪个属性的哪类战术?
3. 99.99% 可用度对应一年宕机多长时间?
答:1) 刺激源·刺激·环境·制品·响应·响应度量 2) 性能 · 资源仲裁 3) 约 52.6 分钟。
📕 必考章节 2/3 · 质量属性 完