★ 第八章 · 软件质量属性

软件质量属性与可靠性

涵盖六大质量属性定义与战术、质量属性场景六要素、可靠性指标计算(MTBF/MTTF/MTTR)、容错与避错技术对比、可靠性增长测试等核心考点。本章是架构评估(ATAM)的基础,案例分析高频考点。

6知识小节
核心架构评估基础
★★★★★重要程度
10练习题

六大质量属性

📊六大质量属性定义与实现策略

质量属性定义量化指标实现策略(战术)
性能
Performance
系统对事件做出响应的能力响应时间、吞吐量、并发用户数控制资源(连接池/并发控制)、管理资源(调度策略)、减少计算开销(缓存/异步)
可用性
Availability
系统正常运行时间的比例可用性百分比、MTBF、MTTR错误检测(心跳/异常监控)、错误恢复(冗余/检查点)、错误预防(服务下线/事务管理)
安全性
Security
系统抵抗非授权访问和攻击的能力漏洞数、攻击成功率、响应时间认证授权、加密传输/存储、审计日志、入侵检测
可修改性
Modifiability
系统接受变更的能力和成本变更平均成本、变更平均时间局部化变更(高内聚/抽象)、防止连锁反应(接口隔离/中介)、延迟绑定(配置/插件)
可靠性
Reliability
系统在规定条件下无故障运行的能力MTBF、故障率冗余设计、容错机制、错误处理、监控告警
可测试性
Testability
系统被测试的容易程度测试覆盖率、缺陷发现率模块化设计、接口明确、依赖注入、可观测性

性能战术 vs 可用性战术区分

维度性能战术可用性战术
目标让系统响应更快让系统不宕机
核心思路减少处理时间/增加处理能力故障检测+快速恢复
典型手段缓存、异步处理、负载均衡、连接池心跳检测、冗余部署、故障转移、检查点
关注点速度、吞吐量连续性、容错
🎯
考试要点:性能关注"快",可用性关注"不宕机",可靠性关注"不出错"。缓存属于性能战术,心跳检测属于可用性战术,冗余同时服务于可用性和可靠性。可修改性的核心是"低耦合、高内聚"。
📝

质量属性场景(六要素)

📋场景六要素详解

1. 刺激源(Source):产生刺激的实体——用户、外部系统、攻击者、硬件故障等
2. 刺激(Stimulus):到达系统的事件或条件变化
3. 环境(Artifact):刺激发生时系统的运行状态(正常运行/维护/过载等)
4. 制品(Artifact):被刺激影响的系统部分(整个系统/某模块/某服务)
5. 响应(Response):系统对刺激采取的行动
6. 响应度量(Measure):度量响应是否满足要求的量化指标

📌具体场景示例

要素性能场景可用性场景安全性场景
刺激源终端用户服务器硬件外部攻击者
刺激发起查询请求CPU故障SQL注入攻击
环境正常运行,高峰时段正常运行中正常运行中
制品订单查询服务Web服务器节点用户数据库
响应处理请求并返回结果故障转移至备用节点拦截攻击并记录日志
响应度量95%请求在2秒内响应切换时间<30秒,数据不丢失100%拦截,5分钟内告警

📌更多场景示例

要素可修改性场景可靠性场景可测试性场景
刺激源开发团队网络交换机测试人员
刺激新增支付方式网络中断5分钟执行回归测试
环境设计阶段系统运行中预发布环境
制品支付模块消息队列服务订单处理流程
响应新增支付插件,无需修改核心代码消息暂存本地,网络恢复后自动补发用例自动执行,生成覆盖率报告
响应度量2人日内完成,不影响其他模块消息零丢失,延迟<10分钟覆盖率>80%,缺陷检出率>95%
🎯
考试要点:质量属性场景的六要素必须完整描述。考试中常给出一个场景描述,要求识别六要素或判断属于哪种质量属性。注意区分:性能场景关注响应时间/吞吐量,可用性场景关注故障恢复,可靠性场景关注持续无故障运行。
🎯

质量属性战术

🏍性能战术

控制计算资源:管理执行时间(调度策略)、管理事件响应(限制队列大小)
控制资源使用:连接池管理、内存管理、线程池管理
管理并发:多线程/多进程、并发控制(锁/信号量)、减少上下文切换
减少计算开销:缓存(Cache)、异步处理、负载均衡、算法优化
减少数据量:数据压缩、增量传输、分页查询

🔄可用性战术

错误检测:心跳检测(定期探测存活)、异常监控(指标/日志告警)、Ping/Echo
错误恢复:冗余(主动/被动冗余)、检查点(Checkpoint,定期保存状态)、回滚(Rollback)、重新初始化
错误预防:服务下线(从负载均衡移除后维护)、事务管理(ACID保证一致性)
故障转移:主备切换(Active-Standby)、双活部署(Active-Active)

🔧可修改性战术

局部化变更:高内聚(相关功能集中)、低耦合(减少模块间依赖)、抽象接口(隐藏实现细节)
防止连锁反应:信息隐藏、接口隔离、使用中介(Mediator)解耦
延迟绑定:配置文件、插件架构、依赖注入、服务发现
其他:模块注册、多实例、发布-订阅模式
🎯
考试要点:性能战术的核心是"快"——减少开销、增加资源、优化并发。可用性战术的核心是"不宕机"——检测、恢复、预防。可修改性战术的核心是"易变"——低耦合、高内聚、抽象。考试中常给出具体技术方案,要求判断属于哪种质量属性的哪种战术。
🛡

