基于概率统计的软件测试方法研究.doc
基于概率统计的软件测试方法研究周珺周珺(1963-),男,甘肃靖远人,兰州交通大学数理学院副教授,研究方向为数理统计,软件测试。(兰州交通大学数理学院,兰州,甘肃,730070)摘要: 为了缩短软件测试周期,本文把马尔可夫链模型运用于软件可靠性测试中,提出了这一技术进行软件可靠性测试的方法。在测试过程中使用了新的评判准则分析测试结果,通过实例证明了该评判准则的实用性和有效性。关键词:软件可靠性,软件测试方法,测试用例,马尔可夫链,马尔可夫链模型中图分类号:TP311 文献标示码:ASoftware Testing Method Research Based on Probability Statistics Zhou Jun(School of Mathematics and Physics, Lanzhou Jiaotong University, Lanzhou 730070, China)Abstract: In this paper,in order to shorten the period of software testing ,Markov Chain Model is used in software reliability testing .It is introduced the basic method of this technology in testing software reliability. In the testing process ,it is used that new judge standard to analyze the testing result. The judge standard are the practicability, efficiency through examples。Keyword: Software Reliability,Software Testing Technology,Test Case,Markov Chain ,Markov Chain Model1 引言软件测试是软件工程领域必不可少的过程,在软件生存周期中占有非常重要的位置。据统计,软件开发总成本中,用在测试上的开销要占30%到50%,特殊情况下,对可靠性要求很高的软件,其测试费用甚至高达所有其他软件工程阶段费用总和的3-5倍1。在对传统测试用例的生成方法学习的基础上,探索出了一种实用性强的方法,该方法在马尔可夫链模型的基础上,提出了一种软件可靠性测试模型,并通过实例证明了这种模型的实用性和正确性。2 马尔可夫链的基本概念2-4 2.1 .状态和状态转换基于马尔可夫链的软件使用模型是由软件的状态和边组成。状态表示软件在使用过程中的内部环境。状态转换是指当软件在某一状态经输入激励,从该状态转换到另一个状态。.马尔可夫链是满足下面两个假设的一种随机过程:t+1时刻系统状态的概率分布只与t时刻的状态有关,与t时刻以前的状态无关;从t时刻到t+1时刻的状态转移与t的值无关。一个马尔可夫链模型可表示为M=(S,P,Q),其中各元的含义如下:(1)S是系统所有可能的状态所组成的非空的状态集,有时也称之为系统的状态空间,它可以是有限的、可列的集合或任意非空集。本文中假定S是可数集(即有限或可列)。用小写字母i,j (或S,S )等来表示状态。(2)是系统的状态转移概率矩阵,其中表示系统在时刻t处于状态i,在下一时刻t+1处于状态j的概率,N是系统所有可能的状态的个数。对于任意iS,有。 (3)Q=q1,q2,qn是系统的初始概率分布,qi是系统在初始时刻处于状态i的概率,满足。2.2 输入激励与状态转换概率 软件处于某一稳定的内部状态,外界环境有相应的输入激励,激励可以是不同的输入变量或者相同的输入变量取不同的值。不同的输入激励将导致软件不同的状态转换。当软件在稳定的使用环境下,不同的输入激励的出现是遵循一定的统计分布的,因而导致软件状态转换间也存在相应的概率分布,这个概率就称为状态转换概率。如果遵循软件的状态转换概率分布抽样产生测试输入序列,则体现了统计意义上的软件使用方式。2.3 .软件的使用链软件的使用链是用马尔可夫链描述的软件载誉期使用环境中的状态转换模型,用U表示。定义为:U=S,ARC,其中S代表软件的状态集,有S=s1,s2,,sn。;而ARC表示软件状态之间转换关系,有 ARC=arc11,arc12,arc1n,arc21,arc22,arc2n, arcn1,arcn2,arcnn (2.1)而其中的每个状态转换关系又是一个二维向量。用D表示引起软件状态转换的输入激励域,p表示软件状态转换率,则有 arcij=(dij,pij)( dijD;i=l,2,n;j=l,2,n) (2.2)U=S,ARC中,Si表示时刻t,ARC表示测试用例集D发生的概率P,应用2中的结果分析准则,要使使用链的状态转换概率为1,必须满足2中的、,即使用链在时刻t的测试用例集D应满足完全覆盖。3 基于马尔可夫链的软件测试方法3.1结果分析准则马尔可夫链使用模型(Markov Chain Usage Model)也是一种很好的软件使用方式的方法4-5。在软件测试过程中,对于被测软件,基于逻辑覆盖和基本路径测试方法生成的测试用例,覆盖了程序的所有测试,保证了在测试中程序的每个可执行语句至少执行一次6,由此可知:这些测试用例构成了一个完整的测试实验样本空间;生成的每个测试用例一定发生并且发生的概率相同。因此,可以把测试用例的生成及其发生概率和2中的马尔可夫链模型联系起来。把一个完全正确的逻辑结构或模块对应的状态集看成在时刻t处于的状态集,则状态集中的每一个状态对应一个测试用例,从而构成一个完整的满足马尔可夫链模型的测试用例集;同样,把接下来要测试的逻辑结构或模块所处的状态看作下一时刻t+1处于的状态。通过以上对模型的分析,可以初步构造一个基于该模型的软件可靠性测试的结果分析准则,描述如下: (1)s是被测逻辑结构或模块所对应的测试用例集,它应该是有限的、可列的集合或任意非空集。(2) Q=q1,q2,qn是时刻t测试用例的发生概率分布,qi是在t时刻测试用例i的发生概率,满足。其中,q1= q2=qn,即在t时刻,测试用例集中的每个测试用例发生概率相同。结果分析准则的概率表示形式为Pz=(D,H)。(1)D是被测逻辑结构或模块所对应的测试用例集,它应该是有限的、可列的集合或任意非空集。(2)H是时刻t测试用例的发生概率分布。其中H=h1、h2hk,P(hi)表示t时刻第i个测试用例发生的概率,满足: P(h1)= P(h2)= P(hk)=1/k P(h1)+ P(h2)+ + P(hk)=1 即在t时刻,测试用例集中的每个测试用例全都发生,并且发生概率相同。3.2测试方法 在基于马尔可夫使用模型的软件统计测试过程中,首先要根据软件需求规范建立软件的使用链;然后根据使用链进行序列抽样,产生测试用例;利用测试用例集驱动程序运行,获得输出数据后,利用评判准则进行评判:如果所有测试用例都发生,并且测试数据与预期数据相符,则说明测试成功,可进行下一时刻的测试。在进行每一时刻的测试中,都应满足评判准则。在进行测试过程中,如果测试结果显示,说明被测软件逻辑结构不满足完全覆盖性,测试无需再进行。否则,再进行第二步判定,如果测试结果数据与预期数据不相符,说明被测软件的逻辑结构或结构中的语句本身不正确,则对其重新进行检查。产生测试用例时,从初态开始,在每一个状态都生成一个0l之间的随机数,根据这个随机数选择这个状态的一条出边,转移到下一个状态,周而复始,直到终态,于是,测试用例便生成了。由于这样产生的测试用例是严格遵循软件的使用链并按照状态转移概率随机生成的,所以能够很好地体现软件的真实使用方式。当然,在软件可靠性增长测试过程中,利用基于马尔可夫使用模型的统计测试所产生的失效数据作为软件可靠性增长模型的输入,可以获得相应的可靠性估计或预计。在软件可靠性验证测试过程中,直接利用马尔可夫使用模型产生一定量的测试用例,通过对失效数据的观察,便可以获得对软件的可靠性验证。所以这里只关注如何建立相应的马尔可夫软件使用模型,以及相应的测试用例的抽取方法。4 一个简单的实例分析运用以上提出的测试方法,对某一软件在进行了测试后得出的有关各类错误数据资料整理分析得出了错误分类统计表7,如表1 所示。表1 错误分类统计表错误分类错误数 百分比需求错误13178.1功能和性能错误262416.2结构错误408225.2数据错误363822.4实现与编码错误16019.9软件集成错误14559.0系统结构错误2821.7测试定义与测试集成错误4472.8其他类型错误7634.7总计错误16209100.0根据表1的资料可设1表示需求错误,2表功能和性能错误,3表结构错误,4表示数据错误,5表实现与编码错误,6表软件集成错误,7表系统结构错误,8表测试执行错误,9表其它类型错误。由此得出“性质错误”类1=1,2,3,4,5,6,7,8,9,其总体分布为P(1)=p1 ,P(2)=p2 ,P(3)=p3 ,P(4)= p4 , P(5)= p5 , P(6)= p6 ,P(7) = p7 , P(8)=p8,P(9)=p9。由表1得出“性质错误”样本,其样本1总体容量为16209。由大数定理可以得p10.081,p20.162,p30.252,p40.224,p50.099,p60.09, p70.017, p80.028 , p90.047 。“性质错误”类1包括9类错误,总计错误的百分比100%,得出:这9类错误构成了完整的测试实验样本空间1。由于每类错误中的测试用例数目不同,所以其错误数的百分比不同,根据测试用例的概念5可知:所有类的各个测试用例是相互独立的,并且每个测试用例都得发生,即每个测试用例发生的概率是相同的。所以这个例子满足了提出的Pz=(S,Q)这个式子。在根据测试模型产生测试用例时,要给出预期的测试结果。如果测试数据与预期数据相符,则测试通过。否则再根据3.2中测试策略进行查错分析。5 结束语本文基于马尔可夫链模型,提出一种软件可靠性测试模型:根据软件需求规范建立软件的使用链;然后根据使用链进行序列抽样,产生测试用例进行测试,利用提出的评判准则对测试结果进行分析。通过实例证明,这种方法可以降低测试的复杂度,解决了简化测试难度的问题。参考文献1 杨季文等.80x86汇编语言程序设计教程M.北京:清华大学出版社,2004. 180-181.2 赵艳丽.孙志挥. 基于静态马尔可夫链模型的实时异常检测J. 计算机应用.2004,24(11):30-32.3 YE NA Markov chain model of temporal behavior for anomal detectionA】2005 IEEE Sytem,Man,and Cybernetics Information Assurance and Security WorkshopC】West Point,NY,20064 JHA S,TAN K,MAXION RMarkov chains,classifiers,and intrusion detectionA】Computer Security Foundation Workshop,the 14th IEEEC】Cape Breton,Novia Scotia,Canada,20015 ju WH,VARDI YA HybridHighorder Markov Chain Model for Computer Intrusion DetectionR】Technical Report 92,National Institute for Statistical Sciences,Research Triangle Park,North Carolina 277094006,20076 朱少民.软件测试方法和技术M. 北京: 清华大学出版社 2005.283-289.7 李兴南,葛玮,董云卫,等.一种基于大数定律的软件测试方法J,微机发展,2005,15(2):15-17作者简介:周珺(1963-),男,甘肃靖远人,兰州交通大学数理学院副教授,研究方向为数理统计,软件测试E-mail:zhoujun196312 联系电话:13609357467通信地址:甘肃省兰州交通大学数理学院;邮编:730070国家自然基金(41075009)资助 校教改项目资助