软件可靠性基础知识
1. 软件可靠性基础概念
可靠性定义:软件系统在应用或系统错误面前,在意外或错误的使用情况下维持软件系统的功能特性的基本能力
可用性定义:系统能够正常运行的时间比例
软件可靠性 不等于 硬件可靠性,有如下几点区别:
软件 | 硬件 | |
复杂性 | 高(大部分失效来源于软件失效) | 低 |
物理退化 | 不存在 | 存在 |
唯一性 | 唯一(每个COPY版本都一样) | 两个硬件不可能完全一样 |
版本更新周期 | 快 | 慢 |
2. 软件可靠性建模
影响软件可靠性的因素:软件的开发方法和开发环境、运行环境、软件规模、软件内部结构、软件的可靠性投入
可靠性模型:
组成:模型假设、性能度量、参数估计方法、数据要求
特征:基于可靠的假设、简单、计算一些有用的量、给出未来失效行为好的映射、可广泛应用
软件可靠性建模方法:种子法、失效率类、曲线拟合类、可靠性增长、程序结构分析、输入域分析、执行路径分析方法、非齐次泊松过程、马尔可夫过程、贝叶斯分析
3. 软件可靠性管理
4. 软件可靠性分析
平均无故障时间(MTTF): MTTF= 1/λ, λ为失效率
平均故障修复时间(MTTR):MTTR=1/μ, μ为修复率
平均故障间隔时间(MTBF): MTBF= MTTF + MTTR (实际应用中,一般MTTR很小,通常认为MTBF ≈ MTTF)
系统可用性:MTTF/MTBF * 100%
串联系统:
可靠性:R= R1*R2*……*Rn
失效率近似公式:λ = λ1+λ2+……+λn
并联系统:
可靠性:R= 1-(1-R1)*(1-R2)*……*(1-Rn)
5. 软件可靠性设计
1) 容错设计技术
N版本程序设计(静态冗余):通过设计多个模块或不同版本,对相同初始条件和相同输入的操作结果, 实行多数表决,防止其中某一软件模块/版本的故障提供错误的服务。
增加了3个新阶段:相异成分规范评审、相异性确认、背对背测试
N版本程序同步、N版本程序之间通信、表决算法(全等表决、非精确表决、Cosmetie表决)、一致比较问题、相异性问题
恢复块设计(动态冗余):选择一组操作作为容错设计单元,把普通的程序块变成恢复块
应保证实现主块和后备块之间的独立性,避免相关错误的产生,使主块和备用块共性错误降到最低程度
必须保证验证测试程序的正确性
恢复块方法 | N版本程序设计 | |
硬件运行环境 | 单机 | 多机 |
错误检测方法 | 验证测试程序 | 表决 |
恢复策略 | 后向恢复 | 前向恢复 |
实时性 | 差 | 好 |
防卫式程序设计:对应程序中存在的错误和不一致性,通过在程序中包含错误检测代码和错误恢复代码,错误发生能撤销错误状态,恢复到已知的一个正确状态
策略:错误检测、破坏估计、错误恢复
冗余:结构冗余(硬/软件冗余)、信息冗余(校验码)、时间冗余(重复多次进行相同的计算)
2)检错技术
出错后报警,人工处理,成本较低
3)降低复杂度设计
4)系统配置技术
双机热备技术:
采用“心跳”方法保持主机与备用之间的联系
双机热备模式(一个主机,一个备用)
双机互备模式(同时提供不同的服务,不心跳则接管)
双机双工模式(同时提供相同的服务,集群的一种)
服务集群技术: