摘要: 本文介绍了软件可靠性技术的发展情况,对各种软件可靠性分析模型进行了分类评述,分析了软件可靠性工程的发展趋势。
关键词: 软件工程 可靠性模型 趋势分析
1 软件危机
随着计算机技术迅猛发展,软件的销售量和使用量呈几何级数增长,软件的规模也越来越大,复杂性急剧提高。例如,航天飞机的飞行软件达50万行源代码,F-22战斗机更达150多万行源代码,软件失效已成为系统瘫痪的主要原因。根据美国国防部和NASA的统计,当今武器系统和航天项目中的软件可靠性比硬件系统大约低一个数量级。因软件故障而造成的重大事故也不乏其例,如F-18战斗机在海湾战争中,飞行控制软件共发生了500多次故障,爱国者导弹因软件问题误伤了28名美国士兵;阿里安5型火箭的发动机控制系统软件的错误导致飞行试验失败等。软件危机使得软件可靠性研究在国际上十分活跃。
2.影响软件可靠性的主要因素
软件产品是由某一计算机语言写成的语句有序集合,也就是计算机程序。它的作用是将输入转换成相应的输出,可以用一映射函数f表示。软件可靠性是指在给定时间内,特定环境下软件无错运行的概率。影响软件可靠性的因素主要包括:
1)软件规模;
2)软件对实际需求的表述上的符合度;
3)软件的运行剖面;
4)软件的内部结构,即软件复杂度;
5)软件的开发方法;
6)软件开发人员的能力和经验;
7)软件开发的支持环境;
8)软件可靠性设计技术;
9)软件的测试与投放方式等。
如何准确评价/预计软件的使用可靠性是软件工程的重大问题之一。
3.软件可靠性模型及其分类
一个有效的软件可靠性模型应尽可能地将上面所述的因素在软件可靠性建模时加以考虑,尽可能简明地反映出来。自1972年第一个软件可靠性分析模型发表的二十多年来,见之于文献的软件可靠性统计分析模型将近百种。
这些可靠性模型大致可分为10类[1]:
1)种子法;
2)失效率类;
3)曲线拟合类;
4)可靠性增长模型;
5)程序结构分析模型;
6)输入域分类模型;
7)执行路径分析方法模型;
8)非齐次Poisson过程模型;
9)马尔可夫过程模型;
10)贝叶斯模型类。
种子法
这是利用捕获—再捕获抽样技术估计程序中错误数。在程序中预先有意“播种”一些设定的错误“种子”,然后根据测试出的原始错误数和发现的诱导错误的比例来估计程序中残留的错误数。其优点是简便易行,缺点是诱导错误的“种子”与实际的原始错误之间的类比性估量困难。
失效率分析
这类模型用来研究程序的失效率的。因为MTBF是失效率的倒数,所以以MTBF为分析直接变量的模型亦属于此类。这类模型有
1)Jelinski-Moranda的de-eutrophication模型
2)Jelinski-Moranda的几何de-eutrophication模型
3)Schick-Wolverton模型
4)改进的Schick-Wolverton模型
5)Moranda的几何Poisson模型
6)Goal和Okumoto不完全排错模型
曲线拟合
用回归分析的方法研究软件复杂性、程序中的缺陷数、失效率、失效间隔时间。包括参数方法和非参数方法。
可靠性增长
预测软件在检错过程中的可靠性改进,用一增长函数来描述软件的改进过程。这类模型有:
1)Duane模型
2)Weibull模型
3)Wagoner的Weibull改进模型
4)Yamada和Osaki的逻辑增长曲线
5)Gompertz的增长曲线
程序结构分析
程序结构模型是根据程序、子程序及其相互间的调用关系,形成一个可靠性分析网络。网络中的每一结点代表一个子程序或一个模块,网络中的每一有向弧代表模块间的程序执行顺序。假定各结点的可靠性是相互独立的,通过对每一个结点可靠性、结点间转换的可靠性和网络在结点间的转换概率,得出该持续程序的整体可靠性。在软件测试领域,有人形象地称这种方法为“白盒子”方法(white box)。这类模型有:
1)Littewoood马尔可夫结构模型
2)Cheung的面向用户的马尔可夫模型
输入域
选取软件输入域中的某些样本“点”运行程序,根据这些样本点在“实际”使用环境中的使用概率的测试运行时的成功率/失效率,推断软件的使用可靠性。这类模型的重点(亦是难点)是输入域的概率分布的确定及对软件运行剖面的正确描述。这种方法不考虑软件的结构和运行路径及开发过程,亦称“黑盒子”方法(black box)。这类模型有两个:
1)Nelson模型
2)Bastani的基于输入域的随机过程模型
执行路径
文章来源于领测软件测试网 https://www.ltesting.net/