基于扩展的马尔克夫贝叶斯网的软件可靠性评估方法 所属技术领域
本发明涉及一种软件可靠性评估方法,特别是一种基于扩展的马尔克夫贝叶斯网的软件可靠性评估方法。
背景技术
软件可靠性评估一直是软件可靠性领域主要的问题。传统的软件可靠性评估技术主要是概率方法,概率方法主要采用随机过程来刻画软件失效过程,具代表性的是Goel A.L.and Okumoto K.于1979年提出了关于连续时间的非齐次Poisson过程(NHPP)模型,简称NHPP类G-O模型。传统的概率方法类的缺点主要是在处理多因素不确定问题是能力有限。因此某些研究者转向采用一些可以处理复杂系统的方法来处理软件可靠性评估问题。
神经网络方法是较早挑战概率类方法的。Karuanithi等将人工神经网络(artificial neural network)技术应用于软件可靠性估测过程,并且取得了一些很有意义的结果。它地优点主要是:可以考虑多因素问题、可以考虑定量和定性的结合以及无统计线性和独立的假设。它的局限性主要是:神经网络结构不灵活以及不易处理不完全数据(即在某些节点的数据可能缺失的情况)。
贝叶斯网技术在软件可靠性工程方面取得了一些很好的结果,如Amasaki S.,Takagi Y.,et al.,“A Bayesian Belief Network for Assessing theLikelihood of Fault Content”,14th International Symposium on SoftwareReliability Engineering,17-20 Nov.2003,pp215-226.中介绍的。贝叶斯网Bayesian network是一种有向概率图probability graph,它将感兴趣的变量采用有向弧连接起来,这种连接表达了变量之间的条件关联。贝叶斯网建立在强大的贝叶斯统计理论基础上,和其它传统的数据分析方法相比它有以下的几个特点:(1)贝叶斯网可以联结所有感兴趣的变量,所以它可以尽可能地增加分析的精度。并且能够处理不完全数据问题;(2)贝叶斯网可以学习变量之间的因果关系。这能使我们了解感兴趣变量的相互关系,以便进行有效的预测;(3)贝叶斯网采用贝叶斯统计方法能够充分地把问题领域的有关知识和获取的当前数据相结合。但是已有的基于贝叶斯网的软件可靠性模型没有考虑软件运行剖面对软件可靠性的影响。
马尔克夫贝叶斯网Markov Bayesian Network是一种具有特殊结构的贝叶斯网(见M.I.Jordan An introdutiion to variational methods forgraphical models.To appear:Jordan,M.I.(ed.),Learning in Graphicalmodels,Kluwer Academic Publishers)。马尔克夫贝叶斯网结构的特点是可以根据实际过程在线演化和推进。比如H1表示软件的缺陷率,Z1表示软件测试的结果,Z1=1表示软件失效,Z1=0如表示软件未发生失效。图2就是一个初始的马尔克夫贝叶斯网或称1阶马尔克夫贝叶斯网。测试后有可能剔除缺陷(如发生失效)也可能不剔除缺陷(如未发生失效)。如果再进行第二测试,新的马尔克夫贝叶斯网是在初始马尔克夫贝叶斯网上再增加两个节点:H2点Z2。H2代表第二次测试前的软件的缺陷率,Z2表示第二次软件测试的结果,其结构如图3所示,称为2阶马尔克夫贝叶斯网。如此,随着测试的进行马尔克夫贝叶斯网不断动态演化,如图4所示表示一个n阶的马尔克夫贝叶斯网。马尔克夫贝叶斯网还可以是多重的。比如软件输入域可以分为m个子域。初始的m个子域的子域的缺陷率分别为H1(1),,...,Hm(1)。第二次测试前的软件的缺陷率分别为H1(2),,...,Hm(2)。依次类推,如图5所示。马尔克夫贝叶斯网特别适合于动态预测问题。但是因为M.I.Jordan提出的马尔克夫贝叶斯网,如图5所示,只能处理两类节点,即缺陷率和软件失效数据,无法处理测试剖面和可靠性节点。
【发明内容】
本发明的技术解决问题是:克服现有技术的不足,提供一种基于扩展的马尔克夫贝叶斯网的软件可靠性评估方法,该方法不仅可以提高可靠性评估的精度,而且还可以提高可靠性评估的稳定性。
本发明的技术解决方案是:基于扩展的马尔克夫贝叶斯网的软件可靠性评估方法,于将扩展的马尔克夫贝叶斯网应用到软件可靠性评估中,并且在可靠性评估中考虑了运行剖面对可靠性的影响,该方法将输入域各分区的软件缺陷率、运行剖面、软件失效数据和软件的可靠度作为扩展的马尔克夫贝叶斯网的节点簇,具体由下列步骤实现:
(1)根据软件功能结构将软件输入域划分为若干子域;
(2)初始化;
(3)进行软件测试,获取软件失效数据;
(4)利用叶斯网理论估计软件可靠性;
(5)如果满足某停止准则就转至步骤(7),否则转至步骤(6);
(6)动态演化推进贝叶斯网,转至步骤(3);
(7)输出结果。
上述步骤(1)中软件输入域划分若干子域的划分为一般采用等价类划分。所谓等价类,就是指某个输入域的集合,集合中的每个输入对揭露程序错误来说是等效的,把程序的输入域划分成若干部分,然后从每个部分中选取少数代表性数据作为测试用例。
上述的步骤的(2)初始化:建立包括缺陷密度、运行剖面、软件测试数据以及软件可靠度等节点的扩展的马尔克夫贝叶斯网,确定各节点先验分布;先验分布的获取主要有三种方法:一是根据专家经验来确定各节点先验分布,二是根据历史数据估计各节点先验分布,三是当既无专家经验也无历史数据时,可以采用无信息的先验分布,一般采用均匀分布做先验分布。
上述的步骤(3)的软件测试方法采用分区测试方法。
上述的步骤(5)的停止准则一般有两种:一种是预测的可靠性应达到要求,另一种达到预先规定的测试步数。
上述的步骤(4)中按下面的EMBN算法估计软件可靠性。
假设将软件划分为m个子域,测试n次。测试时如测试用例从第j个子域中选取,则称执行第j个操作。
令Oj=j表示这m个操作的第j个。
Ai=j(i=1,Λ,n)表示第i次测试执行第j个操作。
Qi={qj(i)|qj(i)=Pr[Ai=j],(1≤j≤m)}(i=1,Λ,n)]]>表示第i次测试的运行剖面。
Zi=1if a failure occurs at the ith run0if no failure occurs at the ith run(i=1,Λ,n)]]>
Hj(1)(j=1,Λ,m)表示软件对应第j个子域的初始缺陷率。
Hj(i)(i=2,Λ,n+1,j=1,Λ,m)表示软件对应第(i-1)测试后第j个子域的缺陷率。
算法如下(记为EMBN算法):
(1)给定Ai=ai(i=1,Λ,n),Zi=zi(i=1,Λ,n)
(2)确定Hj(1)的先验分布p(Hj(1),(j=1,Λ,m)
(3)确定Q的先验分布p(Q)
(4)1i
(5)---p(Hj(i))⇒π(Hj(i)),π(Hj(i))(j=1,Λ,m)]]>表示Hj(i)的先验分布通过贝叶斯法则计算Hj(i)(j=1,Λ,m)的后验分布:
h(Hj(i)Zi=zi,Ai=aj)∝p{Zi=zi|Hj(i)}π{Hj(i)},j=ai]]>
h(Hj(i)|Zi=zi,Ai=ai)=π{Hj(i)},j≠ai]]>
(6)h(Hj(i)|Zi=zi,Ai=ai)⇒p(Hj(i))]]>
(7)通过下面两式计算Hj(i+1)(j=1,Λ,m)的分布:
Hj(i+1)=Hj(i)-zid,j=ai;]]>
Hj(i+1)=Hj(i),j≠ai]]>
令p(Hj(i+1))(j=1,Λ,m)表示Hj(i+1)的分布
(8)通过贝叶斯法则计算Q的后验分布。
h(Q|Ai=ai)∝p(Ai=ai|Q)p(Q)
(9)h(Q|Ai=ai)p(Q)
(10)若i=n,则转(12);否则i+1i并且转(5)
(11)输出p(Hj(n+1))(j=1,Λ,m)
(12)输出p(Q)
(13)利用p(Q)求运行剖面的贝叶斯估计
(14)估计软件可靠性
R=1-Σj=1mqjp(Hj(n+1))]]>
(15)结束
上述的(5)动态演化推进贝叶斯网:如未满足到停止准则扩展的马尔克夫贝叶斯网(图6)增加一阶。
本发明的原理:按照贝叶斯网理论,一旦知道起的节点的联合分布,等于知道了该贝叶斯网的全部信息,就可在此基础上进行统计推断。
R,Hj(i)(i=1,Λ,n+1,j=1,Λ,m),Ai(i=1,Λ,n),Zi(i=1,Λ,n),Qi(i=1,Λ,n+1)的联合分布是:
pR,Hj(i)(i=1,Λ,n+1,j=1,Λ,m),Ai(i=1,Λ,n),Zi(i=1,Λ,n),Qi(i=1,Λ,n+1)]]>
=p{R|Qn+1,Hjn+1(j=1,Λ,m)}·Πi=1n+1p{Qi}·Πi=1np{Ai|Qi}]]>
·Πj=1mp{Hj(1)}·Πi-2n+1Πj=1mp{Hj(i)|Hj(i),Ai-1,Zi-1}]]>
·Πi=1np{Zi|Hj(i)(j=1,Λ,m),Ai}]]>
因此建立贝叶斯网关键是得到各节点的初始分布或条件分布。下面将说明如何得到各节点的初始分布或条件分布。
(1)Hj(1)的初始分布
Hj(1)的初始分布p(Hj(1))(j=1,Λ,m)可以由专家经验或对软件度量的估计得到。
(2)Qi(i=1,Λ,n+1)的初始分布
Qi的初始分布可以由历史数据得到。
(3)Zi(i=1,Λ,n)的条件分布
Pr[Zi=1|Ai,H1(i),Λ,Hm(i)]]]>
=Hj(i)·qi(j)]]>
Pr[Zi=0|Ai,H1(i),Λ,Hm(i)]]]>
=1-Hj(i)·qi(j)]]>
(4)Ai(i=1,Λ,n)的条件分布
p{Ai=j|Qi={qj(i),j=1,Λ,m}}=qj(i)]]>
(5)Hj(i)(i=2,Λ,n+1)的条件分布。
当Ai=j′,假定Hj′(i+1)=Hj′(i)-dZi;Hj(i+1)=Hj(i),j≠j′.]]>
(6)R的条件分布
R=1-Σj=1mHj(n+1)qj(n+1)]]>
本发明与现有技术相比的优点在于:本发明采用扩展的马尔克夫贝叶斯网建模软件可靠性评估模型。扩展的马尔克夫贝叶斯网是由一个节点簇动态演化而不断推进扩充的贝叶斯网。该技术将输入域各分区的软件缺陷率、运行剖面、软件失效数据和软件的可靠度作为扩展的马尔克夫贝叶斯网的节点簇。该技术可以随着软件测试进程利用马尔克夫贝叶斯理论在线估计软件可靠性。
具有以下优点:
(1)因为考虑的因素增加了比如考虑了软件运行剖面,并且考虑了有关因素的先验信息,所以提高发软件可靠性评估的精度。
(2)因为利用了贝叶斯技术,所以提高了可靠性估计的稳定性。估计的稳定性是贝叶斯技术的一个特点。
(3)因为本方法是逐步递推的,所以算法简单,易行。
【附图说明】
图1为本发明基于扩展的马尔克夫贝叶斯网的软件可靠性评估方法步骤示意图;
图2为现有技术的一阶马尔克夫贝叶斯网示意图;
图3为现有技术的二阶马尔克夫贝叶斯网示意图;
图4为现有技术的n阶马尔克夫贝叶斯网示意图;
图5为现有技术的n阶m重马尔克夫贝叶斯网示意图;
图6为本发明基于扩展的马尔克夫贝叶斯网的软件可靠性评估技术示意图。
实施例1
以Space软件为例。Space软件是一个公认的软件测试对象,它是为欧洲航天局开发的一个矩阵描述语言(ADL)解释器,从文件中读取ADL描述语句并检查文件内容是否合乎语法规则。如果ADL文件解释正确,Space将输出一个矩阵数据文件,包含矩阵元素信息、位置、激励,否则将输出错误提示。Space软件包含9564行C语言代码。在该实例中测试用例库包括13,466个测试用例,测试了3000步,即n=3000。具体步骤如下:
(1)根据对软件功能结构的分析,把软件输入域分为三个子域,即m=3.分别包括测试用例个数为5136、7503和827个;
令i=1
(2)先验分布的选取:j=1,..,m
Hj(i)~Beta(αj(i),βj(i)),
Q~Dir((q1,Λ,qm)|ρ1,Λ,ρm)。
Beta(.)为贝塔分布,Dir(.)为Dirichlet分布。
先验分布的参数为:αj(i)=βj(i))=1,ρj=2]]>
(3)进行一步软件测试,获取软件失效数据:即Ai,Zi的值;
(4)利用叶斯网理论估计软件可靠性;即通过具体实施方式中给出的算法(EMBN算法)估计软件可靠性。其中取d=0.0002。
(5)i->n,如果n=3000就转第(7)步,否则i++,转第(6)步;
(6)动态演化推进贝叶斯网,如图6所示,扩展的马尔克夫贝叶斯网增加一阶。增加的节点仍按(2)的原则选取先验分布。转入步骤(3);
(7)输出结果。
测试了3000步,发现了26个缺陷。可靠性估计如下表,表中运行剖面和可靠度值是指当发生失效时对此的估计值。
表1 Space软件可靠性评估 失效序数 运行剖面(估计值) 可靠度(评估值) 1 0.1994,0.3112,0.4894 0.5001 2 0.1991,0.3115,0.4894 0.8571 3 0.1991,0.3112,0.4897 0.9231 4 0.1994,0.3112,0.4894 0.9444 5 0.1991,0.3112,0.4897 0.9600 6 0.1991,0.3115,0.4894 0.9643 7 0.1991,0.3112,0.4897 0.9697 8 0.1991,0.3112,0.4897 0.9744 9 0.1991,0.3112,0.4897 0.9773 10 0.1994,0.3112,0.4894 0.9792 11 0.1994,0.3112,0.4894 0.9815 12 0.1991,0.3115,0.4894 0.9833 13 0.1991,0.3112,0.4897 0.9848 14 0.1991,0.3112,0.4897 0.9861 15 0.1991,0.3112,0.4897 0.9882 16 0.1991,0.3112,0.4897 0.9891 17 0.1991,0.3115,0.4894 0.9901 18 0.1991,0.3115,0.4894 0.9907 19 0.1991,0.3115,0.4894 0.9915 20 0.1994,0.3112,0.4894 0.9922 21 0.1991,0.3112,0.4897 0.9927 22 0.1991,0.3112,0.4897 0.9932 23 0.1991,0.3112,0.4894 0.9937 24 0.1991,0.3112,0.4897 0.9941 25 0.1991,0.3112,0.4897 0.9945 26 0.1991,0.3112,0.4897 0.9949
实施例2
以一个北京航空航天大学软件与控制实验室开发的一个度量软件SESS(Software Environment for Software Science Data Collection)为例。该软件使用VC6编写,能够读取C语言源程序,统计源代码行数、操作符、操作数的种类和个数并显示,是进行部分重复性理论研究的工具。共有源代码17807行,源文件106个。
在该实例中测试用例库包括5473个测试用例组成,每个测试用例都是一个c源程序文件。测试了2000步,即n=2000。具体步骤如下:
(1)根据对软件功能结构的分析,把软件输入域分为4个子域,即m=4.分别包括测试用例个数为1087、2031、1385和970个;
令i=1
(2)先验分布的选取:j=1,..,m
Hj(i)~Beta(αj(i),βj(i)),
Q~Dir((q1,Λ,qm)|ρ1,Λ,ρm)。
Beta(.)为贝塔分布,Dir(.)为Dirichlet分布。
先验分布的参数为:αj(i)=βj(i))=1,ρj=2]]>
(3)进行一步软件测试,获取软件失效数据:即Ai,Zi的值;
(4)利用叶斯网理论估计软件可靠性;即通过具体实施方式中给出的算法(EMBN算法)估计软件可靠性。其中取d=0.0002。
(5)i->n,如果n=2000就转第(7)步,否则i++,转第(6)步;
(6)动态演化推进贝叶斯网,如图6所示,扩展的马尔克夫贝叶斯网增加一阶。增加的节点仍按(2)的原则选取先验分布。转入步骤(3);
(7)输出结果。
测试了2000步,发现了18个缺陷。可靠性估计如下表,表中运行剖面和可靠度值是指当发生失效时对此的估计值。
表2 SESS软件可靠性评估 失效序数 运行剖面(估计值) 可靠度(评估值) 1 0.2980,0.1625,0.3382,0.2013 0.9517 2 0.2980,0.1625,0.3382,0.2013 0.9648 3 0.2977,0.1625,0.3382,0.2017 0.9732 4 0.2980,0.1625,0.3382,0.2013 0.9795 5 0.2977,0.1625,0.3385,0.2013 0.9833 6 0.2977,0.1625,0.3385,0.2013 0.9833 7 0.2980,0.1625,0.3382,0.2013 0.9842 8 0.2977,0.1625,0.3382,0.2017 0.9861 9 0.2980,0.1625,0.3382,0.2013 0.9857 10 0.2977,0.1625,0.3382,0.2017 0.9847 11 0.2980,0.1625,0.3382,0.2013 0.9860 12 0.2977,0.1625,0.3385,0.2013 0.9865 13 0.2977,0.1625,0.3385,0.2013 0.9875 14 0.2977,0.1625,0.3385,0.2013 0.9878 15 0.2980,0.1625,0.3382,0.2013 0.9879 16 0.2980,0.1625,0.3382,0.2013 0.9886 17 0.2977,0.1625,0.3385,0.2013 0.9888 18 0.2980,0.1625,0.3382,0.2013 0.9889