一、软件可靠性基础 00:00
1. 历年真题考情 00:03
  • 考察分值: 本章节约2分,自2022年起首次出现在选择题中
  • 历史考察: 2022年前仅偶尔出现在案例分析题
  • 教材定位: 对应第二版教材第9章,内容以概念普及为主
  • 重点建议: 重点掌握容错技术,其他概念性内容了解即可
2. 软件可靠性基本概念 02:07
1)软件可靠性 02:32
  • 定义: 软件产品在规定的条件下和规定的时间区间完成规定功能的能力
  • 核心要素:
    • 规定条件(运行环境)
    • 规定时间(自然时间/运行时间/CPU时间)
    • 规定功能(预期行为)
2)软件可靠性和硬件可靠性区别 03:09
  • 复杂性差异:
    • 软件复杂度更高,大部分系统失效源于软件失效
    • 举例:电脑故障多由软件崩溃引起,重启即可恢复
  • 物理退化:
    • 硬件存在物理老化(如使用10年后性能下降)
    • 软件无物理退化,除非被主动修改
  • 唯一性:
    • 软件可完美复制,所有副本完全相同
    • 硬件即使同型号也存在微观差异
  • 更新周期:
    • 硬件更新慢(遵循摩尔定律约18个月)
    • 软件迭代快(敏捷开发可能几天更新一次)
3)软件可靠性的定量描述 05:18
  • img
  • 时间度量:
    • 自然时间:日历时间(天/月/年)
    • 运行时间:软件启动到关闭的时长
    • 执行时间:实际占用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
      • 图示理解:两次故障间的完整周期(运行+修复)
  • 系统可用性:
    • 公式:可用性=MTTFMTTF+MTTR×100%可用性=\frac{MTTF}{MTTF+MTTR}×100\%可用性=MTTF+MTTRMTTF×100%
    • 含义:正常运行时间占总时间的百分比
4)串并联系统可靠性 11:50
  • img
  • 串联系统:
    • 特点:任一组件失效则系统崩溃
    • 可靠性公式: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(1R1)(1R2)...(1Rn)
    • 计算技巧:先求不可靠性乘积再取补
  • 混合系统:
    • 解题步骤:
      • 分解为串联/并联子系统
      • 逐级计算各子系统可靠性
      • 组合计算结果
    • 示例:先计算并联部分可靠性,再与串联部分相乘
5)可靠性测试的意义 15:38
  • img
  • 必要性:
    • 软件失效可能造成灾难性后果
    • 软件失效占计算机系统失效的主要部分
    • 当前可靠性技术尚不成熟
  • 测试分类:
    • 狭义测试:
      • 针对具体测试用例验证可靠性指标
      • 流程:设计用例→执行测试→分析结果
    • 广义测试:
      • 包含可靠性建模、统计分析等完整体系
      • 涉及软件配置、运行环境等全局因素
  • 实施要点:
    • 需预先定义明确的可靠性目标
    • 需要构建真实的运行剖面(测试环境)
    • 需建立合适的可靠性评价模型
3. 软件可靠性建模 18:36
1)软件可靠性模型 18:52
  • img
  • 定义:为预计或估算软件可靠性所建立的可靠性框图和数学模型。
  • 影响因素:
    • 运行环境:不同环境下可靠性表现不同,如工业产品在暴晒或浸水环境中可靠性降低
    • 软件规模:规模越大可靠性可能越差
    • 内部结构:结构越复杂可靠性越难保证
    • 开发方法与环境:采用的方法和开发环境会影响可靠性
    • 可靠性投入:对可靠性的资源投入直接影响结果
  • 模型组成:
    • 模型假设:简化实际情况的规范假设,如测试代表实际运行剖面、失效独立发生等
    • 性能度量:输出量如失效强度、残留缺陷数等,通常以数学表达式给出
    • 参数估计:间接确定无法直接获得的可靠性度量值
    • 数据要求:模型运行所需的软件可靠性数据输入
  • 共同假设:
    • 代表性假设:测试数据可预测运行阶段的可靠性行为
    • 独立性假设:软件失效在不同时刻独立发生,互不影响
    • 相同性假设:所有失效后果等级相同,建模时不区分严重程度
