本页目录 · 5 节
第 9 章 软件可靠性基础知识
对应大纲:科目 1-8 软件可靠性基础知识|教材 P305–P329|优先级 ★★★★|综合知识估分 3~5 分
读法:先背定义与 4 个公式,再用「建模—管理—设计—测试—评价」一条线串起来;容错三法是案例与论文的高频素材。
一、知识框架
软件可靠性基础知识
├─ 9.1 基本概念
│ ├─ 定义:规定条件、规定时间、规定功能
│ ├─ 定量描述:R(t)、F(t)、λ(t)、MTBF、MTTF、MTTR、A
│ ├─ 可靠性目标与测试意义
│ └─ 广义/狭义可靠性测试
├─ 9.2 可靠性建模
│ ├─ 影响因素:运行剖面、缺陷引入与排除、环境
│ ├─ 建模方法:失效时间、失效计数、程序结构
│ └─ 模型分类:种子法、失效率类、曲线拟合、马尔可夫、贝叶斯
├─ 9.3 可靠性管理:大纲、组织、计划、监控、数据
├─ 9.4 可靠性设计
│ ├─ 容错:N 版本、恢复块、防卫式
│ ├─ 检错:断言、日志、校验、心跳
│ ├─ 降低复杂度:模块化、信息隐藏
│ └─ 系统配置:双机热备、集群、冗余
├─ 9.5 可靠性测试
│ ├─ 运行剖面与构造步骤
│ ├─ 用例设计
│ └─ 测试实施
└─ 9.6 可靠性评价:选模型→收数据→评估预测
二、必背要点
9.1 基本概念
定义:软件可靠性是软件在规定条件下、规定时间内完成规定功能的能力。三个「规定」缺一不可,是判断题的常设陷阱。
定量描述
| 指标 | 含义 | 要点 |
|---|---|---|
| 可靠度 R(t) | 规定时间内完成功能的概率 | 单调递减,0≤R(t)≤1 |
| 失效概率 F(t) | 规定时间内发生失效的概率 | F(t)=1−R(t) |
| 失效率 λ(t) | 单位时间发生失效的概率 | 软件随排错总体下降 |
| MTBF | 平均故障间隔时间 | 针对可修复系统 |
| MTTF | 平均无故障时间 | 针对不可修复系统 |
| MTTR | 平均修复时间 | 反映恢复能力 |
| 可用度 A | 任意时刻可提供服务的比例 | A=MTBF/(MTBF+MTTR) |
两个必会公式:
R(t) = e^(−λt) (失效率恒定时)
A = MTBF / (MTBF + MTTR) (稳态可用度)
注意:软件没有硬件那种磨损失效,借用的浴盆曲线只对应「早期失效」与「偶然失效」两段;随着缺陷被排除,失效率总体下降,不会因使用时长自行回升。
可靠性目标:用 MTBF、失效率、可用度、残余缺陷密度等可测量指标表达,依据业务关键程度、投入成本与用户容忍度设定,并能在测试中验证。
可靠性测试的意义:发现缺陷、验证指标是否达标、支持发布决策、度量可靠性增长、降低上线后的运维风险。
广义与狭义可靠性测试
| 类型 | 范围 | 内容 |
|---|---|---|
| 狭义 | 验证阶段 | 验证软件是否达到规定的可靠性要求,即可靠性验证测试 |
| 广义 | 全生命周期 | 以发现缺陷、提升可靠性为目的,含增长测试与验证测试 |
9.2 可靠性建模
影响因素:运行剖面是否真实、缺陷引入率与排除率、测试环境与运行环境差异、失效数据的完整性与独立性、软件规模与复杂度。
建模方法:基于失效时间(时间域)、基于失效计数(失效数据域)、基于程序结构(构件可靠度合成)。建模的共同前提是失效数据可信,因此测试剖面与数据记录规范比模型选择更关键。
模型分类
| 类别 | 代表或思路 | 适用与特点 |
|---|---|---|
| 种子法 | 植入已知缺陷,按捕获比例估算总数 | 可估残余缺陷,依赖植入假设 |
| 失效率类 | J-M、Musa、Goel-Okumoto | 失效数据随时间下降,最常用 |
| 曲线拟合 | 用统计曲线拟合失效数据 | 简单直观,外推能力弱 |
| 马尔可夫 | 状态转移描述可靠性与可用性 | 适合冗余、维修系统 |
| 贝叶斯 | 先验分布加实测数据更新 | 小样本有效,依赖先验质量 |
| 结构模型 | 由构件可靠度按串并联合成系统可靠度 | 适合构件化、可分解系统 |
9.3 可靠性管理
- 可靠性大纲:明确目标、指标、活动与验收准则。
- 组织与职责:设可靠性负责人,明确设计、测试、运维分工。
- 计划:把可靠性活动纳入项目计划与里程碑。
- 监控与评审:跟踪失效率、缺陷趋势,设置阶段评审点。
- 数据收集:统一记录失效时间、现象、原因与修复,形成闭环。
9.4 可靠性设计
| 技术类别 | 核心思想 | 典型手段 |
|---|---|---|
| 容错 | 用冗余掩盖故障,系统仍正确输出 | N 版本、恢复块、防卫式 |
| 检错 | 尽早发现故障并隔离 | 断言、日志、校验和、心跳 |
| 降低复杂度 | 减少出错机会 | 模块化、信息隐藏、简化控制流 |
| 系统配置 | 用部署冗余提升整体可用 | 双机热备、集群、冗余网络 |
容错三法对比
| 方法 | 做法 | 特点 |
|---|---|---|
| N 版本程序设计 | N≥3 个团队独立开发同一规格,运行后表决 | 可靠性高、成本最高、需独立开发 |
| 恢复块 | 主块执行后验收测试,失败则回滚执行备块 | 串行冗余、成本较低、切换有延迟 |
| 防卫式程序设计 | 加前置检查、断言与异常处理,防错误扩散 | 不增冗余、成本低、只能防可预见错误 |
系统配置:双机热备(主备切换)、双机互备(互为备份)、集群(负载均衡加故障转移)、冗余电源与网络链路。
9.5 可靠性测试
运行剖面:对软件使用方式的定量描述,说明有哪些用户与使用模式、哪些功能与输入、各自发生的概率。
构造步骤:确定用户类型与使用模式 → 划分功能与输入空间 → 估计各输入发生概率 → 生成测试用例 → 按概率分配执行次数。
用例设计:覆盖高频路径,兼顾边界与异常,用例比例与剖面概率一致,保证样本代表性。
实施:搭建接近真实运行的仿真环境,按剖面执行并记录失效时间、类型与复现条件,再做统计分析与反馈。
9.6 可靠性评价
| 步骤 | 做什么 | 输出 |
|---|---|---|
| 选择模型 | 按数据形态与阶段选模型 | 适用模型与假设 |
| 收集数据 | 记录失效时间、失效数、执行时间 | 有效数据集 |
| 评估预测 | 估计当前可靠度、MTBF、残余缺陷 | 达标结论与发布建议 |
三、易混淆概念对比
| A | B | 关键区别 |
|---|---|---|
| 可靠性 | 可用性 | 可靠性看规定时间不失效;可用性看任意时刻可服务比例 |
| MTTF | MTBF | MTTF 用于不可修产品;MTBF 用于可修系统,含修复间隔 |
| 失效率 | 失效概率 | 失效率是单位时间的失效速率;失效概率是一段时间的累计 |
| 广义可靠性测试 | 狭义可靠性测试 | 广义含增长测试与验证测试;狭义仅指验证是否达标的验证测试 |
| 可靠性增长测试 | 可靠性验证测试 | 前者找缺陷促改进;后者验证是否达到规定指标 |
| N 版本 | 恢复块 | N 版本并行冗余加表决;恢复块串行冗余加回滚 |
| 容错 | 检错 | 容错让系统带故障继续工作;检错只发现并隔离故障 |
| 运行剖面 | 测试用例 | 剖面是使用概率分布;用例是按剖面生成的具体输入 |
| 软件可靠性 | 软件安全性 | 可靠性关注不出失效;安全性关注失效不造成危害 |
| 可靠性设计 | 可靠性测试 | 设计在前端注入能力;测试在后端验证与度量 |
四、常见考法与出题角度
| 题型 | 出题角度 | 典型问法 | 答题要点 |
|---|---|---|---|
| 单选 | 指标辨析 | 「可修复系统的平均寿命指标是」 | MTBF |
| 单选 | 公式计算 | 给出 MTBF、MTTR 求可用度 | A=MTBF/(MTBF+MTTR) |
| 单选 | 模型分类 | 「J-M 模型属于哪类」 | 失效率类 |
| 单选 | 容错方法 | 「N 版本程序设计至少需要几个版本」 | 3 个,且独立开发 |
| 单选 | 运行剖面 | 「运行剖面的核心作用」 | 按使用概率分布生成测试 |
| 简答 | 设计技术 | 「提高可靠性的设计手段有哪些」 | 容错、检错、降复杂度、系统配置四类 |
| 简答 | 评价步骤 | 「可靠性评价分哪三步」 | 选模型、收数据、评估预测 |
| 案例题角度 | 可靠性方案 | 给出关键系统问「如何保证可靠性」 | 设计上用冗余与容错,测试上用剖面,管理上闭环 |
| 论文可用角度 | 正文举例 | 「论文写高可靠系统时怎么用本章」 | 可写:「核心交易采用 N 版本程序设计,三套独立实现并行运行并多数表决,配合双机热备将年可用度提升到 99.99%。」 |
五、速记与自测
速记
- 定义三要素:条件、时间、功能
- 可修看 MTBF,不可修看 MTTF
- 可用度:MTBF 除以两者之和
- 设计四类:容、检、简、配
- 容错三法:N、恢、防
- 评价三步:选、收、评
自测
- 某系统 MTBF 为 990 小时,MTTR 为 10 小时,可用度是多少?
- 失效率恒为 0.001/小时,运行 100 小时的可靠度约为多少?
- N 版本程序设计至少需要几个独立版本,为什么?
答案:1. 990/1000=99%;2. e^(−0.1)≈0.905;3. 3 个,两两比较才能多数表决并容忍一个版本出错。