11-软件可靠性(基于第11小时)
软考-系统架构设计师 | 第3篇 架构设计高级知识 出题形式:单项选择题 + 论文题 分值占比:约 2-4 分(选择)
0. 考点分析
本小时专注于软件可靠性,包括基本概念、建模、管理、设计、测试和评价。
考试特点:
- 选择题 2-3 分(概念 + 可靠性设计技术)
- 论文题高频素材(软件可靠性设计、容错技术、测试方法)
- 案例题偶尔涉及
1. 核心知识点
1.1 软件可靠性的定义
- 定义:在规定的时间内,软件不引起系统失效的概率
- 关键点:
- 该概率是系统输入和系统使用的函数
- 也是软件中存在的缺陷函数
- 系统输入将确定是否会遇到已存在的缺陷
1.2 软件可靠性的定量描述
- 软件的可靠性是在软件使用条件、在规定时间内、系统的输入/输出、系统使用等变量构成的数学表达式
- 度量指标:
- 可靠度
- 平均失效时间(MTTF)
- 故障强度(故障率)
1.3 可靠性的目标
- 软件可靠性是指用户对所使用的软件的性能满意程度的期望
- 度量:可靠度、平均失效时间、故障强度
1.4 可靠性测试的意义与目的
5 大意义:
- 软件失效可能造成灾难性的后果
- 软件的失效在整个计算机系统失效中的比例较高
- 相比硬件可靠性技术,软件可靠性技术不成熟
- 软件可靠性问题会造成软件费用增长
- 系统对软件的依赖性强,对生产活动和社会生活影响日益增大
测试目的(教材图 11.3):
- 验证软件可靠性水平是否达到预期目标
- 评估、预测软件可靠性
- 发现软件中的缺陷
- 为可靠性建模提供数据
1.5 广义的可靠性测试与狭义的可靠性测试
| 维度 | 广义可靠性测试 | 狭义可靠性测试 |
|---|---|---|
| 定义 | 为最终评价软件系统可靠性而运用建模、统计、试验、分析和评价等一系列手段对软件系统实施的测试 | 为获取可靠性数据,按预先确定好的测试用例,在软件预期使用环境中,对软件实施的测试 |
| 范围 | 全面评价 | 单一执行 |
| 手段 | 建模+统计+试验+分析+评价 | 按测试用例执行 |
1.6 软件可靠性建模
影响软件可靠性的因素
- 运行环境
- 软件规模
- 软件的内部结构
- 软件的开发方法和开发环境
- 软件的可靠性投入
建模方法(10 种)
| 类别 | 方法 |
|---|---|
| 种子法 | 在软件中故意植入一些缺陷并估计 |
| 失效率类 | 基于失效率的模型 |
| 曲线拟合类 | 对历史数据进行曲线拟合 |
| 可靠性增长 | 跟踪软件随时间演变的可靠性增长 |
| 程序结构分析 | 基于代码结构分析 |
| 输入域分类 | 按输入空间分类 |
| 执行路径分析 | 基于代码执行路径 |
| 非齐次泊松过程 | NHPP 模型(如 Musa 模型) |
| 马尔可夫过程 | 基于状态转移 |
| 贝叶斯分析 | 利用先验信息 |
可靠性模型的组成和特性
教材图 11.4 展示模型组成和特性。建模时需考虑:
- 模型假设的适用性
- 预测能力与质量
- 模型输出值能否满足可靠性评价需求
- 模型使用的简便性
1.7 软件可靠性管理
5 大阶段(教材图 11.5):
- 需求分析阶段:确定可靠性指标
- 设计阶段:可靠性设计
- 实现阶段:编码规范、代码审查
- 测试阶段:可靠性测试
- 运行阶段:可靠性评估与改进
1.8 软件可靠性设计(⭐⭐⭐ 核心重点)
4 大设计技术:
| 技术 | 关键点 |
|---|---|
| 容错设计 | 恢复块设计、N 版本程序设计、冗余设计 |
| 检错技术 | 代价低,需人工干预 |
| 降低复杂度设计 | 简化结构、缩短代码、优化数据流 |
| 系统配置技术 | 双机热备、服务器集群 |
容错设计技术
恢复块设计
- 选择一组操作作为容错设计单元
- 把普通的程序块变成恢复块(含有备份/重试逻辑的块)
N 版本程序设计
- 设计多个模块或不同版本
- 对相同初始条件和相同输入的操作结果实行多数表决
- 防止某一软件模块/版本故障提供错误服务
冗余设计
- 在完整软件系统之外,设计不同路径、不同算法或不同实现方式的模块/系统作为备份
- 出现故障时使用冗余部分替换
检错技术(4 要素)
| 要素 | 说明 |
|---|---|
| 检测对象 | 检测的目标 |
| 检测延时 | 从故障发生到被检测出来的时间 |
| 实现方式 | 检测的具体方法 |
| 处理方式 | 检测到故障后如何处理 |
- 检错设计代价低于容错技术和冗余技术
- 不能自动解决故障,需要人工干预
降低复杂度设计
- 思想:在保证实现软件功能基础上,简化软件结构、缩短程序代码长度、优化软件数据流向、降低软件复杂度、提高软件可靠性
系统配置技术
双机热备技术
- 采用"心跳“方法保证主系统与备用系统的联系
- 三种工作方式:
| 模式 | 工作方式 |
|---|---|
| 双机热备 | 一台工作,一台后备 |
| 双机互备 | 两台运行相对独立应用,互为后备 |
| 双机双工 | 两台同时运行相同应用,互为后备 |
- 数据写入:Active 服务器 + Standby 服务器同时写入,保证即时同步
服务器集群技术
- 集群内各节点服务器通过内部局域网相互通信
- 若某节点服务器发生故障,这台服务器运行的应用被另一节点服务器自动接管
1.9 软件可靠性测试
5 大步骤:
- 可靠性目标的确定
- 运行剖面的开发
- 测试用例的设计
- 测试实施
- 测试结果分析
定义软件运行剖面
- 为软件的使用行为建模
- 开发使用模型,明确需测试内容
测试用例设计
- 测试用例要反映实际使用情况
- 优先测试最重要和最频繁使用的功能
- 测试用例组成(教材图 11.6):输入数据 + 测试步骤 + 预期结果
可靠性测试数据(4 类)
按时间定义分:
- 失效时间数据
- 失效间隔时间数据
- 分组时间内的失效数
- 分组时间的累积失效数
测试记录与测试报告
组成(教材图 11.7):测试环境 + 测试数据 + 测试结果 + 失效分析
1.10 软件可靠性评价
评价过程:
- 选择可靠性模型
- 收集可靠性数据
- 可靠性评估和预测
选择可靠性模型的 4 个方面
- 模型假设的适用性
- 预测的能力与质量
- 模型输出值能否满足可靠性的评价需求
- 模型使用的简便性
可靠性数据收集的办法
- 尽可能早地确定可靠性模型
- 数据收集计划要有较强的可操作性
- 重视测试数据的分析和整理
- 充分利用技术手段(数据库技术)来完成分析和统计
评估和预测
- 目的:评估软件系统可靠性状况、预测将来一段时间的可靠性水平
- 手段:以软件可靠性模型分析为主,以失效数据的图形分析法和试探性数据分析技术等为辅
2. 关键概念速查
| 概念 | 定义/说明 | 常见考点 |
|---|---|---|
| 软件可靠性 | 规定时间内软件不引起系统失效的概率 | 定义 |
| 可靠度 | 软件不引起系统失效的概率 | 三大度量指标 |
| MTTF | 平均失效时间 | 三大度量指标 |
| 故障强度 | 单位时间内故障数 | 三大度量指标 |
| 恢复块设计 | 选择一组操作作为容错设计单元 | 容错技术 |
| N 版本程序设计 | 多版本多数表决 | 容错技术 |
| 冗余设计 | 不同路径/算法/实现方式作备份 | 容错技术 |
| 检错技术 4 要素 | 检测对象/检测延时/实现方式/处理方式 | 必考 |
| 双机热备 | 一台工作一台后备 | 3 种模式 |
| 双机互备 | 两台独立应用互为后备 | 3 种模式 |
| 双机双工 | 两台同时运行相同应用 | 3 种模式 |
| 服务器集群 | 通过内部局域网互连,故障自动接管 | vs 双机热备 |
| 可靠性建模方法 | 种子法/失效率类/曲线拟合/可靠性增长/程序结构/输入域/执行路径/NHPP/马尔可夫/贝叶斯 | 10 种方法 |
| 可靠性测试 5 步骤 | 目标/运行剖面/用例/实施/分析 | 顺序 |
3. 典型例题
例题 1(检错技术 4 要素)
题目:采用检错设计技术要着重考虑四个要素:检测对象、( )、实现方法和处理方式。
- A. 检测延时
- B. 测试结果
- C. 性能测试
- D. 功能测试
答案:A
解析:检错设计 4 要素 = 检测对象 + 检测延时 + 实现方式 + 处理方式。
例题 2(双机热备 vs 集群)
题目:( )是通常所说的 Active/Standby 方式,Active 服务器处于工作状态,Standby 服务器处于监控准备状态,服务器数据包括数据库数据同时往两台或多台服务器写入,保证数据的即时同步。
- A. 双机热备
- B. 双机互备
- C. 双机双工
- D. 服务器集群
答案:A
解析:Active/Standby = 一台工作一台后备 = 双机热备模式。
例题 3(容错设计辨析)
题目:关于 N 版本程序设计,下列说法正确的是:
- A. 设计一个模块的多个不同版本
- B. 对相同输入的结果实行多数表决
- C. 自动恢复故障模块
- D. 适用于所有类型的系统
答案:B
解析:N 版本程序设计 = 设计多个模块或不同版本 + 对相同初始条件和输入的结果多数表决。不能自动恢复,需要表决选择正确结果。
例题 4(可靠性建模方法)
题目:以下不属于软件可靠性建模方法的是:
- A. 种子法
- B. 失效率类
- C. 曲线拟合类
- D. 故障树分析法
答案:D
解析:建模方法包括种子法/失效率类/曲线拟合类/可靠性增长/程序结构分析/输入域分类/执行路径分析/NHPP/马尔可夫过程/贝叶斯分析,故障树分析法是硬件可靠性方法。
4. 高频考点
4.1 必须记住的核心要点
- 可靠性定义:规定时间内不引起系统失效的概率
- 三大度量指标:可靠度、平均失效时间(MTTF)、故障强度
- 可靠性测试 5 大意义:灾难后果、高失效比例、技术不成熟、费用增长、社会影响
- 可靠性设计 4 大技术:容错设计、检错技术、降低复杂度设计、系统配置技术
- 容错设计 3 种:恢复块设计、N 版本程序设计(多数表决)、冗余设计
- 检错技术 4 要素:检测对象、检测延时、实现方式、处理方式
- 双机热备 3 模式:
- 双机热备(一工一备)
- 双机互备(两台独立应用,互为后备)
- 双机双工(两台同时运行相同应用)
- 集群 vs 双机:集群通过内部局域网通信,故障自动接管
- 建模方法 10 种:种子/失效率/曲线拟合/可靠性增长/程序结构/输入域/执行路径/NHPP/马尔可夫/贝叶斯
- 可靠性评价 3 步:选模型→收数据→评预测
- 测试实施 5 步骤:目标→运行剖面→用例设计→实施→结果分析
4.2 易混淆对比
| 对比项 | 区别 |
|---|---|
| 容错 vs 检错 | 容错自动处理错误,检错需人工干预 |
| 容错 vs 冗余 | 容错是处理错误的策略,冗余是备份的实现方式 |
| 恢复块 vs N 版本 | 恢复块是重试,N 版本是多版本表决 |
| 双机热备 vs 双机互备 | 热备是相同应用(一工一备),互备是不同应用互为备份 |
| 双机热备 vs 双机双工 | 热备是一工一备,双工是两台同时工作(互为后备) |
| 集群 vs 双机 | 集群是多节点,通过 LAN 通信,自动接管 |
| 广义 vs 狭义可靠性测试 | 广义包含建模+统计+试验+分析+评价,狭义只按用例执行 |
| 性能 vs 可靠性 | 性能是响应能力,可靠性是无故障运行能力 |
| 鲁棒性 vs 容错 | 鲁棒性是不产生影响,容错是自行修正 |