2)软件的可靠性模型分类 23:15
  • img
  • 种子法模型:通过预先植入错误种子,根据测试发现的原始错误与诱导错误比例估计残留错误数
  • 失效率类模型:专门研究程序失效率的模型
  • 曲线拟合类模型:使用回归分析研究软件复杂性、缺陷数、失效率等指标
  • 可靠性增长模型:预测检错过程中的可靠性改进,用增长函数描述改进过程
  • 程序结构分析模型:基于程序调用关系构建可靠性分析网络
  • 输入域分类模型:通过输入域样本点的测试结果推断使用可靠性
  • 执行路径分析模型:计算各逻辑路径执行概率和错误路径概率综合评估可靠性
  • 非齐次泊松过程模型:以单位时间失效次数为泊松随机变量预测累计失效数
  • 马尔可夫过程模型:基于状态转移的可靠性分析方法
  • 贝叶斯模型:结合先验分布和测试信息评估可靠性
4. 软件可靠性管理 25:29
1)软件可靠性管理的内容 25:56
  • img
  • 定义:软件工程管理的一部分,以全面提高和保证软件可靠性为目标,管理软件生命周期中的可靠性活动
  • 各阶段任务:
    • 需求分析阶段:
      • 确定可靠性目标和验收标准
      • 分析影响因素
      • 制定框架和文档规范
      • 制定初步计划和数据收集规范
    • 概要设计阶段:
      • 确定可靠性度量方法
      • 制定详细验收方案
      • 进行可靠性设计
      • 收集数据并调整计划
    • 详细设计阶段:
      • 可靠性设计和预测
      • 调整计划并收集数据
      • 明确后续计划
    • 编码阶段:
      • 进行单元测试和排错
      • 调整计划并收集数据
      • 明确后续计划
    • 测试阶段:
      • 进行集成和系统测试
      • 排错和可靠性建模
      • 评价并调整计划
    • 实施阶段:
      • 进行验收测试
      • 排错并收集数据
      • 调整模型和评价
  • 特点:
    • 需求阶段侧重目标制定和规范建立
    • 设计阶段开始具体可靠性设计
    • 编码阶段增加单元测试内容
    • 测试阶段重点关注集成和系统测试
    • 实施阶段进行最终验收测试
5. 软件可靠性设计 29:32
1)软件可靠性设计 30:19
  • img
  • 基本概念
    • 定义:在常规软件设计中应用各种方法和技术,在兼顾功能和性能需求的同时满足可靠性要求
    • 重要性:实践证明是保障软件可靠性最有效、最经济、最重要的手段
    • 实施阶段:主要在软件设计阶段采取措施进行可靠性控制
  • 设计原则
    • 整体性原则:是软件设计的一部分,必须在总体设计框架中使用且不与其他设计原则冲突
    • 目标导向性:以提高和保障软件可靠性为最终目标,但需在满足软件质量要求的前提下
    • 有限性原则:需确定明确的可靠性目标,不能无限扩大化
    • 优先级原则:排在功能度、用户需求和开发费用之后考虑
  • 主要技术
    • 容错设计 32:45
      • 核心思想:系统出现错误时能够容忍并继续运行
      • 实现方式:主要通过冗余技术实现(具体技术后续详细介绍)
    • 检错设计
      • 核心思想:提前检查代码中是否存在错误
      • 实施时机:在系统运行前进行错误检测
    • 降低复杂度设计
      • 理论基础:软件复杂度与可靠性成反比关系
      • 设计目标:通过降低软件复杂度来提高可靠性
  • 可靠性保障技术分类
    • 必错技术:
      • 定义:通过技术评审、系统测试和正确性证明等技术
      • 实施阶段:在系统正式运行前避免、发现和改正错误
      • 特点:重在预防,运行前避免错误发生
    • 容错技术:
      • 与必错区别:主要在系统运行时处理已发生的错误
      • 技术重叠:与检错技术存在部分交叉
    • 检错技术:
      • 定位:属于必错技术的组成部分
      • 实施重点:错误检测而非错误处理
