本页脑图:质量属性与评估
质量与评估
六要素
- 刺激源
- 刺激
- 环境
- 制品
- 响应
- 响应度量
属性
- 性能
- 可用性
- 安全性
- 可修改性
- 可测试性
- 易用性
ATAM
- 业务目标
- 候选架构
- 效用树
- 场景排序
输出
- 敏感点
- 权衡点
- 风险点
- 非风险点
源激境品应量;业务目标 → 质量场景 → 架构决策 → 风险权衡。
质量属性场景六要素
几乎必考案例题六要素的作用是把一句模糊需求变成架构可验证的目标。不要写“系统响应快”,要写“在 1 万并发登录时,认证服务 P99 响应时间小于 200ms”。
| 要素 | 问法 | 例子 | 易错点 |
|---|---|---|---|
| 刺激源 | 谁触发? | 外部用户、黑客、运维人员、下游服务、硬件故障。 | 不要写成系统响应。 |
| 刺激 | 做了什么? | 并发请求、非法登录、节点宕机、需求变更。 | 必须是具体动作或事件。 |
| 环境 | 什么情况下? | 正常运行、大促高峰、故障恢复、弱网环境。 | 环境影响响应策略,不能省略。 |
| 制品 | 作用于哪里? | 认证服务、权限服务、数据库、缓存、整个系统。 | 要定位到架构对象。 |
| 响应 | 系统怎么做? | 扩容、熔断、降级、重试、告警、拒绝访问。 | 不要写效果,要写动作。 |
| 响应度量 | 做得怎样? | P99 小于 200ms,RTO 小于 30 秒,可用性 99.99%。 | 必须可量化。 |
口诀:谁(源)做了什么(激),在什么情况下(境),作用于哪里(品),系统怎么反应(应),反应得好不好(量)。
六大常考质量属性
性能
关注响应时间、吞吐量、并发数、资源利用率。常用缓存、异步、负载均衡、索引、读写分离。指标写 QPS、TPS、P95/P99。
可用性
关注故障时能否继续服务。常用冗余、心跳、故障转移、熔断降级、限流。指标写 SLA、MTBF、MTTR、RTO、RPO。
安全性
关注认证、授权、保密性、完整性、审计。常用加密、RBAC/ABAC、最小权限、审计日志、零信任。
可修改性
关注需求变化成本。常用模块化、接口隔离、分层、配置化、插件化。指标写影响模块数、改造周期、回归范围。
可测试性
关注是否容易验证。常用依赖注入、Mock、契约测试、自动化测试、日志和可观测性。
易用性
关注用户完成任务的效率和错误率。常用一致交互、明确提示、输入校验、容错设计。
质量属性常见战术细化
| 质量属性 | 架构战术 | 具体技术 | 副作用 | 论文指标 |
|---|---|---|---|---|
| 性能 | 减少计算、减少通信、并发处理、资源复用 | Redis、CDN、连接池、异步队列、批处理、索引 | 缓存一致性、异步延迟、复杂度上升 | P99、QPS、吞吐、CPU、缓存命中率 |
| 可用性 | 故障检测、故障恢复、故障预防 | 心跳、健康检查、主从切换、熔断、限流、降级、多活 | 成本增加、数据同步复杂 | SLA、RTO、RPO、MTTR、错误率 |
| 安全性 | 抵抗攻击、检测攻击、从攻击中恢复 | 认证、授权、加密、WAF、审计、备份、零信任 | 性能开销、权限管理复杂 | 拦截率、审计覆盖率、漏洞数、越权次数 |
| 可修改性 | 局部化修改、防止连锁影响、延迟绑定 | 模块化、接口隔离、配置中心、插件化、领域边界 | 抽象过度、部署单元增加 | 变更周期、影响模块数、回归范围 |
| 可测试性 | 控制输入输出、可观测、隔离依赖 | Mock、契约测试、日志、追踪、测试数据管理 | 测试维护成本 | 覆盖率、缺陷发现率、自动化执行时间 |
| 易用性 | 用户主动性、系统反馈、错误恢复 | 统一交互、提示、撤销、默认值、自助恢复 | 前端复杂度增加 | 任务完成率、错误率、满意度 |
案例题高分点:质量属性不能单独写技术,必须补“响应度量”。例如“增加 Redis”只是一项措施,“P99 从 600ms 降到 180ms”才是可验收结果。
常见架构战术:把属性落成方案
| 目标 | 可写措施 | 适合指标 | 风险 |
|---|---|---|---|
| 提高性能 | Redis 缓存、CDN、异步队列、数据库索引、读写分离、批处理。 | P99、QPS、缓存命中率。 | 缓存一致性、异步延迟。 |
| 提高可用性 | 多副本、主从切换、熔断降级、限流、故障隔离、多活容灾。 | SLA、RTO、RPO、错误率。 | 成本上升、数据一致性复杂。 |
| 提高安全性 | 网关鉴权、Token 签名、mTLS、数据加密、审计告警、权限最小化。 | 拦截率、审计覆盖率、漏洞数。 | 性能损耗、权限配置复杂。 |
| 提高可修改性 | DDD、微服务、分层、接口标准化、配置中心、领域事件。 | 变更周期、影响模块数。 | 服务数量增加,治理复杂。 |
ATAM:架构权衡分析法
ATAM 用来回答:这个架构能不能满足重要质量属性?哪里有风险?一个决策改善了什么,又牺牲了什么?
九步记忆
- 介绍 ATAM 方法。
- 介绍业务目标。
- 介绍候选架构。
- 识别架构方法。
- 生成质量属性效用树。
- 分析架构方法。
- 头脑风暴并排序场景。
- 再次分析架构方法。
- 形成评估结果。
四类结果
- 敏感点:某决策显著影响一个属性,如缓存 TTL 影响数据新鲜度。
- 权衡点:某决策同时影响多个属性,如加密提升安全但降低性能。
- 风险点:可能导致目标无法达成,如单点 Redis。
- 非风险点:已有措施能满足目标,如主从切换已演练。
敏感点、权衡点、风险点怎么区分
| 类型 | 判断方法 | 例子 | 答题句式 |
|---|---|---|---|
| 敏感点 | 某参数或决策变化,会显著影响一个质量属性。 | 缓存 TTL 越长,性能越好,但数据新鲜度越差。 | 【决策/参数】是【质量属性】的敏感点。 |
| 权衡点 | 一个决策同时影响多个质量属性,有利有弊。 | 加密提升安全性,但增加 CPU 开销和响应延迟。 | 【决策】在【属性A】与【属性B】之间形成权衡。 |
| 风险点 | 当前架构可能导致重要场景达不到指标。 | 单 Redis 节点故障会导致 Token 校验不可用。 | 若【故障/变化】发生,可能导致【目标】无法满足。 |
| 非风险点 | 已有设计和验证能满足质量场景。 | Redis Cluster 已验证主节点故障 30 秒内切换。 | 由于已有【措施】,该场景当前不构成风险。 |
效用树怎么写
效用树从“总体效用”开始,下一层是质量属性,再往下是具体场景,叶子节点标注优先级和实现难度。
| 质量属性 | 场景 | 优先级/难度 | 可能战术 |
|---|---|---|---|
| 性能 | 2 万并发登录时,P99 小于 200ms。 | H/M | Redis、网关限流、读写分离。 |
| 可用性 | 缓存主节点宕机后 30 秒内恢复。 | H/M | Redis Cluster、哨兵、降级策略。 |
| 安全性 | 非法 Token 请求被网关拦截并审计。 | H/L | JWT 签名、黑名单、审计日志。 |
| 可修改性 | 新增登录方式不影响权限服务。 | M/M | 接口隔离、策略模式、配置化。 |
案例题答题模板
业务问题 → 质量属性 → 六要素场景 → 架构战术 → ATAM 风险/权衡 → 量化指标。
示例:在大促高峰环境下,外部用户高并发访问登录接口,作用于认证服务。系统通过 API 网关限流、Redis 缓存 Token、K8s 水平扩容和下游熔断处理请求,保证 2 万并发下 P99 响应时间小于 200ms,错误率低于 0.1%。该方案的权衡点是缓存提升性能但带来一致性风险,因此采用短 TTL、主动失效和审计补偿机制。
相关错题归档
| 错题 | 归属知识点 | 记忆点 |
|---|---|---|
| 题 2 串联系统可靠性 | 可靠性计算 | 串联系统可靠度相乘。 |
| 题 10 软件可靠性 | 可靠性定义与估算 | 规定环境、规定时间、无故障运行概率;可靠性可估算。 |