14.软件可靠性基础
·
一、软件可靠性基础 00:00
1. 历年真题考情 00:03
- 考察分值: 本章节约2分,自2022年起首次出现在选择题中
- 历史考察: 2022年前仅偶尔出现在案例分析题
- 教材定位: 对应第二版教材第9章,内容以概念普及为主
- 重点建议: 重点掌握容错技术,其他概念性内容了解即可
2. 软件可靠性基本概念 02:07
1)软件可靠性 02:32
- 定义: 软件产品在规定的条件下和规定的时间区间完成规定功能的能力
- 核心要素:
- 规定条件(运行环境)
- 规定时间(自然时间/运行时间/CPU时间)
- 规定功能(预期行为)
2)软件可靠性和硬件可靠性区别 03:09
- 复杂性差异:
- 软件复杂度更高,大部分系统失效源于软件失效
- 举例:电脑故障多由软件崩溃引起,重启即可恢复
- 物理退化:
- 硬件存在物理老化(如使用10年后性能下降)
- 软件无物理退化,除非被主动修改
- 唯一性:
- 软件可完美复制,所有副本完全相同
- 硬件即使同型号也存在微观差异
- 更新周期:
- 硬件更新慢(遵循摩尔定律约18个月)
- 软件迭代快(敏捷开发可能几天更新一次)
3)软件可靠性的定量描述 05:18

- 时间度量:
- 自然时间:日历时间(天/月/年)
- 运行时间:软件启动到关闭的时长
- 执行时间:实际占用CPU的时间(最准确)
- 核心指标:
- 失效概率:初始为0,随时间单调递增趋近1
- 可靠度RRR:R=1−R=1-R=1−失效概率
- 失效强度:单位时间内失效概率
- 关键参数:
- MTTF(Mean Time To Failure):平均无故障时间
- 计算:故障前正常运行时间的平均值
- MTTR(Mean Time To Repair):平均修复时间
- 计算:故障后恢复所需时间的平均值
- MTBF(Mean Time Between Failures):平均故障间隔时间
- 公式:MTBF=MTTF+MTTRMTBF=MTTF+MTTRMTBF=MTTF+MTTR
- 图示理解:两次故障间的完整周期(运行+修复)
- MTTF(Mean Time To Failure):平均无故障时间
- 系统可用性:
- 公式:可用性=MTTFMTTF+MTTR×100%可用性=\frac{MTTF}{MTTF+MTTR}×100\%可用性=MTTF+MTTRMTTF×100%
- 含义:正常运行时间占总时间的百分比
4)串并联系统可靠性 11:50

- 串联系统:
- 特点:任一组件失效则系统崩溃
- 可靠性公式:R=R1×R2×...×RnR=R_1×R_2×...×R_nR=R1×R2×...×Rn
- 示例:数据必须依次通过所有处理模块
- 并联系统:
- 特点:所有组件失效系统才崩溃
- 可靠性公式:R=1−(1−R1)(1−R2)...(1−Rn)R=1-(1-R_1)(1-R_2)...(1-R_n)R=1−(1−R1)(1−R2)...(1−Rn)
- 计算技巧:先求不可靠性乘积再取补
- 混合系统:
- 解题步骤:
- 分解为串联/并联子系统
- 逐级计算各子系统可靠性
- 组合计算结果
- 示例:先计算并联部分可靠性,再与串联部分相乘
- 解题步骤:
5)可靠性测试的意义 15:38

- 必要性:
- 软件失效可能造成灾难性后果
- 软件失效占计算机系统失效的主要部分
- 当前可靠性技术尚不成熟
- 测试分类:
- 狭义测试:
- 针对具体测试用例验证可靠性指标
- 流程:设计用例→执行测试→分析结果
- 广义测试:
- 包含可靠性建模、统计分析等完整体系
- 涉及软件配置、运行环境等全局因素
- 狭义测试:
- 实施要点:
- 需预先定义明确的可靠性目标
- 需要构建真实的运行剖面(测试环境)
- 需建立合适的可靠性评价模型
3. 软件可靠性建模 18:36
1)软件可靠性模型 18:52

