软件的质量属性
软件系统与架构评估的质量属性
核心区别与联系
为了更清晰地展示,可以用一个表格来对比:
| 维度 | 软件系统的质量属性 | 面向架构评估的质量属性 |
|---|---|---|
| 关注点 | 软件产品本身的质量 | 架构设计对实现这些质量属性的支持能力和潜在风险 |
| 范围 | 全面且通用,包含所有内在和外在特性 | 聚焦且有选择性,重点关注受架构影响大的属性(尤其是非功能性需求) |
| 视角 | “是什么” - 系统的最终状态和表现 | “如何实现”与“实现得怎么样” - 设计决策与评估分析 |
| 阶段 | 贯穿整个软件生命周期(开发、运行、维护) | 主要在架构设计阶段和架构评审阶段 |
| 关系 | 是目标,是终点 | 是手段,是路径,是确保达成目标的保障 |
一个生动的比喻:
- 软件系统的质量属性 就像你对一辆汽车的期望:
- 跑得快(性能)
- 不容易坏(可靠性)
- 省油(效率)
- 舒适(可用性)
- 容易修理和保养(可维护性)
- 面向架构评估的质量属性 就像汽车设计师和评测专家在评估设计图纸和底盘结构时关注的点:
- 这个底盘设计是否方便以后升级发动机?(可修改性/可扩展性)
- 悬挂系统的设计是否易于进行安全测试?(可测试性)
- 车身结构在碰撞中能否保护乘客?(安全性 - 对应系统的安全性、可靠性)
- 零部件布局是否合理,便于维修工更换?(可维护性)
软件系统的质量属性
这是指软件产品本身所应具备的内在质量特性。它关注的是最终交付的系统在运行时和开发时所表现出的品质。这些属性是广泛适用的,是衡量一个软件好坏的标准。
基于软件系统的生命周期,可将软件系统的质量属性分为开发期质量属性和运行期质量属性2部分。

架构评估的质量属性
这是在评估一个软件架构时,我们特别关注的那些质量属性。它关注的是架构设计决策如何影响和支撑系统质量属性的实现。它更侧重于架构的“能力”和“风险”。

可靠性和可⽤性的区别:假设有两家云存储服务提供商:Provider A 和 Provider B。
Provider A 的服务在过去⼀年中从未发⽣过故障,⽤户可以随时访问和上传⽂件。这表明 Provider A 的系统具有很⾼的可靠性,因为它极少出现故障。
Provider B 的服务在过去⼀年中总共停机了5⼩时,但它提供了冗余备份和快速恢复机制,因此⽤户在服务中断后很快就可以继续使⽤。这表明 Provider B 的系统具有很⾼的可⽤性,因为它在⼤部分时间内都是可操作的,尽管它发⽣了⼀些故障。
在这个示例中,Provider A 的系统更可靠,因为它⼏乎没有发⽣故障。Provider B 的系统更可⽤,因为它尽管发⽣了⼀些故障,但它能够快速恢复,以确保⽤户可以继续使⽤。可靠性强调系统不发⽣故障,⽽可⽤性强调系统在需要时可供使⽤。两者都是衡量系统性能和质量的重要标准,但它们关注的方面略有不同。
1. 性能
系统响应能⼒,通过单位时间处理事务数或单个事务耗时衡量。重点优化资源管理和调度策略。
2. 可靠性
是指软件系统在⼀段时间内保持正常运⾏⽽不发⽣故障的能⼒。
系统在错误或意外情况下维持功能的能⼒,通过MTTF/MTBF量化。 重点关注错误处理机制。
- 容错:错误发⽣时⾃动修复(如冗余机制)
- 健壮性:错误时安全终⽌(如异常处理)
3. 可用性
系统正常运⾏时间⽐例,通过故障间隔时间和恢复速度衡量。依赖故障检测与恢复策略。
是指系统在需要的时候可供使⽤的能⼒。
4. 安全性
阻⽌⾮授权访问并保障数据安全,涵盖机密性、完整性、可控性等 维度。需平衡安全与性能
5. 可修改性
以低成本⾼效修改系统的能⼒,包括维护、扩展和重组。需通过⾼ 内聚低耦合设计实现
- 可维护性:局部化修改(模块化)
- 可扩展性:松耦合接⼝(插件化)
- 结构重组:动态配置(微服务)
- 可移植性:环境⽆关性
6. 功能性
系统完成预期任务的能⼒,需通过架构设计协调多组件协作。
7. 可变性
架构适应未来变更的能⼒,⽀持产品线开发或多版本演进。
8. 互操作性
系统与其他系统交换数据或服务的能⼒,依赖标准化接⼝协议
实现质量属性的一般策略
实现质量属性的一般策略,不同策略主要针对一个或多个软件质量属性。
- Ping/Echo主要提高系统的可用性;
- 限制访问主要提高系统的安全性;
- 运行时注册主要提高系统的可修改性;
- 接口.实现分离主要提高系统的可修改性;
- 信息隐藏主要提高系统的可修改性;
- 主动冗余提高系统的可靠性;
- 队列调度主要提高系统的性能;
- 记录/回放主要提高系统的可测试性,等等。

质量属性场景描述
质量属性场景是⼀种⽤于描述系统如何满⾜特定质量属性需求的情境或情景。
刻画质量属性的手段由六部分组成:刺激源、刺激、环境、制品、响应、响应度量;
- 刺激源(谁):这是某个⽣成该刺激的实体(⼈、计算机系统或者任何其他刺激器)。
- 刺激(做什么):该刺激是当刺激到达系统时需要考虑的条件。
- 环境(在什么样的环境下)∶ 该刺激在某些条件内发⽣。当激励发⽣时,系统可能处于过载、运⾏或者其他情况。
- 制品(对哪个功能):某个制品被激励。这可能是整个系统,也可能是系统的⼀部分。
- 响应(得到什么反馈):该响应是在激励到达后所采取的⾏动。
- 响应度量(对反馈进⾏度量)︰当响应发⽣时,应当能够以某种⽅式对其进⾏度量,以对需求进⾏测试。