摘要: 本文介绍了软件可靠性技术的发展情况,对各种软件可靠性分析模型进行了分类评述,分析了软件可靠性工程的发展趋势。
关键词: 软件工程 可靠性模型 趋势分析
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的基于输入域的随机过程模型
执行路径
这类模型的分析方法与上面的模型相似,先计算程序各逻辑路径的执行概率和程序中错误路径的执行概率,再综合出该软件的使用可靠性。
Shooman分解模型属于此类
NHPP
NHPP,即非齐次Poisson过程模型是以软件测试过程中单位时间的失效次数为独立Poisson随机变量,来预测在今后软件的某使用时间点的累计失效数。有:
1)Musa的指数模型
2)Goel和Okumoto的NHPP模型
3)S-型可靠性增长模型
4)超指数增长模型
5)Pham改进的NHPP模型
Markov模型
这类模型有:
1)完全改错的线性死亡模型
2)不完全改错的线性死亡模型
3)完全改错的非静态线性死亡模型
Bayesian类
这是利用失效率的验前分布和当前的测试失效信息来评估软件的可靠性。这是一类当软件可靠性工程师对软件的开发过程有充分的了解,软件的继承性比较好时具有良好效果的可靠性分析模型。
- 连续时间的离散型Markov链
- Shock模型
此外,Musa和Okumoto依据模型的如下特征对模型进行分类:
(1)时间域:有两种:a.时钟时间;b.CPU时间。
(2)失效数类:在有限时间间隔内设定软件的失效数为有限还是无限。
(3)相对于时间系统失效数的统计分布形式。主要的两类是:Poisson分布型和二项分布型。
(4)对有限失效数而言,用时间表示的失效强度的函数形式。
(5)对有限失效数而言,用经验期望失效数表示的失效强度的函数形式。
4.软件可靠性模型研究的
五个方向
以上归类介绍了的几十个软件可靠性模型,其中有的已被西方某些可靠性公司制成标准的工具软件出售[4],如Musa-Okumoto模型、Jelinski-Moranda模型、NHPP模型、S-shaped模型、Duane模型、Little-Verral模型等。而且还有新的模型发表。这些模型的应用都有局限性,要根据具体软件的规模、开发和使用环境、开发人员的素质、开发方法进行妥善选择,读者可参考[5]中的有关模型选用的章节。
由于软件缺陷的特殊性,至今尚没有一种软件可靠性的通用统计分析模型。其主要原因是这些模型对系统所做的假设固定不变,而软件在其开发过程中受各种因素影响,使得软件的故障行为千差万别;在进行模型的参数估计时又难以实时获得充分的统计数据,无法在各种模型之间作识别,导致估计结果与实际情况的不一致,即产生模型的不适配问题。
为了使对软件可靠性的分析、预计更加精确,除了应用标准的软件可靠性模型的传统方法外,目前软件可靠性研究的内容有:
1)对传统模型的分析结果用U-结构图进行校正,以减少评价模型的偏差。
2)将两个或多个传统模型用加权的方法进行线性组合,或者在软件寿命周期的不同阶段使用不同的评价模型。
3)在传统模型中引入软件复杂性和测试类型、开发方法类型影响因子,以增强可靠性评价的准确性。
4)软件可靠性仿真技术(以后将专门介绍)。
5)神经网络分析技术
人工神经网络是基于现代科学对生物神经系统的认识,得出的一种抽象的新型数学模型,借助于计算机技术,使它具有人工智能、自适应能力和学习功能。它不事先确定模型,而是按实例研究的原则运行,是一种非参数软件可靠性估计,克服了模型的实配问题,通用性好(缺点是模型复杂)。从八十年代末和九十年代初期以来和工具,研究保证软件可靠性的开发方法和可靠性管理措施是软件可靠性工程师的责任。软件规模、复杂程度的大幅度提高,大型系统对软件的严重依赖,国际上开展了神经网络技术在软件可靠性工程中的应用研究,取得了一些成果,其工程应用亦在试验之中。我们中心正在开展这一技术的理论研究,并着手开发相应的通用软件工具,相信会有良好的工程应用前景。
5.软件工程化与软件可靠性
在近可能短的开发周期内向用户提供高可靠软件是软件工程师的艰巨任务。提供有效的软件可靠性评测方法,要求软件的开发从“自编、自导、自演”的初级模式向工程化方向转化。
软件工程是一项新兴的系统工程,软件的工程化提出了一些软件开发的基本原则和要求。其中,为保证大型软件的可靠性,必须遵循的原则包括:
1)软件的设计(design)、编码(coding)、测试(testing)由不同的人员完成,独立的验证/确认(IV&V)、象硬件那样设计、生产、检验分开;
2)软件开发和使用过程具有可追溯性,象硬件有设计图纸、生产记录、检验结果那样有各种文档;
3)像硬件那样尽可能使用标准件(标准子程序/模块)和成熟技术(经过验证的开发过程和算法)。
软件工程、软件可靠性工程研究与应用的共性技术包括:
1)软件故障树分析(S-FTA)
2)软件故障模式和影响分析(S-FMEA)
3)危险性分析
4)软件潜在通路分析
5)安全性分析(Petri Net等)。
6)软件的避错(fault avoidance)、排错(fault removal)、容错(fault
tolerance)、预错(fault forcasting)等。
软件可靠性的提高依赖于软件工程化的步伐。
参考文献
1.Pham,H,Software Reliability and Testing,IEEE Computer Society
Press,1996.
2.Jelinski,Z.,and P.B.Moranda,W.Freiberger ed.,Statistical ComputerPerformance
Evaluation,Academic Press,New York,1972.
3.Schick,G.J.,and R.W.Wolerton,“An Analysis of Competing Software
Reliability Models”,IEEE Trans.Software Engineering,Vol.SE-4,No.2,Mar.,1978.
4.Michael R.Lyu,Handbook of Software Reliability Engineering,Computing
Mc GrawHill,New York,1996.
5.何国伟主编 软件可靠性,国防工业出版社,1998。
6.IEEE Std 6 10.12-1990,Glossary of Software Engineering Terminology.
7.Shooman,M.L,"Structure Models for Software Reliability
Prediction”Proc,International Conference of Software Engineering.,IEEE
Cs Press,Los Alamitos,Califolia.,1984.
8.Yamada,S "S-shaped Software Reliability Growth Models and
Their Applications”,IEEETrans.Reliability,Vol.R-33,No.4,Oct.1984.
9.Musa.J.D.A Logarithmic Poisson Execution Time Model For Software
Reliability Measurement,Proc.7th International Conf.Software Ing.,1984.
10.Littlewood,B.,“Software Reliability Model for Modular Program
Structure”,IEEE Trsans.Reliability,Vol.R-28,No.3,Aug.1979. |