- 定义:为预计或估算软件可靠性所建立的可靠性框图和数学模型。
- 影响因素:
- 运行环境:不同环境下可靠性表现不同,如工业产品在暴晒或浸水环境中可靠性降低
- 软件规模:规模越大可靠性可能越差
- 内部结构:结构越复杂可靠性越难保证
- 开发方法与环境:采用的方法和开发环境会影响可靠性
- 可靠性投入:对可靠性的资源投入直接影响结果
- 模型组成:
- 模型假设:简化实际情况的规范假设,如测试代表实际运行剖面、失效独立发生等
- 性能度量:输出量如失效强度、残留缺陷数等,通常以数学表达式给出
- 参数估计:间接确定无法直接获得的可靠性度量值
- 数据要求:模型运行所需的软件可靠性数据输入
- 共同假设:
- 代表性假设:测试数据可预测运行阶段的可靠性行为
- 独立性假设:软件失效在不同时刻独立发生,互不影响
- 相同性假设:所有失效后果等级相同,建模时不区分严重程度
2)软件的可靠性模型分类 23:15

- 种子法模型:通过预先植入错误种子,根据测试发现的原始错误与诱导错误比例估计残留错误数
- 失效率类模型:专门研究程序失效率的模型
- 曲线拟合类模型:使用回归分析研究软件复杂性、缺陷数、失效率等指标
- 可靠性增长模型:预测检错过程中的可靠性改进,用增长函数描述改进过程
- 程序结构分析模型:基于程序调用关系构建可靠性分析网络
- 输入域分类模型:通过输入域样本点的测试结果推断使用可靠性
- 执行路径分析模型:计算各逻辑路径执行概率和错误路径概率综合评估可靠性
- 非齐次泊松过程模型:以单位时间失效次数为泊松随机变量预测累计失效数
- 马尔可夫过程模型:基于状态转移的可靠性分析方法
- 贝叶斯模型:结合先验分布和测试信息评估可靠性
4. 软件可靠性管理 25:29
1)软件可靠性管理的内容 25:56

- 定义:软件工程管理的一部分,以全面提高和保证软件可靠性为目标,管理软件生命周期中的可靠性活动
- 各阶段任务:
- 需求分析阶段:
- 确定可靠性目标和验收标准
- 分析影响因素
- 制定框架和文档规范
- 制定初步计划和数据收集规范
- 概要设计阶段:
- 确定可靠性度量方法
- 制定详细验收方案
- 进行可靠性设计
- 收集数据并调整计划
- 详细设计阶段:
- 可靠性设计和预测
- 调整计划并收集数据
- 明确后续计划
- 编码阶段:
- 进行单元测试和排错
- 调整计划并收集数据
- 明确后续计划
- 测试阶段:
- 进行集成和系统测试
- 排错和可靠性建模
- 评价并调整计划
- 实施阶段:
- 进行验收测试
- 排错并收集数据
- 调整模型和评价
- 需求分析阶段:
- 特点:
- 需求阶段侧重目标制定和规范建立
- 设计阶段开始具体可靠性设计
- 编码阶段增加单元测试内容
- 测试阶段重点关注集成和系统测试
- 实施阶段进行最终验收测试
5. 软件可靠性设计 29:32
1)软件可靠性设计 30:19

- 基本概念
- 定义:在常规软件设计中应用各种方法和技术,在兼顾功能和性能需求的同时满足可靠性要求
- 重要性:实践证明是保障软件可靠性最有效、最经济、最重要的手段
- 实施阶段:主要在软件设计阶段采取措施进行可靠性控制
- 设计原则
- 整体性原则:是软件设计的一部分,必须在总体设计框架中使用且不与其他设计原则冲突
- 目标导向性:以提高和保障软件可靠性为最终目标,但需在满足软件质量要求的前提下
- 有限性原则:需确定明确的可靠性目标,不能无限扩大化
- 优先级原则:排在功能度、用户需求和开发费用之后考虑
- 主要技术
- 容错设计 32:45
- 核心思想:系统出现错误时能够容忍并继续运行
- 实现方式:主要通过冗余技术实现(具体技术后续详细介绍)
- 检错设计
- 核心思想:提前检查代码中是否存在错误
- 实施时机:在系统运行前进行错误检测
- 降低复杂度设计
- 理论基础:软件复杂度与可靠性成反比关系
- 设计目标:通过降低软件复杂度来提高可靠性
- 容错设计 32:45
- 可靠性保障技术分类
- 必错技术:
- 定义:通过技术评审、系统测试和正确性证明等技术
- 实施阶段:在系统正式运行前避免、发现和改正错误
- 特点:重在预防,运行前避免错误发生
- 容错技术:
- 与必错区别:主要在系统运行时处理已发生的错误
- 技术重叠:与检错技术存在部分交叉
- 检错技术:
- 定位:属于必错技术的组成部分
- 实施重点:错误检测而非错误处理
- 必错技术:
2)提高系统可靠性的技术 32:06
- 容错技术
- 冗余 33:23
- 基本概念:在正常系统运行所需基础上增加额外资源(信息、时间、硬件、软件),是容错技术的基础。
- 技术分类:
- 结构冗余:增加多余部件,分为静态(如N版本程序设计)、动态(如恢复块方法)和混合三种
- 信息冗余:增加校验码(奇偶校验码、循环冗余校验码、海绵校验码)
- 时间冗余:重复执行功能并选择多数结果(单版本多次执行)
- 冗余附加:为实现前三种冗余所需的额外资源(如备份机、校验码等)
- 关键区别:
- 静态冗余不影响系统正常运行(无切换过程),动态冗余有主动切换动作
- 结构冗余既包含硬件冗余(物理备份机)也包含软件冗余(容错代码)
- 软件容错的主要方法 39:49
- 核心思想:通过冗余信息和算法程序实现运行时错误检测与补救
- 典型技术:
- N版本程序设计(静态结构冗余)
- 恢复块方法(动态冗余)
- 防卫式程序设计
- 与减错区别:
- 减错仅检查错误不纠正,属于容错技术子集
- 容错需要完整处理机制(检测+恢复)
- N版本程序设计 40:30

