13.1.2 软件可靠性的定量描述
·
串并联系统可靠性
无论什么系统,都是由多个设备组成,并协同工作,而这多个设备的组合方式可以是串联、并联,也可以是混合模式。假设每个设备的可靠性为 R1,R2⋯Rn,则:
1. 串联系统可靠性
- 公式:R=∏ni=1Ri
- 模型说明:输入依次经过 R1,R2⋯Rn 处理后输出。只要其中一个设备失效,整个系统就会失效。
2. 并联系统可靠性
- 公式:R=1−∏ni=1(1−Ri)
- 模型说明:输入同时分发至 R1,R2⋯Rn 进行处理后汇总输出。只有当所有设备都失效时,系统才会失效。
13.1.4 可靠性测试的意义
可靠性测试的意义
- 灾难性后果:软件失效可能造成灾难性的后果。
- 高占比:软件的失效在整个计算机系统失效中的比例较高。
- 技术不成熟:软件可靠性技术很不成熟,加剧了软件可靠性问题的重要性。
- 成本增加:软件可靠性问题是造成软件费用增长的主要原因之一。
- 依赖性增强:系统对于软件的依赖性越来越强,软件对生产活动和社会生活的影响越来越大,从而增加了软件可靠性问题在软件工程领域乃至整个计算机工程领域的重要性。
可靠性测试的目的
- 发现缺陷:发现软件系统在需求、设计、编码、测试和实施等方面的各种缺陷。
- 提供数据:为软件的使用和维护提供可靠性数据。
- 确认达标:确认软件是否达到可靠性的定量要求。
13.2 软件可靠性模型
13.2.1 影响软件可靠性的因素
- 软件可靠性模型定义:为预计或估算软件的可靠性所建立的可靠性框图和数学模型。
- 主要影响因素(从技术角度):
- 运行剖面(环境)
- 软件规模
- 软件内部结构
- 软件的开发方法和开发环境
- 软件的可靠性投入
13.2.2 软件可靠性的建模方法
-
模型组成部分:
- (1) 模型假设:模型是实际情况的简化或规范化,总要包含若干假设,例如测试的选取代表实际运行剖面(环境),不同软件失效独立发生等。
- (2) 性能度量:软件可靠性模型的输出量就是性能度量,如失效强度、残留缺陷数等。在软件可靠性模型中性能度量通常以数学表达式给出。
- (3) 参数估计方法:某些可靠性度量的实际值无法直接获得(例如残留缺陷数),这时需通过一定的方法估计参数的值,从而间接确定可靠性度量的值。
- (4) 数据要求:一个软件可靠性模型要求一定的输入数据,即软件可靠性数据。
-
绝大多数模型包含的3个共同假设:
- (1) 代表性假设:是指可以用测试产生的软件可靠性数据预测运行阶段的软件可靠性行为。
- (2) 独立性假设:此假设认为软件失效是独立发生于不同时刻,一个软件失效的发生不影响另一个软件失效的发生。
- (3) 相同性假设:此假设认为所有软件失效的后果(等级)相同,即建模过程只考虑软件失效的具体发生时刻,不区分软件的失效严重等级。
13.3 软件可靠性管理
1. 基本概念
- 定义:软件可靠性管理是软件工程管理的一部分,它以全面提高和保证软件可靠性为目标,以软件可靠性活动为主要对象,是把现代管理理论用于软件生命周期中的可靠性保障活动的一种管理形式。
- 核心内容:包括软件工程各个阶段的可靠性活动的目标、计划、进度、任务和修正措施等。
2. 各阶段可靠性活动
-
需求分析阶段:
- 确定可靠性目标
- 分析影响因素
- 确定验收标准
- 制定管理框架
- 制定文档编写规范
- 制定活动初步计划
- 确定数据收集规范
-
概要设计阶段:
- 确定可靠性度量
- 制定详细验收方案
- 可靠性设计
- 收集可靠性数据
- 调整活动计划
- 明确后续阶段详细计划
- 编制文档
-
详细设计阶段:
- 可靠性设计
- 可靠性预测
- 调整活动计划
- 收集可靠性数据
- 明确后续阶段详细计划
- 编制文档
-
编码阶段:
- 可靠性测试(含于单元测试)
- 排错
- 调整活动计划
- 收集可靠性数据
- 明确后续阶段详细计划
- 编制文档
-
测试阶段:
- 可靠性测试(含于集成测试、系统测试)
- 排错
- 可靠性建模
- 可靠性评价
- 调整活动计划
- 收集可靠性数据
- 明确后续阶段详细计划
- 编制文档
-
实施阶段:
- 可靠性测试(含于验收测试)
- 排错
- 收集可靠性数据
- 调整模型
- 可靠性评价
- 编制文档
13.4 软件可靠性设计
1. 可靠性控制的最佳阶段
实践证明,保障软件可靠性最有效、最经济、最重要的手段是在软件设计阶段采取措施进行可靠性控制。
2. 定义
可靠性设计就是在常规的软件设计中,应用各种方法和技术,使程序设计在兼顾用户的功能和性能需求的同时,全面满足软件的可靠性要求。
3. 软件可靠性设计的原则
- 整体性与协调性:软件可靠性设计是软件设计的一部分,必须在软件的总体设计框架中使用,并且不能与其他设计原则相冲突。
- 质量与目标导向:软件可靠性设计在满足提高软件质量要求的前提下,以提高和保障软件可靠性为最终目标。
- 合理定位与目标设定:软件可靠性设计应确定软件的可靠性目标,不能无限扩大化,并且排在功能度、用户需求和开发费用之后考虑(即在满足基本功能和成本约束后再追求高可靠性)。
4. 主要设计技术
软件可靠性设计技术主要有容错设计、检错设计、降低复杂度设计和系统配置技术等技术。
13.4 软件可靠性设计
1. 两大关键技术分类
提高系统可靠性的技术可以分为以下两类:
- 避错(排错)技术:
- 定义:通过技术评审、系统测试和正确性证明等技术,在系统正式运行之前避免、发现和改正错误。
- 容错技术:
- 定义:系统在运行过程中发生一定的硬件故障或软件错误时,仍能保持正常工作而不影响正确结果的一种性能或措施。
- 核心手段:主要是采用冗余方法来消除故障的影响。
2. 冗余技术详解
- 定义:在正常系统运行所需的基础上加上一定数量的资源,包括信息、时间、硬件和软件。
- 地位:冗余是容错技术的基础,通过冗余资源的加入,可以使系统的可靠性得到较大的提高。
- 主要的冗余技术分类(4种):
- 结构冗余(分为静态、动态、混合)
- 信息冗余
- 时间冗余
- 冗余附加
13.4.1 容错设计技术
1. 软件容错技术主要方法
- 恢复块设计
- N版本程序设计
- 冗余设计
2. 恢复块设计(动态冗余)
-
基本概念:
- 程序的执行过程是由一系列操作构成的。
- 该方法的核心是选择一组操作作为容错设计单元,将普通程序块转化为恢复块。
- 本质是一种动态的故障屏蔽技术,采用后向恢复策略。
-
设计重点与要求:
- 独立性:必须保证实现主块和后备块之间的独立性。
- 防共因错误:避免相关错误的产生,使主块和备份块之间的共性错误降到最低程度。
- 验证:必须保证验证测试程序的正确性。
3. 冗余设计
- 实现原理:
- 在一套完整的软件系统之外,设计一种不同路径、不同算法或不同实现方法的模块或系统作为备份。
- 工作机制:在出现故障时,可以使用冗余的部分进行替换,从而维持软件系统的正常运行。
4. N版本程序设计
-
核心机制:
- 通过设计出多个模块或不同版本。
- 对于相同初始条件和相同输入的操作结果,实行多数表决。
- 目的:防止其中某一软件模块/版本的故障提供错误的服务,以实现软件容错。
-
关键注意事项:
- 需求说明的完备性:软件需求说明必须具有完全性和精确性,这是保证软件设计错误不相关的前提。
- 设计全过程的不相关性:
- N个版本的程序必须由不同的人独立设计。
- 必须使用不同的算法、编程语言、编译程序、设计工具、实现方法和测试方法。
- 目的:减少N个版本的程序在表决点上相关错误的概率。
-
技术属性:
- 类型:一种静态的故障屏蔽技术。
- 策略:采用前向恢复的策略
13.4.1 容错设计技术
3. 恢复块设计与N版本程序设计的比较
| 对比维度 | 恢复块方法 | N版本程序设计 |
|---|---|---|
| 硬件运行环境 | 单机 | 多机 |
| 错误检测方法 | 验证测试程序 | 表决 |
| 恢复策略 | 后向恢复 | 前向恢复 |
| 实时性 | 差 | 好 |
4. 恢复策略定义
-
前向恢复:
- 定义:使当前的计算继续下去,把系统恢复成连贯的正确状态,弥补当前状态的不连贯情况。
-
后向恢复:
- 定义:系统恢复到前一个正确状态,继续执行。
13.4.4 系统配置技术
1. 概述
- 核心手段:在系统配置中采用容错技术,通过系统的整体来提供相应的可靠性。
- 主要技术:
- 双机热备技术
- 服务器集群技术
2. 双机热备技术
-
定义:一种软硬件结合的较高容错应用方案。
-
系统组成:
- 两台服务器
- 一个外接共享磁盘阵列柜
- 相应的双机热备份软件
-
关键机制:“心跳”方法
- 功能:保证主系统与备用系统的联系。
- 原理:主从系统之间相互按照一定的时间间隔发送通信信号,表明各自系统当前的运行状态。
- 故障切换流程:
- 检测:一旦“心跳”信号表明主机系统发生故障,或者备用系统无法收到主系统的“心跳”信号。
- 判定:系统的高可用性管理软件认为主系统发生故障。
- 切换:立即将系统资源转移到备用系统上。
- 接管:备用系统替代主系统工作,以保证系统正常运行和网络服务不间断。
-
3种工作模式:
- 双机热备模式
- 双机互备模式
- 双机双工模式
13.4.4 系统配置技术
双机热备技术的三种工作模式
1. 双机热备模式 (Active/Standby)
- 工作机制:
- Active服务器处于工作状态,Standby服务器处于监控准备状态。
- 数据(包括数据库数据)同时往两台或多台服务器写入,保证数据的即时同步。
- 故障处理:当Active服务器出现故障时,通过软件诊测或手工方式将Standby机器激活,保证应用在短时间内完全恢复正常使用。
- 特点:
- 是目前采用较多的一种模式。
- 缺点:另外一台服务器长期处于后备状态,存在一定的计算资源浪费。
2. 双机互备模式
- 工作机制:
- 两个相对独立的应用在两台机器上同时运行。
- 彼此均设为备机。
- 故障处理:当某一台服务器出现故障时,另一台服务器可以在短时间内将故障服务器的应用接管过来,保证应用的持续性。
- 特点:对服务器的性能要求比较高。
3. 双机双工模式
- 工作机制:
- 集群的一种形式。
- 两台服务器均处于活动状态,同时运行相同的应用。
- 优势:
- 保证整体系统的性能。
- 实现了负载均衡和互为备份。
- 存储技术:通常使用磁盘柜存储技术。
- 应用场景:Web服务器、FTP服务器等用此种方式比较多。
13.4.4 系统配置技术
2. 服务器集群技术
-
定义:
- 指一组相互独立的服务器在网络中组合成为单一的系统工作,并以单一系统的模式加以管理。(即将多台计算机组织起来进行协同工作)
-
工作机制:
- 任务分担:每台计算机均承担部分计算任务和容错任务。
- 故障处理:
- 隔离:当其中一台计算机出现故障时,系统使用集群软件将这台计算机从系统中隔离出去。
- 负载转嫁:通过各计算机之间的负载转嫁机制完成新的负载分担。
- 报警:同时向系统管理人员发出警报。
- 最终目标:通过功能整合和故障过渡,实现了系统的高可用性和可靠性。
-
特点:
- 可伸缩性
- 高可用性
- 可管理性
- 高性价比
- 高透明性
-
分类:
- 高性能计算集群
- 负载均衡集群
- 高可用性集群
13.4.4 系统配置技术
负载均衡技术
-
定义与目的:
- 是集群系统中的一项重要技术。
- 作用:提高集群系统的整体处理能力和系统可靠性,加快响应速度,提高客户端访问的成功概率。
- 核心目的:让所有节点承受的负荷平均,不出现局部过大负载或过轻负载的情况。
-
常用的负载均衡实现技术:
- 基于特定软件的负载均衡(应用层)
- 原理:利用网络协议(如HTTP)的重定向功能。服务器返回一个重定向响应,客户端确认新地址后重发请求,从而达到负载均衡。
- 基于DNS的负载均衡(传输层)
- 原理:在DNS服务器中为同一个主机名配置多个IP地址。应答查询时按顺序返回不同的解析结果,将客户端引导至不同节点。
- 基于NAT的负载均衡
- 原理:将一个外部IP地址映射为多个内部IP地址。动态转换连接请求的内部地址,将外部请求引导至对应节点。
- 反向代理负载均衡
- 原理:将来自Internet的连接请求以反向代理的方式动态地转发给内部网络上的多个节点进行处理。
- 混合型负载均衡
- 基于特定软件的负载均衡(应用层)
13.5 软件可靠性测试
1. 测试概述
- 主要活动:由可靠性目标的确定、运行剖面的开发、测试用例的设计、测试实施、测试结果
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)