一、软件可靠性定义
软件可靠性使软件产品在规定的条件下和规定的时间区间内完成规定的功能的能力。是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统功能特性的基本能力。
规定的条件:直接与软件运行相关的使用该软件的计算机系统的状态和软件的输入条件(软件运行时的外部输入条件)
规定的时间区间:软件的实际运行时间区间
规定功能:为提供给定能力,软件产品所必须具备的功能。
软件可靠性和硬件可靠性的区别:
1. 复杂性:软件内部逻辑高度复杂,硬件则相对简单。设计错误是导致软件失效的主要
原因。
2. 物理退化:硬件失效主要是因为物理退化,软件不存在物理退化
3. 唯一性:软件是唯一的,软件复制不改变本身,而任何两个硬件是不可能绝对相同。
4. 版本更新周期:软件更新较快,硬件更新较慢
二、关键可靠性的定量描述
规定时间的三种概念:
1. 自然时间:日历时间;
2. 运行时间:软件从启动开始,到运行结束的时间段
3. 执行时间:软件运行过程中,CPU执行程序指令所用时间总和(最准确,效果最好)
失效概率:
失效概率可以看作是一个随机函数F(t),有如下特征:
1. F(0) = 0;程序在运行初始时刻的失效概率为0
2. F(t)随时间的增加单调递增
3. F(+∞) = 1;失效概率随时间增长趋向于1
可靠度:
可靠性最为直接的表示方式,可靠度就是软件系统在规定的条件下、规定时间内不发生
失效的概率。可靠度R(t) = 1 - F(t)
串联系统可靠度:R = R1 x R2 x .... x Rn
串联系统是效率:F = F1 + F2 + ... + F3
并联系统可靠度:1 - (1-R1) x (1-R2) x .... x (1-Rn)
失效强度:
单位时间内软件系统出现失效的概率。F(t)的斜率.
平均失效前时间(MTTF):
平均失效前时间也被称为平均无故障时间:MTTF = 1/F(t)
平均故障间隔时间(MTTR):
失效或维护中所需要的平均时间
平均故障间隔时间(MTBF):
系统出现失效到下一次出现失效的平均时间。MTBF = MTTF + MTTR
系统可靠性=MTTF/(MTTF+MTTR)
影响软件可靠性的因素 :
1. 运行环境
2. 软件规模
3. 软件内部结构
4. 软件的开发方法和开发环境
5. 软件的可靠性投入
三、软件可靠度的建模方法和模型分类
可靠性模型的组成:
1. 模型假设:模型是实际情况的简化或规范化
2. 性能度量:软件可靠性模型的输出量
3. 参数估计方法:某些可靠性独立无法直接获得,需要间接确定可靠性度量的值
4. 数据要求:可靠性模型要求一定的输入数据,即可靠性数据
一个好的可靠性模型应该包含以下特性:
1. 基于可靠的假设; 2. 简单; 3. 计算一些有用的量;4. 给出未来失效行为的好的映
射;5. 可广泛应用
可靠性模型的三个假设:
1. 代表性假设:软件测试用例的选取代表软件实际的运行剖面
2. 独立性假设:软件的失效时独立发生的
3. 相同性假设:所有软件失效的后果相同
可靠性模型分类:
1. 种子法模型
种子法模型利用捕获一再捕获抽样技术估计程序中的错误数,在程序中预先有意播
种一些设定的错误种子,根据测试出的原始错误数和发现的诱导错误的比例来估算残余
错误数。优点:简单易行;缺点:诱导错误的种子与实际的原始错误之间的类比性估量
困难。
2. 失效率类模型:
用来研究程序的失效率
3. 曲线拟合类模型:
用回归分析的方法研究软件复杂性、缺陷型、失效率等,包括参数法和非参数法
4. 可靠性增长模型:
用增长函数来表述软件的改进过程。
5. 程序结构分析模型:
根据程序、子程序及其相互调用关系形成一个可靠性分析网络
6. 输入域分类模型:
从软件输入域中的某些样本的点运行程序,根据这些样本点在实际环境中的使用的
概率测试运行时的成功/失效率,推断软件的使用可靠性。
7. 执行路径分析方法模型:
先计算程序各逻辑路径的执行概率和程序中错误路径的执行概率,再综合出该软件
的使用可靠性
8. 非齐次柏松过程模型
以软件测试过程中单位时间的失效从设计为独立柏松随机变量,来预测今后软件在
某使用时间点的累积失效数
9. 马尔可夫过程模型
完成改错的线性死亡模型
不完全改错的线性死亡模型
完全改错的非静态线性死亡模型
10.贝叶斯分析模型
利用失效率的实验前分布和当前的测试失效信息,来评估软件的可靠性
四、软件可靠性设计
一、恢复快设计
主块验证失败时,备用块介入执行。设计时应该保证实现主块和备用块之间的独立性,
必须保证验证测试程序的正确性
二、N版本程序设计
核心是通过设计多个模块或不同版本,对于相同初始条件和相同输入的操作,对结果实
时多数表决。
需要注意的地方:
1. 使软件的需求说明具有完全性和精确性,这是保证软件程序错误不想管的前提。
2. 设计过程的不相关性,完全独立
与传统软件开发相比,N版本程序设计增加了:
1. 相异成分规范评审;2. 相异成分确认;3.背对背测试
三、恢复块设计和N版本设计比较
恢复快设计 | N版本设计 | |
硬件运行环境 | 单机 | 联机 |
错误检测方式 | 验证程序测试 | 表决 |
恢复策略 | 向后恢复 | 向前恢复 |
实时性 | 差 | 好 |
向前恢复:使当前的计算继续,把程序恢复成连贯的正确状态,弥补当前状态的不连
贯情况。
向后恢复:系统恢复到掐一个正确状态,继续执行。
四、冗余设计
如果一个原价出现故障或系统故障,则立即更换冗余的元件或切换到冗余的系统,则该
硬件系统仍可以维持运行。
双机容错机制(集群的前生):
1. 双机热备:主机出现故障,备用机启动(心跳连接、效率低)
2. 双机互备:同时提供不同的服务,发生异常时接管(互为备份)
3. 双机双工模式:同时提供相同的服务。
五、防卫式程序设计
对于程序中存在的错误和不一致性,通过在程序中包含错误检查代码和错误恢复代码,
使得错误发生时,程序能撤销错误状态,恢复到一个已知的正确状态中去。是一种代码层面
的预防机制,如tray- catch语法。
实现策略:错误检测、破坏估计、错误恢复。
五、软件可靠性评价过程
1. 选择可靠性模型
模型假设的适用性:模型假设是可靠性模型的基础
预测能力与质量:指模型根据现在和历史的可靠性数据,预测将来的可靠性和失效概率
的能力,以及预测结果的准确程度。
模型输出值能够满足可靠性评价需求:1. 当前的可靠度;2. 平均无失效时间;3. 故障密
度;4. 期望达到规定可靠性目标的日期;5. 达到规
定的可靠性目标的成本要求
使用模型的简便性:
1. 模型需要的数据在软件系统中应该易于收集,投入成本不能超过可靠性计划的预
算
2. 模型应该简单易懂
3. 模型应该便于使用,最好能用工具实现数据的输入
2. 收集可靠性数据
可靠性数据主要是指软件失效数据,是软件可靠性评价的基础,主要是在软件测试,实
施阶段收集的。可靠性数据收集中存在的问题:
1. 可靠性数据的规范不统一
2. 数据收集同坐的连续性不能保证
3. 缺乏有效的数据收集手段
4. 数据的完整性不能保证
5. 数据质量和准确性不能保证
解决方法有:
1. 及早确定所采用的可靠性模型,以确定需要收集的可靠性数据,并明确定义可靠性数
据规范中的一些数据和记录方法
2. 制订可实施性较强的可靠性数据收集计划,指定专人负责,按照统一的规范收集记录
可靠性数据
3. 重视软件测试特别是可靠性测试测试的测试数据的整理和分析
4. 充分利用数据库来完成可靠性数据的存储和统计分析
3. 软件可靠性评估和预测
主要目的:为了评估软件系统的可靠性状况和预测将来一段时间内的可靠性水平