- 实现机制:
- 由不同团队独立开发N个功能相同但实现方法、语言、环境各异的版本
- 通过表决器采用少数服从多数原则选择最终结果
- 异常版本结果直接丢弃不做处理
- 关键特征:
- 静态冗余:无系统切换过程
- 前向恢复:直接采用多数结果继续执行
- 多机环境:各版本并行运行
- 实时性好:无切换延迟
- 设计要点:
- 必须保证版本间独立性(降低相关错误概率)
- 典型采用奇数个版本(便于表决)
- 恢复块设计 41:49

- 实现机制:
- 采用主块+多个后备块的层级结构
- 通过验证测试检测主块错误
- 出错时按顺序启用后备块(后备块1→后备块2→…)
- 关键特征:
- 动态冗余:有显式切换过程
- 后向恢复:需回退到前一正确状态
- 单机环境:同一时间仅一个模块运行
- 备份模式:
- 热备份:备用模块与主模块同步工作
- 冷备份:备用模块待机不工作
- 技术对比:
- 与N版本设计比较:
- 恢复块采用验证测试检测错误,N版本通过表决
- 恢复块实时性较差(需切换时间),N版本实时性好
- 恢复块适合单机环境,N版本需要多机支持
- 与N版本设计比较:
- 冗余 33:23
- 防卫式程序设计 45:44

- 与传统容错技术的区别:不采用传统容错技术(如单机备份、N版本程序设计等),而是通过在程序中嵌入错误检测和恢复代码实现容错
- 核心思想:采用软件冗余概念,包含错误检查代码和错误恢复代码,使程序能自动撤销错误状态并恢复到正确状态
- 实现策略:
- 错误检测:如C语言指针判空、Java的try-catch异常捕捉
- 破坏估计:评估错误影响范围
- 错误恢复:回滚到正确状态
- 应用优势:相比传统容错技术更节省资源,是开发中最常用的容错实现方式
- 双机容错技术 46:54
- 双机容错与动态容余的关系 46:59
- 包含关系:双机容错属于动态冗余技术的一种实现形式
- 扩展性:动态冗余不仅限于双机,还可扩展为多机容错(如多个恢复块)
- 理解方法:掌握双机原理即可类推理解多机容错
- 双机容错技术的概述 47:24
- 系统组成:
- 硬件:两台服务器(或多台)+共享磁盘阵列
- 软件:专用双机软件
- 技术特点:软硬件结合的容错解决方案
- 系统组成:
- 双机软件的作用与机制 47:46
- 核心功能:
- 数据同步:保持主备机数据一致性
- 心跳检测:通过定期信号探测主机状态
- 故障切换机制:当备份机持续未收到心跳信号时,自动接管主机服务
- 实现要点:需要同时保证数据同步的实时性和心跳检测的可靠性
- 核心功能:
- 双击热备模式 48:58
- 工作方式:
- 主机:处理所有用户请求
- 备份机:仅同步数据,不处理请求
- 优点:实现简单,切换逻辑清晰
- 缺点:
- 备份机资源闲置
- 负载不均衡(主机承担全部负载)
- 适用场景:对资源利用率要求不高的关键业务系统
- 工作方式:
- 双击互备模式 49:47
- 工作方式:
- 服务器A:运行特定服务(如HTTP)
- 服务器B:运行其他服务(如FTP)
- 互相备份对方服务数据
- 优点:
- 提高资源利用率
- 实现负载均衡
- 故障处理:当单机故障时,另一台需同时运行两项服务,可能导致瞬时负载激增
- 工作方式:
- 双击双攻模式 50:55
- 工作方式:
- 双机运行完全相同服务
- 通过负载均衡策略分配用户请求
- 保持实时数据同步
- 优点:
- 资源利用率最大化
- 负载均衡效果最佳
- 故障切换对用户透明
- 实现复杂度:需要完善的负载均衡和数据同步机制
- 工作方式:
- 双机容错与动态容余的关系 46:59
- 集群技术