2)提高系统可靠性的技术 32:06
  • 容错技术
    • 冗余 33:23
      • 基本概念:在正常系统运行所需基础上增加额外资源(信息、时间、硬件、软件),是容错技术的基础。
      • 技术分类:
        • 结构冗余:增加多余部件,分为静态(如N版本程序设计)、动态(如恢复块方法)和混合三种
        • 信息冗余:增加校验码(奇偶校验码、循环冗余校验码、海绵校验码)
        • 时间冗余:重复执行功能并选择多数结果(单版本多次执行)
        • 冗余附加:为实现前三种冗余所需的额外资源(如备份机、校验码等)
      • 关键区别:
        • 静态冗余不影响系统正常运行(无切换过程),动态冗余有主动切换动作
        • 结构冗余既包含硬件冗余(物理备份机)也包含软件冗余(容错代码)
    • 软件容错的主要方法 39:49
      • 核心思想:通过冗余信息和算法程序实现运行时错误检测与补救
      • 典型技术:
        • N版本程序设计(静态结构冗余)
        • 恢复块方法(动态冗余)
        • 防卫式程序设计
      • 与减错区别:
        • 减错仅检查错误不纠正,属于容错技术子集
        • 容错需要完整处理机制(检测+恢复)
    • N版本程序设计 40:30
      • img
      • 实现机制:
        • 由不同团队独立开发N个功能相同但实现方法、语言、环境各异的版本
        • 通过表决器采用少数服从多数原则选择最终结果
        • 异常版本结果直接丢弃不做处理
      • 关键特征:
        • 静态冗余:无系统切换过程
        • 前向恢复:直接采用多数结果继续执行
        • 多机环境:各版本并行运行
        • 实时性好:无切换延迟
      • 设计要点:
        • 必须保证版本间独立性(降低相关错误概率)
        • 典型采用奇数个版本(便于表决)
    • 恢复块设计 41:49
      • img
      • 实现机制:
        • 采用主块+多个后备块的层级结构
        • 通过验证测试检测主块错误
        • 出错时按顺序启用后备块(后备块1→后备块2→…)
      • 关键特征:
        • 动态冗余:有显式切换过程
        • 后向恢复:需回退到前一正确状态
        • 单机环境:同一时间仅一个模块运行
        • 备份模式:
          • 热备份:备用模块与主模块同步工作
          • 冷备份:备用模块待机不工作
      • 技术对比:
        • 与N版本设计比较:
          • 恢复块采用验证测试检测错误,N版本通过表决
          • 恢复块实时性较差(需切换时间),N版本实时性好
          • 恢复块适合单机环境,N版本需要多机支持
  • 防卫式程序设计 45:44
    • img
    • 与传统容错技术的区别:不采用传统容错技术(如单机备份、N版本程序设计等),而是通过在程序中嵌入错误检测和恢复代码实现容错
    • 核心思想:采用软件冗余概念,包含错误检查代码和错误恢复代码,使程序能自动撤销错误状态并恢复到正确状态
    • 实现策略:
      • 错误检测:如C语言指针判空、Java的try-catch异常捕捉
      • 破坏估计:评估错误影响范围
      • 错误恢复:回滚到正确状态
    • 应用优势:相比传统容错技术更节省资源,是开发中最常用的容错实现方式
  • 双机容错技术 46:54
    • 双机容错与动态容余的关系 46:59
      • 包含关系:双机容错属于动态冗余技术的一种实现形式
      • 扩展性:动态冗余不仅限于双机,还可扩展为多机容错(如多个恢复块)
      • 理解方法:掌握双机原理即可类推理解多机容错
    • 双机容错技术的概述 47:24
      • 系统组成:
        • 硬件:两台服务器(或多台)+共享磁盘阵列
        • 软件:专用双机软件
      • 技术特点:软硬件结合的容错解决方案
    • 双机软件的作用与机制 47:46
      • 核心功能:
        • 数据同步:保持主备机数据一致性
        • 心跳检测:通过定期信号探测主机状态
      • 故障切换机制:当备份机持续未收到心跳信号时,自动接管主机服务
      • 实现要点:需要同时保证数据同步的实时性和心跳检测的可靠性
    • 双击热备模式 48:58
      • 工作方式:
        • 主机:处理所有用户请求
        • 备份机:仅同步数据,不处理请求
      • 优点:实现简单,切换逻辑清晰
      • 缺点:
        • 备份机资源闲置
        • 负载不均衡(主机承担全部负载)
      • 适用场景:对资源利用率要求不高的关键业务系统
    • 双击互备模式 49:47
      • 工作方式:
        • 服务器A:运行特定服务(如HTTP)
        • 服务器B:运行其他服务(如FTP)
        • 互相备份对方服务数据
      • 优点:
        • 提高资源利用率
        • 实现负载均衡
      • 故障处理:当单机故障时,另一台需同时运行两项服务,可能导致瞬时负载激增
    • 双击双攻模式 50:55
      • 工作方式:
        • 双机运行完全相同服务
        • 通过负载均衡策略分配用户请求
        • 保持实时数据同步
      • 优点:
        • 资源利用率最大化
        • 负载均衡效果最佳
        • 故障切换对用户透明
      • 实现复杂度:需要完善的负载均衡和数据同步机制
  • 集群技术
    • img
    • 双机容错技术
      • 组成结构:由两台服务器、外接共享磁盘阵列及相应双机软件组成的软硬件结合容错方案
      • 心跳机制:主从系统间定时发送通信信号确认运行状态,若主机故障或信号中断,备用系统立即接管
      • 工作模式:
        • 双机热备模式:主系统工作,备用系统待命
        • 双机互备模式:两台服务器互为备份
        • 双机双工模式:两台服务器同时工作(采用集群技术)
    • 集群技术原理
      • 核心概念:将多台计算机组织起来协同工作,提高系统可用性和可靠性
      • 任务分配:每台计算机承担部分计算任务和容错任务
      • 故障处理:
        • 自动隔离故障节点
        • 通过负载转嫁机制重新分配任务
        • 向管理员发出警报
      • 典型应用:云计算中的大规模数据计算(如Redis集群)
    • 技术特点
      • 五大特性:
        • 可伸缩性:可灵活扩展计算节点
        • 高可用性:自动故障转移保障服务
        • 可管理性:便于系统监控维护
        • 高性价比:相对单机高性能方案成本更低
        • 高透明性:对用户无感知的系统切换
    • 集群分类
      • 高性能计算集群:用于科学计算等需要强大算力的场景
      • 负载均衡集群:合理分配计算任务,避免单点过载
      • 高可用性集群:重点保障系统持续可用(如双机双工模式)
    • 技术优势
      • 可靠性机制:多节点并行工作,单点故障不影响整体
      • 负载均衡:动态调整任务分配,优化资源利用率
      • 扩展便利:可根据需求增减计算节点
  • 负载均衡 53:07
    • 负载均衡的定义与目的 53:29
      • img
      • 技术本质: 集群系统中的关键技术,通过分配工作负载提高系统整体性能
      • 核心作用:
        • 提升集群处理能力和可靠性
        • 加快系统响应速度
        • 提高客户端访问成功率
      • 典型场景: 以12306春运购票为例,当访问量激增时,通过负载均衡将1亿次访问分配到1万台服务器,使每台仅处理1万次请求
      • 关键特征: 实现多节点并行工作的负荷均衡,避免局部过载或闲置
    • 负载均衡的实现技术 53:42
      • 应用层技术(HTTP重定向)
        • 实现原理: 服务器返回HTTP重定向响应而非请求对象,客户端根据新地址重新发起请求
        • 协议特性: 利用网络协议自带的重定向功能
        • 典型应用: Web服务场景中的请求分流
      • 传输层技术(DNS负载均衡)
        • 特殊说明: 虽然DNS本身是应用层协议,但基于DNS的负载均衡属于传输层技术(需特别记忆)
        • 工作机制:
          • 单个域名配置多个IP地址
          • DNS轮询返回不同解析结果
          • 典型案例:淘宝/百度等大型网站一个域名对应数万台服务器
        • 优势: 实现简单,是互联网最常用的负载均衡技术
      • 其他实现技术
        • NAT转换:
          • 外部IP映射多个内部IP
          • 动态转换连接请求到不同内部节点
          • 本质是多对一的地址转换关系
        • 反向代理:
          • 将外部请求动态转发给内部多个节点
          • 与正向代理形成对比(后文详述)
        • 混合型: 多种技术的组合应用
    • 负载均衡的考试重点 54:18
      • 高频考点:
        • 应用层(HTTP重定向)与传输层(DNS)两种技术的区分
        • DNS负载均衡虽使用应用层协议但属于传输层技术的特殊性质
      • 论文警示:
        • 2019年架构考试曾出现负载均衡论文题
        • 但缺乏足够知识储备的考生得分普遍较低
        • 建议非专业人士仅掌握基础概念即可
    • 正向代理与反向代理的概念 57:41
      • 正向代理:
        • 客户端通过代理访问服务器
        • 服务器无法识别真实客户端(隐藏客户端)
        • 典型场景:VPN、科学上网等
      • 反向代理:
        • 服务器通过代理向客户端提供服务
        • 客户端无法识别真实服务器(隐藏服务器)
        • 典型应用:CDN、负载均衡等
      • 考试提示: 代理相关概念考查频率较低,理解基本区别即可
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负载均衡归属(属于传输层技术) ⭐⭐⭐
可靠性测试步骤 定义环境→设计用例→实施测试→结果分析 数据收集阶段(主要在测试和实施阶段) ⭐⭐
可靠性模型选择 需考虑模型假设/预测能力/输出值适用性/使用便捷性 三大共同假设(代表性/独立性/相同性) ⭐⭐
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