软件可靠性基础

📈可靠性核心指标

MTTF(Mean Time To Failure):平均故障前时间,系统从开始运行到第一次出现故障的平均时间
MTTR(Mean Time To Repair):平均修复时间,从故障发生到恢复正常运行所需的平均时间
MTBF(Mean Time Between Failures):平均无故障时间,两次相邻故障之间的平均时间
核心公式MTBF = MTTF + MTTR

🧪可用性计算公式

可用性A = MTBF / (MTBF + MTTR)
不可用性:1 - A = MTTR / (MTBF + MTTR)
串联系统可用性:A = A1 × A2 × ... × An(所有组件都可用时系统才可用)
并联系统可用性:A = 1 - (1-A1) × (1-A2) × ... × (1-An)(任一组件可用时系统可用)

📊可用性等级对照表

可用性俗称年不可用时间月不可用时间适用场景
99%两个987.6小时7.3小时普通网站
99.9%三个98.76小时43.8分钟一般企业应用
99.99%四个952.6分钟4.38分钟金融/电商核心系统
99.999%五个95.26分钟26.3秒电信/医疗/航天

📐可靠性模型

硬件可靠性:浴缸曲线(Bathtub Curve)——早期失效期(递减)、随机失效期(恒定)、磨损失效期(递增)
软件可靠性:无磨损失效期(软件不会磨损)。故障随测试和修复逐步减少,即可靠性增长
软件可靠性模型:Jelinski-Moranda模型、Goel-Okumoto模型、Musa-Okumoto模型等
🎯
必记公式:MTBF = MTTF + MTTR;可用性 A = MTBF / (MTBF + MTTR)。串联系统可靠性相乘(越低越差),并联系统1-各不可用性相乘(越高越好)。可用性99.9% = 8.76小时/年,99.99% = 52.6分钟/年,99.999% = 5.26分钟/年。
MTBF / MTTF / MTTR 关系图
正常运行
MTTF
故障发生
故障点
修复中
MTTR
恢复正常
循环
MTBF = MTTF + MTTR|可用性 = MTTF / (MTTF + MTTR)
🔧

容错与避错技术

🛡容错技术(Fault Tolerance)

容错技术承认故障必然发生,通过设计使系统在出现故障时仍能继续运行。

N版本程序设计:N个独立团队用不同算法/语言实现同一功能,运行时通过投票机制选择结果。成本高,适合安全关键系统
恢复块方法:主模块+备用模块+验收测试。主模块运行后验证结果,若失败则回滚并启动备用模块
冗余技术:硬件冗余(备用设备)、软件冗余(N版本/恢复块)、时间冗余(重复执行)、信息冗余(校验码/ECC)
降级运行:故障时降低功能等级但不中断服务(如推荐系统降级为默认推荐)

🚫避错技术(Fault Avoidance)

避错技术力求在开发过程中发现和消除故障,防止故障发生。

形式化方法:用数学方法描述和验证系统规格。最严格,成本最高
软件评审:同行评审(Peer Review)、走查(Walkthrough)、审查(Inspection)
软件测试:单元测试、集成测试、系统测试、回归测试
静态分析:代码规范检查、代码复杂度分析、依赖分析

容错 vs 避错对比

对比维度容错技术避错技术
理念承认故障存在,设计容错机制努力消除故障,防止发生
时机运行时(Runtime)开发时(Development)
代表技术N版本程序设计、恢复块、冗余评审、测试、形式化方法
成本运行开销大开发成本高
适用安全关键系统(航空/医疗)所有软件项目
🎯
考试要点:N版本程序设计 = 多版本投票;恢复块 = 主模块+备用模块+验收测试。容错关注"运行时",避错关注"开发时"。形式化方法是最高级别的避错技术。冗余分四类:硬件、软件、时间、信息。
📋

可靠性管理

🔄故障管理流程

1. 故障检测:通过监控、心跳、日志等手段发现故障发生
2. 故障诊断:定位故障根因,分析影响范围
3. 故障恢复:重启服务、切换备用、回滚版本、修复数据
4. 故障预防:根因分析、改进架构、增加监控、完善预案

📈可靠性增长测试

定义:通过"测试→发现缺陷→修复→再测试"的迭代过程,逐步提高软件可靠性
流程:制定可靠性目标 → 设计测试用例 → 执行测试 → 记录故障 → 修复缺陷 → 验证修复 → 评估可靠性增长
指标:故障密度(缺陷数/KLOC)、故障率(故障数/时间)、MTBF增长趋势
模型:可靠性增长曲线通常呈"S"型,初期故障多增长快,后期趋于平稳
🎯
考试要点:故障管理四步流程:检测→诊断→恢复→预防,不可颠倒。可靠性增长测试的核心理念是通过迭代测试和修复逐步提高可靠性。考试中可能给出故障管理场景,要求排序或选择下一步操作。
📝

章节练习

📝 第八章 · 软件质量属性练习题

0 / 10