软件质量属性
考试趋势:本章平均每年约5~6 分。
- 质量属性题长期有记录,但单场题量波动明显,且经常与架构评估、质量场景和架构策略结合出现。
- 复习优先性能、安全性、可用性、可靠性、可修改性和可测试性,重点训练场景关键词 → 质量属性 → 架构策略的对应关系。
软件质量属性是系统可测量或可测试的属性,用于描述系统满足利益相关者需求的程度。架构设计不仅要实现功能,还要重点满足性能、安全性、可修改性、可用性和可靠性等质量属性。
1. 质量属性基础
按照软件生命周期,质量属性分为两类:
- 开发期质量属性:易理解性、可扩展性、可重用性、可测试性、可维护性、可移植性,主要影响开发、修改和演化的成本。
- 运行期质量属性:性能、可用性、安全性、可靠性、易用性、互操作性、可伸缩性、健壮性,主要体现在系统运行和用户使用过程中。
对应真题:#2024.05-20#2023.11-20#2015.11-30#2026.05-55
2. 面向架构评估的质量属性
架构评估关注的不是属性名称本身,而是架构如何实现和优化这些质量属性。真题常把一个具体场景与质量属性、架构策略连在一起考。
- 性能:关注响应时间和吞吐量;可采用扩充资源、缓存、并发处理、负载均衡、资源池和优先级调度。
- 可靠性:关注系统在错误或意外使用下维持功能的能力;可采用冗余、错误检测与恢复、异常处理、备份和恢复。相关辨析常涉及容错性、健壮性和可恢复性。
- 可用性:关注系统正常工作的时间比例和故障后的恢复速度;可采用心跳检测、冗余、故障转移、集群和备份。
- 安全性:在服务合法用户的同时阻止未授权使用;可采用认证、授权、加密、审计、隔离和入侵检测。
- 可修改性:关注修复缺陷、增加功能或改进质量属性的难易程度;可采用信息隐藏、模块化、封装以及接口与实现分离。信息隐藏还可以减少平台依赖,有利于可测试性和可移植性。
- 互操作性:关注不同系统之间交换数据和相互调用服务的难易程度。
- 可移植性:关注软件迁移到不同硬件、操作系统、编译器或运行环境的难易程度。
- 可测试性:关注构造测试、控制系统状态、观察运行结果和发现缺陷的难易程度。
- 易用性:关注用户学习和操作系统的效果,常用学习曲线、操作效率和满意度衡量。
另外,可扩展性关注适应新需求增加功能的能力,可变性关注架构经扩充或变更成为新架构的能力;可伸缩性关注用户数或数据量增加后能否维持服务质量,健壮性关注非法操作、异常输入或软硬件故障下能否保持正常运行。
可靠性计算常考:MTBF = MTTF + MTTR。当 MTTR 很小时,MTTF ≈ MTBF;“稳定性”不能直接当作可靠性的正式子特性。
对应真题:#2026.05-56#2025.11-61#2025.05-45#2024.11-10#2024.11-69#2024.11-70#2024.05-16#2024.05-47#2024.05-49#2023.11-18#2022.11-46#2021.11-40#2020.11-20#2016.11-33
3. 质量属性场景描述
只说“系统要性能好”“系统要易修改”不够具体。质量属性必须落到具体、可测量、可验证的场景中。
一个完整的质量属性场景由六部分组成:
- 刺激源:产生刺激的实体,如用户、外部系统或定时器;
- 刺激:触发系统反应的事件或条件;
- 环境:刺激发生时的运行、维护、故障等背景条件;
- 制品:受到刺激的系统、子系统、构件或数据;
- 响应:系统收到刺激后采取的行动;
- 响应度量:衡量响应是否达标的指标,如响应时间、恢复时间、错误率或人力成本。
做题时可以直接按关键词定位:
- “激励到达后所采取的行动” → 响应;
- “网络环境、系统运行状态、维护状态” → 环境;
- “单位时间处理的事务数量” → 吞吐量;
- “用户学习曲线、操作效率、满意度” → 易用性。
常见场景与属性的对应关系:
- 高并发下规定时间内返回 → 性能;
- 主站故障后自动切换并恢复 → 可用性;
- 防止非法访问并记录攻击 → 安全性;
- 上线后增加功能的时间和人力受限 → 可修改性;
- 不同系统之间交换数据和调用服务 → 互操作性。
对应真题:#2024.11-35#2024.05-18#2022.11-47#2020.11-29#2019.11-33#2018.11-37#2017.11-39#2016.11-40#2015.11-40#2014.11-36