基于统计分析的可执行基础路径进化生成方法与流程

文档序号:12123665阅读:192来源:国知局
基于统计分析的可执行基础路径进化生成方法与流程
本发明涉及计算机软件测试领域,设计了一种基于统计分析技术的自动生成可执行基础路径的新进化方法。该方法区别于原有方法的特色在于,生成的测试路径均为可执行的满足线性无关性的独立路径,即可执行的基础路径。
背景技术
:软件测试是软件生命周期中重要的组成部分,结构测试是软件测试的主要方法,路径测试又是结构测试中最有效的覆盖准则,其需要执行被测程序的测试路径。因此,自动生成测试路径是软件测试的关键任务,是简化软件测试过程的有效方法,能够降低软件测试成本,提高测试效率。基础路径测试是结构测试中最有效的测试标准之一,其能够检测被测程序中65%的错误,而且各种结构测试数据生成问题都是针对基础路径测试。另外,基础路径集中不包含的测试路径,都能由基础路径的线性关系表示。因此,自动生成基础路径对软件测试的研究具有重要意义。基于搜索的优化技术,如模拟退火算法、爬山算法、粒子群算法、禁忌搜索算法和遗传算法等已经成功应用于软件测试中。TraceN.等提出模拟退火算法生成路径覆盖测试数据方法。DeepakGarg等提出爬山算法生成基础路径测试数据方法。YaHuiJia等和ShujuanJiang等提出粒子群优化算法生成测试数据方法。DiazE.等提出基于禁忌搜索算法的软件结构测试方法。遗传算法在回归测试、变异测试、并行测试等问题中均有较好的应用。吴川等和杨波等研究遗传算法在回归测试中的应用,Chang-aiSun等、PedroRealesMateo等、党向盈等、张功杰等和巩敦卫等研究遗传算法在变异测试中的应用,G.H.Hwang等和田甜等研究遗传算法在并行程序测试中的应用,均取得了较好的成果。在测试数据的自动生成问题中,遗传算法的应用最为广泛,M.A.Ahmed等和D.Gonga等提出应用遗传算法生成多路径测试数据的方法,P.M.S.Bueno等、MohebR.Girgis等、AhmedS.Ghiduk等提出应用遗传算法有效的生成测试数据方法。由此可见,遗传算法已经成熟的应用于软件测试领域。到目前为止,对遗传算法的关注还主要集中在测试数据的进化生成问题,而软件测试的主要方法为结构测试。因此,自动生成测试路径对于软件测试至关重要。J.Poole研究了依赖控制流图的深度优先搜索方法生成基础路径,此方法没有考虑循环结构,而且忽略了如何在候选节点集中选择构建基础路径的最优节点,主要缺陷在于该方法采用的是不可靠的非结构化代码,基础路径集的数目不再等于控制流图的复杂性度量。Z.Guangmei提出了一种自动生成基础路径集的方法,该方法同样采用控制流图的深度优先搜索技术,为了避免算法的无限循环和减少搜索过程,该方法考虑被测程序多入度节点做为末端节点的子路经,在构造基础路径集过程中,记录包含循环的子路经,但此方法没有考虑不可执行路径。J.Yan等提出了生成可执行路径的有限集F方法,F满足基础路径覆盖准则,但是该方法在检测可执行路径时需要执行所有路径,非常耗时。Z.Zhonglin等和D.Qingfeng等利用圈复杂度生成线性独立路径集,由于决策节点包含的变量具有数据依赖性,以致生成的基础路径集多数为不可执行路径,为此结合依赖关系的基线方法避免选择不可执行路径,但是该方法没有处理程序中的循环结构。AhmedS.Ghiduk提出一种可变长度的遗传算法生成测试路径集,染色体的长度随着迭代次数的改变逐渐增加,以代表不同长度的路径,该方法生成的路径集包含所有的测试路径,其含有很多不可执行路径,为删除不可执行路径,该方法使用不可执行路径检测模型检测生成的全部测试路径,此过程非常耗时。为了解决上述方法的缺陷,本发明设计了一种基于统计分析的可执行基础路径进化生成方法,采用统计分析技术,判断DD-图中的互斥边,提出基于统计分析的可变长度遗传算法,判断染色体是否含有互斥边,生成可执行的测试路径,检验路径是否为独立路径,且满足与基础路径的线性无关性,进化生成可执行的基础路径集,可以应用于任何路径测试方法中,从而提高软件测试的有效性。技术实现要素:本发明提出一种基于统计分析的可执行基础路径进化生成方法。首先,采用统计分析方法,检测被测程序条件语句的相关性,根据条件语句的相关性,确定DD-图中的互斥边,作为后续进化过程中判断不可执行路径的依据。其次,研究自动进化生成可执行的基础路径集技术,提出基于统计分析的可变长度遗传算法,染色体的长度随着迭代次数的改变逐渐增加,代表进化生成的测试路径,在进化过程中,判断染色体是否含有互斥边,若染色体含有互斥边,则其代表的路径为不可执行路径,这样的染色体不再参与进化,由此生成的测试路径均为可执行测试路径。最后,检验生成的测试路径是否为独立路径,如果生成的测试路径是独立路径,并且与基础路径线性无关,即其不能由已生成的基础路径线性表示,将其加入可执行的基础路径集,可以应用于任何路径测试方法中。本发明所要解决的技术问题:克服现有测试路径生成方法的不足,基于遗传算法提出一种有效的进化优化方法,使生成的路径均为可执行的测试路径,而且满足基础路径集的约束条件。本发明的技术解决方案:一种基于统计分析的可执行基础路径进化生成方法,其特征在于包含以下步骤。步骤1.统计分析模型的设计。采用统计分析方法,随机产生一组测试数据运行被测程序,统计不同条件语句谓词对应随机变量的取值情况,获得样本数据,利用最大似然估计方法,得到条件语句相关性对应的估计值,判断条件语句的相关性类型,确定DD-图中的互斥边,作为后续进化过程中判断可执行路径的依据。本发明建立分析模块的主要任务如下:任务1:读取被测程序,分类程序语句并将其格式化,构造程序控制流图;任务2:使用AhmedS.Ghiduk等人所提简化算法,依据控制流图构造DD-图;任务3:根据统计分析结果,判定DD-图中的互斥边;任务4:通过控制流图、DD-图、互斥边以及边之间的依赖关系测试可执行路径生成模块。由此可知,本发明将数学统计分析方法应用到软件测试的分析模型中,使得分析结果具有更强的准确性和科学性,这是本发明与已有研究成果的明显区别。步骤2.可执行路径生成模型的设计。本发明采用基于统计分析的可变长度遗传算法进化优化求解问题,设计可执行路径生成模型,主要包括染色体的表示、适应值函数的设计和可执行测试路径的生成。基于统计分析的可变长度遗传算法,用整型变量表示染色体,代表被测程序DD-图中的边,染色体的长度依赖于基础路径的长度,随着迭代次数的改变逐渐增加,代表进化生成的测试路径,表示方法如下:基于统计分析的可变长度遗传算法,设计适应度函数评价每个个体进化生成测试路径的优劣程度,从而决定其遗传机会的大小,其取值依赖于DD-路径中相邻边的概率,计算公式如下:f(xi):表示染色体xi(i=1,…,PM)的适应度函数值;d(xi):表示染色体xi相邻边的数量;w(eij):表示染色体xi中边ej的权重;L(xi):表示染色体xi的长度(即表示染色体xi中含有边的数量)。基于统计分析的可变长度遗传算法,判断染色体是否含有互斥边,若染色体含有互斥边,则其代表的测试路径为不可执行路径,这样的染色体不再参与进化。因此,生成的测试路径均为可执行的测试路径。由此可知,本发明在可执行路径生成模型中,设计了基于统计分析的可变长度遗传算法,进化过程中考虑互斥边的作用。因此,生成的路径均为可执行的测试路径,这是本发明与已有研究成果的最大区别。步骤3.基础路径检测模型的设计。本发明采用基础路径检测模型检验生成的测试路径是否为基础路径。首先,检测生成的测试路径是否为独立路径,独立路径至少有一条边在其他路径中没有出现过。其次,检验测试路径是否可以由基础路径集中的基础路径线性表示,不能由基础路径线性表示的独立路径加入基础路径集;否则,生成的测试路径不能加入基础路径集。基础路径集是由一组基础路径构成的集合,其需满足如下三个约束条件:每一条基础路径必须是一条独立路径;基础路径集中的所有基础路径必须覆盖控制流图的所有边;不包含在基础路径集中的任何路径都能由基础路径集中的基础路径线性表示。由此可知,本发明在基础路径检测模型中,判断可执行的测试路径是否满足基础路径集的三个约束条件,保证了基础路径集的最简性和全面性,这是本发明与已有研究成果的明显区别。综上可知,本发明设计的基于统计分析的可执行基础路径进化生成方法生成的测试路径可应用于任何路径测试方法中,从而提高软件测试的效率。附图说明图1是基于统计分析的可执行基础路径进化生成工具体系结构图。图2是三角形分类程序的源代码。图3是三角形分类程序的控制流图。图4是三角形分类程序的DD-图。具体实施方式下面结合具体附图和实例对本发明基于统计分析的可执行基础路径进化生成方法的实施方式进行详细说明。本发明设计一种基于统计分析的可执行基础路径进化生成工具,其体系结构图如图1所示,包含3个模块:统计分析模块、可执行路径生成模块和基础路径检测模块。步骤1.统计分析模型的设计。统计分析模型的设计主要分为两个步骤,条件语句相关性的判定和互斥边的判定。1.1条件语句相关性的判定。采用统计分析方法,随机产生一组测试数据运行被测程序,统计不同条件语句谓词对应的随机变量的取值情况,获得样本数据,利用最大似然估计方法,计算随机变量的估计值,判定条件语句的相关性类型,主要方法为:设ni和nj是2个条件语句,则若ni取真分支时nj必然取真分支,则称语句组(ni,nj)具有T-T相关性;若ni取真分支时nj必然取假分支,则称语句组(ni,nj)具有T-F相关性;若ni取假分支时nj必然取真分支,则称语句组(ni,nj)具有F-T相关性;若ni取假分支时nj必然取假分支,则称语句组(ni,nj)具有F-F相关性。1.2互斥边的判定。依据条件语句的相关性类型,判断DD-图中的互斥边,主要方法为:设条件语句ni的真分支所对应的边为eiT,假分支所对应的边为eiF,则若语句对(ni,nj)具有T-T相关性,则称(eiT→ejF)为其对应的互斥边;若语句对(ni,nj)具有T-F相关性,则称(eiT→ejT)为其对应的互斥边;若语句对(ni,nj)具有F-T相关性,则称(eiF→ejF)为其对应的互斥边;若语句对(ni,nj)具有F-F相关性,则称(eiF→ejT)为其对应的互斥边。步骤2.可执行路径生成模型的设计。可执行路径生成模型的设计使用本发明提出的遗传算法生成一组可执行的测试路径。初始化被测程序DD-图中的入口边和出口边,依据统计分析结果判定互斥边,其对应的路径为不可执行路径,在进化过程中将其舍弃。通过遗传算法的繁殖运算对每一条路径增加新边,直到得到一条完整路径为止。生成路径的过程中,考虑到互斥边对应的路径为不可执行路径,因此,生成的路径均为可执行路径。主要方法如下。2.1搜索空间。搜索空间是所需解决问题的集合,在搜索空间中每个点代表一个可能的解决方案。在本发明方法中,设其搜索空间为D,则(1)由此可知,本发明方法的输入域是被测程序DD-图中所有边的集合。2.2个体编码。遗传算法的运算对象是表示个体的符号串,可以是二进制、数值、数组、列表、树或者其他对象,编码主要依赖于解决的问题。在本发明方法中,用整型变量表示染色体,代表被测程序DD-图中的边,染色体的长度依赖于基础路径的长度,则染色体为(2)。2.3初始种群。遗传算法是对群体进行的进化操作,需要准备表示起始搜索点的初始群体数据。在本发明方法中,初始种群中每个个体(即染色体)包含两条边,即被测程序DD-图中的入口边和出口边,种群大小设置为PM。因此,染色体的最小长度为2,染色体的最大长度等于DD-路径含有边的最多数量。2.4个体评价。遗传算法采用个体适应度评定每个个体的优劣程度,从而决定其遗传机会的大小。在本发明方法中,应用适应度函数评价进化生成路径的优劣,其取值依赖于DD-路径中相邻边的概率,计算公式如下:(3)(4)f(xi):表示染色体xi(i=1,…,PM)的适应度函数值;d(xi):表示染色体xi相邻边的数量;w(eij):表示染色体xi中边ej的权重;L(xi):表示染色体xi的长度(即表示染色体xi中含有边的数量)。2.5选择运算。选择当前种群适应度较高的个体遗传到下一代种群。一般情况,适应度较高的个体有更大的机会遗传到下一代种群。在本发明方法中,采用轮盘赌的方法,即与适应度成正比的概率确定各个个体遗传到下一代种群的数量。2.6交叉运算。交叉运算是遗传算法中生成新个体的主要运算过程,其以一定概率交换两个个体的部分基因座。在本发明方法中,采用单点交叉的方法,即在染色体中确定交叉位置,然后以某一概率在该点交换两个配对染色体的部分基因座。2.7变异运算。变异运算是对染色体某一基因座上的基因以一较小的概率进行改变,也是产生新个体的一种主要运算。在本发明方法中,采用基本位变异的方法,即在染色体中确定基因变异位置,然后以某一概率对该点的基因进行变异。2.8繁殖运算。繁殖运算主要是为了实现扩展染色体使其代表完整的路径。在本发明方法中,采用在染色体的某一基因座位置后插入新的基因,实现染色体的扩展。步骤3.基础路径检测模型的设计。基础路径检测模块检测生成的可执行路径是否为基础路径。如果生成的可执行路径为独立路径,并且满足与已有的基础路径的线性无关性,则将此生成路径加入基础路径集。运行一次遗传算法可生成多条测试路径,重复迭代直到生成一组基础测试路径或者满足终止条件。3.1检验运算。检验运算,主要是判断生成的测试路径(即适应度函数值为1的染色体)是否为基础路径。首先,检测生成的测试路径是否为独立路径,独立路径至少有一条边在其他路径中没有出现过。其次,检验测试路径其是否可以由基础路径集中的基础路径线性表示,不能由基础路径线性表示的独立路径加入基础路径集;否则,生成的测试路径不能加入基础路径集。3.2算法终止。在传统遗传算法中,种群进化到某个个体代表解决方案或者达到最大迭代次数时,算法终止。在本发明方法中,生成的一组测试路径满足基础路径集的约束条件或者达到最大迭代次数时,算法终止。需要说明的是,本发明方法满足的是多目标生成问题,一次进化生成的是一组测试路径,即基础路径集。3.3测试实例。本发明中,以三角形分类程序为例,介绍如何采用统计分析的进化生成方法自动生成基础路径集的具体过程。三角形分类程序的源代码如图2所示,对应的控制流图如图3所示,相应的DD-图如图4所示。(1)相关性类型以及互斥边的判定。采用统计分析模型判定条件语句的相关性,确定DD-图中的互斥边。具体方法如下:随机产生一组测试数据运行被测程序;统计不同条件语句谓词对应随机变量的取值情况,获得样本数据;利用最大似然估计方法,得到条件语句相关性对应的估计值,判定条件语句的相关性类型;根据条件语句的相关性类型,确定DD-图中的互斥边。三角形分类程序中判定条件语句相关性参考了姚香娟博士论文“复杂软件测试数据进化生成理论及应用”中的方法,但根据实际情况对其进行了修改。根据条件语句的相关性类型,确定DD-图中的互斥边,如表1所示。表1三角形分类程序中条件语句相关性及互斥边条件语句相关性类型互斥边条件语句相关性类型互斥边(11,13)T→Fe9→e11(4,8,11)TF→Fe3,e8→e9(2,4,6)TT→Fe1,e3→e5(6,8,11)TF→Fe5,e8→e9(2,8,11)TF→Fe1,e8→e9(2,4,8,13)TTF→Fe1,e3,e8→e11(4,6,8)TF→Te3,e6→e8(4,6,8,13)TTF→Fe3,e5,e8→e11(2)初始种群的设置。初始种群中每条染色体包含两条边,即被测程序DD-图中的入口边和出口边,种群大小设置为PM。三角形分类程序中,假设初始种群含有8条染色体,如表2所示。(3)个体评价函数。三角形分类程序中,假设当前种群含有不同长度的一组染色体,x1=(0,1,13),x2=(0,2,3,13),x3=(0,1,4,5,13),x4=(0,2,4,5,7,13);依据染色体中含有边的数量,计算L(xi)(i=1,2,3,4),L(x1)=3,L(x2)=4,L(x3)=5,L(x4)=6;依据染色体的长度,计算染色体中边的概率(即权重),w(e1j)=1/3(j=0,1,13),w(e2j)=1/4(j=0,2,3,13),w(e3j)=1/5(j=0,1,4,5,13),w(e4j)=1/6(j=0,2,4,5,7,13)。依据染色体中相邻边的数量,计算d(xi)(i=1,2,3,4),d(x1)=2,d(x2)=3,d(x3)=4,d(x4)=6。再根据公式(3)和(4),计算适应度函数值:f(x1)=2/3,f(x2)=3/4,f(x3)=4/5,f(x4)=1。由本组数据可知,染色体x4代表的路径p4={e0,e2,e4,e5,e7,e13}是最优路径,如果此路径是独立路径,且与基础路径满足线性无关性,则把其加入基础路径集。(4)选择运算。三角形分类程序中,采用轮盘赌方法选择下一代种群,具体方法如下:计算种群中所有个体的适应度函数值的和:(5)计算每个个体的相对适应度函数值:(6)相对适应度函数值的大小决定各个个体被遗传到下一代种群中的概率,每个概率值组成一个区域,所有相对适应度函数值的和为1。由此可见,适应度函数值越高的个体被选择的概率越大;反之,适应度函数值越低的个体被选择的机会越小。随机生成数r,。依据r落入的概率区域,确定各个个体被选中的次数m。三角形分类程序中,假设当前种群具有如下8条染色体,依据相应的互斥边删除不可执行路径对应的染色体。每条染色体的长度L=5,相邻边数量d=4,计算染色体的适应度函数值以及相对适应度函数值。生成随机数r,确定染色体被选择的次数m。选择过程如表3所示。(5)交叉运算。三角形分类程序中,采用单点交叉的方法交换两个配对染色体的部分基因座。操作过程如下:对当前种群中所有个体随机配对;随机生成染色体中交叉点位置posc;设置交叉概率pc=0.8,随机生成数r,;如果r<pc,交换配对的两个染色体中交叉点(包含交叉点)后的基因座。三角形分类程序中,对选择后的种群进行交叉操作,假设交叉点位置posc=4。交叉过程如表4所示。(6)变异运算。三角形分类程序中,采用基本位变异的方法对基因进行变异。操作过程如下:随机生成当前种群中染色体的变异点位置posm;设置变异概率pm=0.15,随机生成数r,;如果r<pm,将变异点所在的基因值(即边的真假分支)取反。三角形分类程序中,对交叉后的种群进行变异操作,假设变异点位置posm=4。变异过程如表5所示。(7)繁殖运算。三角形分类程序中,在染色体的某一基因座位置后插入新的基因,实现染色体的扩展。操作过程如下:随机生成当前种群中染色体的繁殖点位置posb;确定与繁殖点相邻的基因(即边),并随机选择一条边作为繁殖基因;将繁殖基因插入繁殖点位置后,作为基因座posb+1对应的基因,增加染色体的长度。三角形分类程序中,对变异后的种群进行繁殖操作,假设繁殖点位置posb=4。繁殖过程如表6所示。(8)检验运算。三角形分类程序中,经计算得到染色体x1,x4,x5,x7的适应度函数值为1。其中,染色体x1,x4,x7含有不相同的边,其代表的3条测试路径均为独立路径;染色体x5含有的边与x1,x4,x7含有的边相同,即没含有新边,其代表的测试路径不是独立路径。另外,生成的3条独立路径没有线性关系。因此,将生成的测试路径x1,x4,x7加入基础路径集。(9)算法终止。三角形分类程序中,基于统计分析的可变长度遗传算法不断迭代,共得到17条可执行路径。其中,只有6条可执行路径满足基础路径集的约束条件,即其为独立路径且不具有线性关系,如表7所示。在本例的DD-图中,圈复杂度C(G)=E-N+P=14-9+1=6。因此,该6条测试路径为基础路径,构成基础路径集,算法终止。综上所述,本发明设计了一种基于统计分析的可变长度遗传算法用于自动进化生成可执行的基础测试路径,其可作为测试路径应用于任何路径测试技术。本发明方法采用统计分析方法,判定DD-图中的互斥边,以此为依据判断不可执行路径。提出基于统计分析的可变长度遗传方法,染色体的长度随着迭代次数的改变逐渐增加,代表进化生成的测试路径。在遗传算法的选择运算中,判断染色体是否含有互斥边,若染色体含有互斥边,则其代表的路径为不可执行路径,将其舍弃,由此生成的路径均为可执行测试路径。检验生成的测试路径是否为基础路径,如果生成的测试路径是独立路径,并且与基础路径满足线性无关性,将其加入可执行的基础路径集,可以应用于任何路径测试方法中。同时,该方法可服了控制流图中的循环问题。通过实例研究评估所提方法的可行性和有效的。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1