基于数据代码分离技术的测试用例生成方法

文档序号:6382546阅读:283来源:国知局
专利名称:基于数据代码分离技术的测试用例生成方法
技术领域
本发明涉及软件测试技术,特别涉及一种基于数据代码分离技术的测试用例生成方法。
背景技术
随着软件开发周期的时间限制、资源限制以及软件的日趋复杂化,一般大型应用软件的白盒测试工作仅靠手工已不能完全胜任。尤其是在迭代开发过程中,每一个版本下的各个组件都需要不断验证。由此产生了数据代码分离系统和自动化白盒测试技术。由于脚本编制工作,是一项较为繁琐的工作,目前通常使用基于控制模型的白盒测试脚本自动生成算法,此种设计方式的益处主要有如下两个方面1、基于图的最小路径覆盖算法,可以在满足覆盖率要求的条件下,提高测试效率,节省资源;2、基于控制模型生成测试用例,在 保证了逻辑完整性及功能的时序性。然而,该设计方式对于安全要求较高,且没有对源代码进行智能化分析,影响了测试用例生成的效率。

发明内容
(一)解决的技术问题本发明解决的技术问题是实现代码智能化分析和测试用例自动生成的问题。(二)技术方案本发明提出了一种基于数据代码分离技术的测试用例生成方法,所述方法包括S1、对程序源代码进行预处理,并生成程序控制流图;S2、根据所述程序控制流图生成路径矩阵A,并为每条路径P中的每个谓词设置对应的优先级因子β ;S3、将所述路径根据所述优先级因子β逆序排序,获得矩阵A';S4、对于所述矩阵A',选取路径Pi,当选取的路径Pi组成的矩阵Α"的秩等于路径矩阵A的秩时,则路径选取结束;S5、根据所述路径Pi中谓词的类型,生成测试数据;S6、根据所述测试数据和所述路径Pi,生成测试用例。优选地,步骤S2中所述路径矩阵A中每行表示一条路径经过的边集合,每列表示每条路径经过边的次数。优选地,在步骤S3之前所述方法还包括生成路径优先级系数,所述路径优先级系数为路径矩阵A每行中谓词的使用次数与所述每行中谓词对应的优先级因子的乘积。优选地,步骤S5之前还包括设定程序的初始输入Itl以及迭代次数上限Τ,如果Itl能经过路径Pi,则获得经过路径Pi的程序输入If,即If=Itl ;若Itl不能经过路径Pi,则跳转步骤S5。优选地,所述步骤S5中若所述路径Pi中谓词的类型为非线性,则所述方法包括
S51、计算所述非线性谓词的线性函数L(Ni,IpPi),其中Ik为输入变量,Pi为选取的路径,Ni为Pi上的结点;S52、用路径Pi中的所有线性函数和L(Ni,Ik, Pi)构造输入变量的线性约束系统,所述所有线性函数为所述路SPi中谓词类型为线性的函数;S53、计算所述线性约束系统,得到输入Ik+1 ;S54、若Ik+1能经过路径Pi,则If = Ik+1 ;否则,重复步骤S5f S53,直至得到能够经过路径Pi的输入,所述重复步骤的迭代次数上限为T。优选地,步骤S51中所述计算所述非线性谓词的线性函数L(Ni,Ik, Pi)的方法具体包括根据路径Pi上的谓词结点Ni关于输入变量Ik,得到通用线性函数L (Ni, Ik, Pi),计算所述线性函数L (Ni,Ik, Pi),使得L (Ni,Ik,Pi) =0,则所述线性函数L (Ni,Ik, Pi)代表谓词函数在Ik处的切平面,则称L(Ni,Ik, Pi)为Ni的谓词函数关于Ik的线性算术表示。优选地,所述步骤S5中若所述路径Pi中谓词的类型为线性,则所述方法包括S52’、用路径Pi中的线性函数构造输入变量的线性约束系统;S53’、计算所述线性约束系统,得到输入Ik+1 ;S54’、若Ik+1能经过路径Pi,则If=Ik+1 ;否则,重复步骤S52’飞53’,直至得到能够经过路SPi的输入,所述重复步骤的迭代次数上限为τ。优选地,在步骤S6之后所述方法还包括对程序输出状态的集合进行映射,并根据每一个程序输出状态对应的转移概率,将程序输出状态映射到区间(Tl。优选地,步骤S6中的所述测试用例是指从路径起始结点到终止结点所经过的边的序列。优选地,执行测试用例生成过程,当所述矩阵A"的秩大于路径矩阵A的秩,且P(PlA)为A状态时,检查激励P的概率&A) = 1,其中,A为输入状态,即路径矩阵A作
为输入状态,P为激励。(三)有益效果本发明在生成测试数据时进行代码智能分析,通过自动提取路径中谓词条件中的测试数据,构成谓词线性约束系统,实现了代码智能化分析,简化人力设计测试用例和测试数据的工时,简化测试脚本编写时间,提高了测试效率。


图1是本发明提出的方法流程图;图2是本发明中程序控制流图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。本发明提出了一种基于数据代码分离技术的测试用例生成方法,参加图1,所述方法包括S1、对程序源代码进行预处理,并生成程序控制流S2、根据所述程序控制流图生成路径矩阵A,并为每条路径P中的每个谓词设置对应的优先级因子β ;S3、将所述路径根据所述优先级因子β逆序排序,获得矩阵A';S4、对于所述矩阵A',选取路径Pi,当选取的路径Pi组成的矩阵A"的秩等于路径矩阵A的秩时,则路径选取结束;S5、根据所述路径Pi中谓词的类型,生成测试数据;S6、根据所述测试数据和所述路径Pi,生成测试用例。本发明提出的一种基于数据代码分离技术的测试用例生成方法具体为以下内容
对程序源代码进行预处理,所述预处理包括删除注释、空行,提取语句和控制流信息,以及程序中变量的定义和使用情况。在结构测试中,对于给定覆盖准则C,生成一组路径P,使得这组路径P能够达到C所描述的覆盖要求。本文所期望获得的基路径,是指能够覆盖边集合E的最小P集合。在图论中,圈复杂度被定义为V(G)=E_N+p,其中E表示边集合,N表示程序控制流图(Program flow graph, PFG)中结点的数量,p表示连通分支数。如果不考虑PFG的方向性,则V(G)=E-N+1。但是PFG并不是强连通的,解决方法是增加一条从入口到出口的边,这样PFG的圈复杂度就是V(G) =E-N+2。设PFG中E为{el,e2. . . en},则可将PFG转化为矩阵A,其中每行表示一条路径经过的边集合,每列表示每条路径经过边的次数。由于任一矩阵的秩唯一且小于或等于列数。即不管有多少条可能路径,矩阵的秩不会超过程序控制流图中的边数。基于McCabe理论,矩阵的秩即是程序流图的圈复杂度。对于程序控制流图如图2所示,根据图2可以得到路径P的集合为pl=<S, 1,2, 3,4, E>p2=〈S, I, 3,4,E>p3=<S, I, 2,3,4,5,4,E>p4=<S, 1,3,4, 5,4, E>p5=<S, I, 2,3,4,5,4,5,4,E>p6=<S, I, 3,4,5,4,5,4,E>根据路径P的集合将PFG转化为路径矩阵A,
110 110 0 1"
10 10 10 0 1
A 110 11111A =
10 10 1111
110 112 2 1 10 10 12 2 1路径上具有明确取值要求的判断语句中的条件表达式称为分支谓词。在Macabe圈复杂度测试基础上,对每个谓词增加优先级因子β,用以选取高优先级路径生成测试用例。使用路径矩阵Α,每行中谓词的使用次数与对应谓词的优先级因子β计算乘积,获得该行对应路径的优先级系数,并将路径根据优先级因子逆序排序,获得矩阵A'。对于路径矩阵A,由于任一矩阵的秩唯一且小于或等于列数。即不管有多少条可能路径,矩阵的秩不会超过程序控制流图中的边数。基于McCabe理论,路径矩阵的秩就是程序流图的圈复杂度入。对于矩阵A',根据自顶向下原则,选取路径Pi用以计算测试数据,并使Pi组成矩阵Α",当矩阵Α"的秩等于λ时,路径选取结束。因为若路径Pi中的谓词的函数是线性的,则其线性算术表示就是谓词函数本身。根据筛选后得到的路径Pi,设定程序的初始输入Itl以及迭代次数上限Τ,如果Itl
能经过路径Pi,则获得经过路径Pi的程序输入If,即If=Itl ;若I0不能经过路径Pi,则分析Pi上谓词类型,并根据谓词类型生成测试数据,步骤如下当路径Pi上谓词的函数为非线性函数,则1、计算该点谓词函数的线性算术表示L(Ni,Ik, Pi)。2、根据路径Pi上的谓词结点η关于给定输入Ik的输入变量,写出一个通用线性函数L(Ni,Ik,Pi),然后计算该函数,使得L(Ni,Ik,Pi) =0,所述线性函数L (Ni,Ik,Pi)代表谓词函数F在Ik处的切平面,则称L(Ni,Ik,Pi)为结点Ni的谓词函数F关于Ik的线性算术表不。3、用Pi中的所有线性谓词函数和L(Ni,Ik, Pi)构造输入变量的线性约束系统,所述所有线性谓词函数为路径Pi中谓词类型为线性的函数。4、求解线性约束系统,得到新的输入Ik+1。5、若Ik+1能经过路径Pi,则If=Ik+1 ;否则,重复步骤广4,直至得到能够经过路SPi的输入,所述重复步骤的迭代次数上限为T。当路径P上谓词函数为线性函数,则S52’、用路径Pi中的线性函数构造输入变量的线性约束系统;S53’、计算所述线性约束系统,得到输入Ik+1 ;S54’、若Ik+1能经过路径Pi,则If=Ik+1 ;否则,重复步骤S52’飞53’,直至得到能够经过路SPi的输入,所述重复步骤的迭代次数上限为τ。对于程序O: read (a, b, c)1: m=a+bPl:1f (2*a+b ^ 6) then2: n=m3:else n=b end ifP2:1f (n-c) ^ 4 then4:n=a*b*c5:m++P3: else if (a2+c2>100) then6 :m=a*c+l end ifP4:1f (n ^ 0) then7: write (m)
P5:else if(b-Sin(c))>0 then8: write (n) end if当选取路径P= {0,I, PI, 2,P2, 4,5,P4, 7},I0 = (I, 2,3)。因Ici不能使经过路径P,故继续执行算法后面的步骤。构造谓词的函数关于输入变量Itl的线性约束系统2*a+b_6 ≥ O,a+b-c-4 ≥ O,a*b*c ≥ O。求解线性约束系统可求得一组解a=2, b=2, c=0。则新的输入1:=(2, 2,O)。因I1可以经过路径P,故
算法结束。选取路径P= {O, I, Pl, 3,P2, 4,5,P4, P5, 8},I0 = (I, 2,3)。因Ici不能经过路径P,故继续执行算法后面的步骤。因P中谓词函数P5是非线性的,故求P5F=b-sin(c)的线性算术表示可令其线性算术表示为L(B P5,Ik,P)=kb+lc+p,利用均差近似导数,可得k=l, 1=0. 89792,ρ=_2· 83488,所以谓词函数F=b-sin(c)关于I。的线性算术表示为L(BP5, I0, P) =b+0. 89792c-2. 83488.构造线性约束系统2*a+b_6 ≥ O,a+b-c-4 ≥ O,a*b*c ≥ O,b+0. 89792*c-2. 83488>0。求解线性约束系统得11=(2,2,1)可经过路径P,算法结束。对程序输入状态的下一个相邻状态即程序输出状态的集合进行映射。根据每一个程序输出状态对应的转移概率,将输出状态映射到区间(因为转移概率和为1,则区间选在O I)。定义输入状态A和激励P的函数F(A,p),pep, P(A)为当前输入状态为A时的激励集合。由函数F(A,P)可得输出状态集E(A)。根据生成测试数据Ii与Pi构造测试用例,得到测试用例后,到达终止状态。直到终止状态停止。测试用例是从从路径起始结点到终止结点所经过的边(或激励)的序列。不断从软件使用模型的初始结点状态开始,执行测试用例的生成过程,直到选取的测试路径数组的
秩超过圈复杂度,且P (P IA)为A状态时,检查激励P的概率
权利要求
1.一种基于数据代码分离技术的测试用例生成方法,其特征在于,所述方法包括 51、对程序源代码进行预处理,并生成程序控制流图; 52、根据所述程序控制流图生成路径矩阵A,并为每条路径P中的每个谓词设置对应的优先级因子β ; 53、将所述路径根据所述优先级因子β逆序排序,获得矩阵A'; 54、对于所述矩阵A',选取路径Pi,当选取的路径Pi组成的矩阵Α"的秩等于路径矩阵A的秩时,则路径选取结束; 55、根据所述路径Pi中谓词的类型,生成测试数据; 56、根据所述测试数据和所述路径Pi,生成测试用例。
2.根据权利要求1所述的方法,其特征在于,步骤S2中所述路径矩阵A中每行表示一条路径经过的边集合,每列表示每条路径经过边的次数。
3.根据权利要求1所述的方法,其特征在于,在步骤S3之前所述方法还包括生成路径优先级系数,所述路径优先级系数为路径矩阵A每行中谓词的使用次数与所述每行中谓词对应的优先级因子的乘积。
4.根据权利要求1所述的方法,其特征在于,步骤S5之前还包括设定程序的初始输入I0以及迭代次数上限Τ,如果Itl能经过路径Pi,则获得经过路径Pi的程序输入If,即If=I0 ;若I。不能经过路径Pi,则跳转步骤S5。
5.根据权利要求1或4中任一项所述的方法,其特征在于,所述步骤S5中若所述路径Pi中谓词的类型为非线性,则所述方法包括 551、计算所述非线性谓词的线性函数L(Ni,IkiPi),其中Ik为输入变量,Pi为选取的路径,Ni为Pi上的结点; 552、用路径Pi中的所有线性函数和L(Ni,Ik,Pi)构造输入变量的线性约束系统,所述所有线性函数为所述路径Pi中谓词类型为线性的函数; 553、计算所述线性约束系统,得到输入Ik+1; 554、若Ik+1能经过路径Pi,则If=Ik+1;否则,重复步骤S5fS53,直至得到能够经过路径Pi的输入,所述重复步骤的迭代次数上限为T。
6.根据权利要求5所述的方法,其特征在于,步骤S51中所述计算所述非线性谓词的线性函数L(Ni,Ik,Pi)的方法具体包括根据路SPi上的谓词结点Ni关于输入变量Ik,得到通用线性函数L (Ni,Ik,Pi),计算所述线性函数L (Ni,Ik, Pi),使得L (Ni,Ik,Pi) =0,则所述线性函数L (Ni,Ik,Pi)代表谓词函数在Ik处的切平面,则称L (Ni,Ik,Pi)为Ni的谓词函数关于Ik的线性算术表示。
7.根据权利要求1或4中任一项所述的方法,其特征在于,所述步骤S5中若所述路径Pi中谓词的类型为线性,则所述方法包括 S52’、用路径Pi中的线性函数构造输入变量的线性约束系统; S53’、计算所述线性约束系统,得到输入Ik+1 ; S54,、若Ik+1能经过路径Pi,则If=Ik+1 ;否则,重复步骤S52’飞53’,直至得到能够经过路径Pi的输入,所述重复步骤的迭代次数上限为T。
8.根据权利要求1所述的方法,其特征在于,在步骤S6之后所述方法还包括对程序输出状态的集合进行映射,并根据每一个程序输出状态对应的转移概率,将程序输出状态映射到区间(Tl。
9.根据权利要求1所述的方法,其特征在于,步骤S6中的所述测试用例是指从路径起始结点到终止结点所经过的边的序列。
10.根据权利要求f8任一项所述的方法,其特征在于,执行测试用例生成过程,当所述矩阵A "的秩大于路径矩阵A的秩,且P(p|A)为A状态时,检查激励p的概率
全文摘要
本发明提供一种基于数据代码分离技术的测试用例生成方法,包括S1、对程序源代码进行预处理,并生成程序控制流图;S2、根据所述程序控制流图生成路径矩阵A,并为每条路径P中的每个谓词设置对应的优先级因子β;S3、将所述路径根据所述优先级因子β逆序排序,获得矩阵A′;S4、对于所述矩阵A′,选取路径Pi计算测试数据,当选取的路径Pi组成的矩阵A″的秩等于路径矩阵A的秩时,则路径选取结束;S5、根据所述路径Pi中谓词的类型,生成测试数据;S6、根据所述测试数据和所述路径Pi,生成测试用例。本发明实现了代码智能化分析,简化人力设计测试用例和测试数据的工时,简化测试脚本编写时间,提高了测试效率。
文档编号G06F11/36GK103019934SQ20121049604
公开日2013年4月3日 申请日期2012年11月28日 优先权日2012年11月28日
发明者何玺胜, 胥志洪 申请人:北京交控科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1