- 双机容错技术
- 组成结构:由两台服务器、外接共享磁盘阵列及相应双机软件组成的软硬件结合容错方案
- 心跳机制:主从系统间定时发送通信信号确认运行状态,若主机故障或信号中断,备用系统立即接管
- 工作模式:
- 双机热备模式:主系统工作,备用系统待命
- 双机互备模式:两台服务器互为备份
- 双机双工模式:两台服务器同时工作(采用集群技术)
- 集群技术原理
- 核心概念:将多台计算机组织起来协同工作,提高系统可用性和可靠性
- 任务分配:每台计算机承担部分计算任务和容错任务
- 故障处理:
- 自动隔离故障节点
- 通过负载转嫁机制重新分配任务
- 向管理员发出警报
- 典型应用:云计算中的大规模数据计算(如Redis集群)
- 技术特点
- 五大特性:
- 可伸缩性:可灵活扩展计算节点
- 高可用性:自动故障转移保障服务
- 可管理性:便于系统监控维护
- 高性价比:相对单机高性能方案成本更低
- 高透明性:对用户无感知的系统切换
- 五大特性:
- 集群分类
- 高性能计算集群:用于科学计算等需要强大算力的场景
- 负载均衡集群:合理分配计算任务,避免单点过载
- 高可用性集群:重点保障系统持续可用(如双机双工模式)
- 技术优势
- 可靠性机制:多节点并行工作,单点故障不影响整体
- 负载均衡:动态调整任务分配,优化资源利用率
- 扩展便利:可根据需求增减计算节点
- 负载均衡 53:07
- 负载均衡的定义与目的 53:29

