考点:
- 可靠性相关基本概念 ⭐️⭐️
- 系统可靠性分析 ⭐️⭐️⭐️⭐️
- 可靠性指标
- 可靠性计算
- 系统可靠性模型
- 软件可靠性设计 ⭐️⭐️⭐️⭐️
主考论文写作
目录
1 可靠性相关基本概念辨析 ⭐️⭐️
可靠性与可用性辨析:
- 可靠性(Reliability):软件系统在应⽤或系统错误⾯前,在意外或错误使⽤的情况下维持软件系统的功能特性的基本能⼒。
- 可⽤性(Availability):系统能够正常运⾏的时间⽐例。
软件可靠性 ≠ 硬件可靠性
软硬件对⽐:
- 复杂性:软件复杂性⽐硬件⾼,⼤部分失效来⾃于软件失效。
- 物理退化:硬件失效主要是物理退化所致,软件不存在物理退化。
- 唯⼀性:软件是唯⼀的,每个COPY版本都⼀样,⽽两个硬件不可能完全⼀样。
- 版本更新周期:硬件较慢,软件较快。
2 系统可靠性分析 ⭐️⭐️⭐️⭐️
2.1 可靠性指标
- 平均⽆故障时间(MTTF):系统⽆故障运⾏的平均时间,
MMTF = 1 / λ
(λ
为失效率) - 平均故障修复时间(MTTR):从出现故障到修复成功中间的这段时间,
MTTR = 1 / μ
(μ
为修复率) - 平均故障间隔时间(MTBF):
MTBF = MTTR + MTTF
- 系统可⽤性:
MTTF / (MTTR + MTTF) × 100%
在实际应⽤中,⼀般MTTR很⼩,所以通常认为 MTBF ≠ MTTF。
【计算方法例】计算如图所示的平均无故障时间、平故障修复时间以及系统可用性。
【解】
- 平均无故障时间:
MTTF = (1000 + 800 + 600) / 3 = 800
- 平均故障修复时间:
MTTR = (3 + 1 + 2) / 3 = 2
- 系统可用性:
800 / (800 + 2) × 100%
2.2 可靠性计算
串联系统:
- 可靠性:
R = R1 × R2 × ... × Rn
- 失效率近似公式:
λ = λ1 + λ2 + ... + λn
(意义不大,仅供参考)
并联系统:
- 可靠性:
R = 1 - (1 - R1) × (1 - R2) × ... × (1 - Rn)
N模混联系统:先将整个系统划分为多个部分串联,再计算各串联内部的并联可靠性,代⼊原公式。
- 可靠性:
R × (1 - (1 - R)^3) × (1 - (1 - R)^2)
2.3 系统可靠性模型
可靠性模型⼤致可分为如下10类:
- 种⼦法模型:预先有意“播种”⼀些设定的错误“种⼦”,再看种⼦发现⽐例。
- 失效率类模型:如:Jelinski-Moranda的De-eutrophication 模型、Schick-Wolverton模型。
- 曲线拟合类模型:⽤回归分析的⽅法研究软件复杂性、程序中的缺陷数、失效率、失效间隔时间。
- 可靠性增⻓模型:预测软件在检错过程中的可靠性改进,⽤增⻓函数来描述软件的改进过程。
- 程序结构分析模型:根据程序、⼦程序及其相互间的调⽤关系,形成⼀个可靠性分析⽹络。
- 输⼊域分类模型:选取软件输⼊域中的某些样本“点”运⾏程序,根据这些样本点在“实际”使⽤环境中的使⽤概率的测试运⾏时的成功/失效率,推断软件的使⽤可靠性。
- 执⾏路径分析⽅法模型:先计算程序各逻辑路径的执⾏概率和程序中错误路径的执⾏概率,再综合出该软件的使⽤可靠性。
- ⾮⻬次泊松过程模型:以软件测试过程中单位时间的失效次数为独⽴泊松随机变量,来预测在今后软件的某使⽤时间点的累计失效数。
- ⻢尔可夫过程模型:例如完全改错的线性死亡模型、不完全改错的线性死亡模型。
- ⻉叶斯分析模型:利⽤失效率的试验前分布和当前的测试失效信息,来评估软件的可靠性。
- ⼀个好的可靠性模型需要具备什么特性?
- 答:⼀个好的软件可靠性模型应该具有如下重要特性:基于可靠的假设;简单;计算⼀些有⽤的量;给出未来失效⾏为的好的映射;可⼴泛应⽤。
3 软件可靠性设计 ⭐️⭐️⭐️⭐️
⼴义的软件可靠性测试:为了最终评价软件系统的可靠性⽽运⽤建模、统计、试验、分析和评价等⼀系列⼿段对软件系统实施的⼀种测试。
狭义的软件可靠性测试:为了获取可靠性数据,按预先确定的测试⽤例,在软件的预期使⽤环境中,对软件实施的⼀种测试。又称“软件可靠性试验”,是⾯向缺陷的测试,以⽤户将要使⽤的⽅式来测试软件,每⼀次测试代表⽤户将要完成的⼀组操作,使测试成为最终产品使⽤的预演。
负载均衡是否算是提⾼可靠性的策略?提⾼可⽤性的策略是否也算是提⾼可靠性设计的策略?
- 答:提⾼可靠性最主要的技术是检错技术、容错设计和降低复杂度设计。可靠性和可⽤性这两个质量属性是相互促进的作⽤。提⾼可⽤性的同时,间接在提⾼系统的可靠性,所以,他们的设计策略在⼀定程度上是有相互包含的。负载均衡在某些⻆度来看算是提⾼可靠性的策略。⽐如使⽤带有负载平衡的多个服务器组件,取代单⼀的组件,可以通过冗余提⾼可靠性。
3.1 影响可靠性的因素
按层级划分影响软件可靠性的主要因素:
- 环境因素
- 软件的开发方法和开发环境
- 运行环境
- 软件系统
- 软件规模
- 软件内部结构
- 软件的可靠性投入
3.2 可靠性设计技术
主动冗余与被动冗余:
- 主动冗余:处理结点出故障之后,结点本身或控制器会协调没有出故障的结点提供处理服务。
- 被动冗余:靠请求者⾃⼰完成上述⼯作,请求者若发现⼀台服务器不能正常提供服务,则转⽽找另⼀台服务器。
3.2.0 系统可靠性案例分析总结 ☀️☀️
可靠性的定义:系统在规定的时间内及规定的环境条件下,完成规定功能的能力,即系统无故障运行的概率。
根据国家标准《软件工程产品质量第1部分:质量模型》(GB/T16260.1-2006)的规定,系统可靠性包括如下4个子特性:成熟性、容错性、易恢复性、可靠性的依从性。
常用的可靠性设计技术:
- 避错技术
- 降低复杂度设计
- 检错技术:出错后报警。人工处理,成本较低。
- 常见的实现方式:
- 判断返回结果:若返回结果超出正常范围, 则进行异常处理
- 计算运行时间:若某个模块或函数运行时间超过预期时间, 可判定其出现故障
- 置状态标志位(根据实际情况选用合适方法)
- 常见的实现方式:
- 容错技术:使用冗余机制
- 冗余的分类
- 结构冗余:硬件冗余、软件冗余
- 信息冗余:校验码
- 时间冗余:重复多次进行相同的计算
- 具体设计技术(图示详见对应节)
- 恢复块设计:动态冗余;是一种反向恢复的方法,其核心原理是:对于可靠性要求高的软件,在程序运行的某时刻,将数据或程序进行备份,一旦发现主块有异常发生时,可将后备块中已备份的数据或程序进行恢复,保证程序的正确性。
- N版本程序设计:静态冗余;是一种静态的故障屏蔽技术,其设计思想是用N个具有相同功能的程序同时执行一项计算,结果通过多数表决来选择。其中N个版本的程序必须由不同的人独立设计,使用不同的方法、设计语言、开发环境和工具来实现,目的是减少N个版本的程序在表决点上相关错误的概率。
- ~防卫式程序设计~
- 冗余的分类
对比内容 | 恢复块方法 | N版本程序设计 |
---|---|---|
硬件运行环境 | 单机 | 多机 |
错误检测方法 | 验证测试程序 | 表决 |
恢复策略 | 反向恢复 | 向前恢复 |
实时性 | 差 | 好 |
动态冗余又称主动冗余,它是通过故障检测、故障定位及故障恢复等手段达到容错的目的。其主要方式是多重模块待机储备,当系统检测到某工作模块出现错误时,就用一个备用的模块来替代它并重新运行。各备用模块在其待机时,可与主模块一样工作,也可以不工作。前者叫热备份系统(双重系统),后者叫冷备份系统(双工系统、双份系统)。
可靠性是实时系统的关键特性之一,区分软件的错误(Error)、缺陷(Defect)、故障(Fault)和失效(Failure)概念是软件可靠性设计工作的基础。错误、缺陷、故障和失效的定义如下:
- 软件错误:在软件生存期内的不希望或不可接受的人为错误,其结果是导致软件缺陷的产生。
- 软件缺陷:存在于软件(文档、数据、程序)之中的那些不希望或不可接受的偏差。
- 软件故障:软件运行过程中出现的一种不希望或不可接受的内部状态。
- 软件失效:软件运行时产生的一种不希望或不可接受的外部行结果。
3.2.1 恢复块⽅法
恢复块方法与N版本程序设计的区别在于存在主块与后备块,验证输出时不再一起验证,而是改为先验主块,仅当主块测试不合格时才启用后背块,以此类推。属于前向恢复。
恢复⽅法分类:
- 前向恢复:使当前的计算继续下去,把系统恢复成连贯的正确状态,弥补当前状态的不连贯情况(恢复块方法)
- 后向恢复:系统恢复到前⼀个正确状态,继续执⾏(N版本程序设计)
恢复块⽅法与N版本程序设计对⽐:
恢复块方法 | N版本程序设计 | |
---|---|---|
硬件运⾏环境 | 单机 | 多机 |
错误检测⽅法 | 验证测试程序 | 表决(少数服从多数) |
恢复策略 | 后向恢复 | 前向恢复 |
实时性 | 差 | 好 |
设计时应保证实现主块和后备块之间的独⽴性,避免相关错误的产⽣,使主块和备份块之间的共性错误降到最低程度。
必须保证验证测试程序的正确性。
3.2.2 N版本程序设计
N版本程序设计的思想为由多个组独立开发各自的版本(通常部署在不同服务器上),用表决器表决这些版本(验证各版本的输出,其结果不一定相同),通常少数服从多数,选取出现次数最多的结果作为正确结果。属于后向恢复(定义见恢复块方法)。
可选的表决算法:
- 全等表决
- ⾮精确表决
- Cosmetie表决
与通常软件开发过程不同的是,N版本程序设计增加了三个新的阶段:相异成份规范评审、相异性确认、背对背测试。
其他内容:N版本程序的同步、N版本程序之间的通信、⼀致⽐较问题、数据相异性
3.2.3 防卫式程序设计
防卫式程序设计对于程序中存在的错误和不⼀致性,通过在程序中包含错误检查代码和错误恢复代码,使得⼀旦错误发⽣,程序能撤销错误状态,恢复到⼀个已知的正确状态中去。(例如:try ... catch
)
实现策略:错误检测、破坏估计、错误恢复
3.3 双机容错
双机模式是集群的前身(早期的集群;只有两台)。机器之间用心跳线相连。
- 双机热备模式:主系统、备⽤系统。仅一台机器运作,资源验证浪费。
- 双机互备模式:同时提供不同的服务,⼼不跳则接管
- 双机双⼯模式:同时提供相同的服务(各分50%任务),集群的⼀种