- 技术本质: 集群系统中的关键技术,通过分配工作负载提高系统整体性能
- 核心作用:
- 提升集群处理能力和可靠性
- 加快系统响应速度
- 提高客户端访问成功率
- 典型场景: 以12306春运购票为例,当访问量激增时,通过负载均衡将1亿次访问分配到1万台服务器,使每台仅处理1万次请求
- 关键特征: 实现多节点并行工作的负荷均衡,避免局部过载或闲置
- 负载均衡的实现技术 53:42
- 应用层技术(HTTP重定向)
- 实现原理: 服务器返回HTTP重定向响应而非请求对象,客户端根据新地址重新发起请求
- 协议特性: 利用网络协议自带的重定向功能
- 典型应用: Web服务场景中的请求分流
- 传输层技术(DNS负载均衡)
- 特殊说明: 虽然DNS本身是应用层协议,但基于DNS的负载均衡属于传输层技术(需特别记忆)
- 工作机制:
- 单个域名配置多个IP地址
- DNS轮询返回不同解析结果
- 典型案例:淘宝/百度等大型网站一个域名对应数万台服务器
- 优势: 实现简单,是互联网最常用的负载均衡技术
- 其他实现技术
- NAT转换:
- 外部IP映射多个内部IP
- 动态转换连接请求到不同内部节点
- 本质是多对一的地址转换关系
- 反向代理:
- 将外部请求动态转发给内部多个节点
- 与正向代理形成对比(后文详述)
- 混合型: 多种技术的组合应用
- NAT转换:
- 应用层技术(HTTP重定向)
- 负载均衡的考试重点 54:18
- 高频考点:
- 应用层(HTTP重定向)与传输层(DNS)两种技术的区分
- DNS负载均衡虽使用应用层协议但属于传输层技术的特殊性质
- 论文警示:
- 2019年架构考试曾出现负载均衡论文题
- 但缺乏足够知识储备的考生得分普遍较低
- 建议非专业人士仅掌握基础概念即可
- 高频考点:
- 正向代理与反向代理的概念 57:41
- 正向代理:
- 客户端通过代理访问服务器
- 服务器无法识别真实客户端(隐藏客户端)
- 典型场景:VPN、科学上网等
- 反向代理:
- 服务器通过代理向客户端提供服务
- 客户端无法识别真实服务器(隐藏服务器)
- 典型应用:CDN、负载均衡等
- 考试提示: 代理相关概念考查频率较低,理解基本区别即可
- 正向代理:
- 负载均衡的定义与目的 53:29
6. 软件可靠性测试与评价 58:54
1)软件可靠性测试 59:32
- 主要活动组成:由可靠性目标的确定、运行剖面的开发、测试用例的设计、测试实施、测试结果分析等五个关键环节构成
- 测试重点:前两个活动(目标确定和运行剖面开发)是区别于传统测试的核心环节,后三个活动(用例设计、实施、分析)与传统测试流程相似
- 运行剖面定义:实质是为软件使用行为建模,反映软件实际运行环境特征
2)软件可靠性测试的步骤 01:00:18
- 三步流程:
- 环境建模:定义软件运行剖面(实际运行环境的抽象表示)
- 用例设计:专门针对可靠性特性设计测试用例
- 测试执行:实施设计的可靠性测试方案
- 与传统测试关系:虽然步骤相似,但可靠性测试更强调运行环境的准确建模和可靠性指标的验证
3)软件可靠性评价 01:00:52
- 评价流程
- 模型选择:需考虑模型假设适用性、预测能力、输出值实用性及操作简便性四个维度
- 数据收集:以软件失效数据为核心,重点在测试和实施阶段获取,包括MTTFMTTFMTTF(平均无故障时间)、MTBFMTBFMTBF(平均故障间隔时间)等关键指标
- 评估预测:通过模型输出判断是否达到可靠性目标,预测维护升级后的可靠性水平
- 数据收集要点
- 实施策略:
- 早期确定可靠性模型框架
- 制定详细可执行的数据收集计划
- 建立规范的测试数据整理分析流程
- 采用数据库系统进行数据存储和统计分析
- 生命周期对应:与软件可靠性管理生命周期中的测试实施阶段紧密关联
- 实施策略:
- 评估方法
- 核心判断:基于模型输出和失效数据分析是否达成预设可靠性目标
- 预测场景:
- 未达标时的资源追加需求估算
- 长期运行后(如1年)经维护升级的可靠性水平预测
- 辅助技术:采用失效数据图形分析法和试探性数据分析技术增强评估准确性
二、软件可靠性基础 01:04:07
1. 核心考点
- 度量指标:重点掌握MTTF(平均无故障时间)和MTBF(平均故障间隔时间)等可靠性度量指标的计算方法
- 系统计算:需要掌握串并联系统的可靠性计算方法,这是考试中常见的计算题型
- 技术分类:容错技术和避错技术是考试重点,曾在早期案例题中出现过,但近年出现概率较低
2. 非重点内容
- 理论部分:教材中展开的详细步骤属于基础理论,仅需做简单了解即可
- 考试范围:除上述核心考点外,其他内容均为介绍性知识,考试中基本不会涉及
- 学习建议:不必花费过多时间深入研究教材中的理论推导部分
3. 备考建议
- 复习重点:应集中精力准备可靠性指标计算和系统可靠性分析两个核心模块
- 案例准备:虽然容错技术曾在案例中出现,但不必过度担心,了解基本概念即可
- 时间分配:建议将主要学习时间分配给更高频的考点,本章内容整体占比较小
三、知识小结
| 知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
|---|---|---|---|
| 软件可靠性定义 | 在规定条件下规定时间内完成规定功能的能力 | 与可用性的区别(可靠性强调功能正确性,可用性强调可访问性) | ⭐⭐ |
| 软件vs硬件可靠性差异 | 复杂性/物理退化/唯一性/版本更新周期四大区别 | 物理退化特性(硬件存在而软件不存在) | ⭐⭐ |
| 可靠性定量指标 | MTTF(平均无故障时间)/MTTR(平均修复时间)/MTBF(平均故障间隔时间) | MTBF=MTTF+MTTR公式(需结合时间轴图解) | ⭐⭐⭐⭐ |
| 串并联系统计算 | 串联系统可靠性=各部件可靠性乘积; 并联系统可靠性=1-各部件不可靠性乘积 | 混合系统计算顺序(先并联后串联) | ⭐⭐⭐⭐ |
| 容错技术分类 | 静态容错(N版本程序设计); 动态容错(恢复块方法); 防卫式程序设计 | 恢复快vsN版本(单机vs多机/后向vs前向恢复) | ⭐⭐⭐⭐ |
| 负载均衡技术 | 应用层/DNS/NAT/反向代理/混合型五种实现方式 | DNS负载均衡归属(属于传输层技术) | ⭐⭐⭐ |
| 可靠性测试步骤 | 定义环境→设计用例→实施测试→结果分析 | 数据收集阶段(主要在测试和实施阶段) | ⭐⭐ |
| 可靠性模型选择 | 需考虑模型假设/预测能力/输出值适用性/使用便捷性 | 三大共同假设(代表性/独立性/相同性) | ⭐⭐ |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)