一种面向条件判定覆盖的测试数据自动生成方法

文档序号:6549965阅读:477来源:国知局
一种面向条件判定覆盖的测试数据自动生成方法
【专利摘要】本发明公开了一种面向条件判定覆盖的测试数据自动生成方法。本发明通过对每个分支节点按条件判定覆盖准则寻找可覆盖该分支节点的测试数据产生待测源代码的测试数据集。其中,对个分支节点按条件判定覆盖准则寻找可覆盖该分支节点的测试数据通过以下方法实现:首先通过随机方法构建输入向量集,然后对输入向量集的运行分析,再通过线性拟合的手段扩展输入向量集,经重复迭代,获得按条件判定覆盖准则覆盖该分支节点的测试数据。本发明方法高度自动化,能够尽可能的提高单元测试的效率,降低测试成本,并且支持面向节点条件判定的测试覆盖准则。
【专利说明】一种面向条件判定覆盖的测试数据自动生成方法

【技术领域】
[0001] 本发明涉及一种测试数据自动生成方法,特别涉及自动化单元测试中条件/判定 覆盖测试的测试用例数据的生成方法。

【背景技术】
[0002] 测试技术是保障软件系统质量最重要和最有效的方法之一,一直以来也是工业界 保证软件系统正确性最主要的手段。受计算能力和时间、空间资源的限制,测试无法穷尽软 件所有可能的执行,实践中,各种测试充分度准则被用于驱动和评估测试过程。因此,面向 给定的测试充分度准则,如何生成对应的测试用例集合,以驱动程序的执行覆盖相应的结 构,成为测试过程中最关键的技术环节。目前测试用例的设计基本依靠人工手动完成,不仅 费时费力,而且用例的有效性也难以得到保证。如何自动地为各种测试充分度准则生成有 效的测试用例,已成为测试技术研究的热点问题之一。
[0003] 面向条件/判定的测试覆盖(简称:C/DC,即Condition/Decision Coverage)准 贝ij,是应用较广泛的一种白箱测试充分度准则,它要求设计足够的测试用例,使得判定中每 个条件的所有可能取值至少执行一次,同时每个判定的所有可能判定结果至少执行一次。 举例来说,判断语句S = A and(B or C),其中,A、B、C为判定中的条件。当ABC取值为TTF 时,S取值为T ;当ABC取值为FFT时,S取值为F。测试集{TTF、FFT}下,每个条件,即条件 ABC均存在T和F的取值情形,而判断语句S也存在T和F的取值。
[0004] 理论研究已经证明,不存在通用有效的算法可以为程序中任意判定的任意条件取 值组合生成测试输入。已有的研究工作可分为基于静态分析和基于动态执行两类方法。基 于静态分析的方法无法有效的处理判定中的非线性约束条件,动态方法容易陷入局部最优 点而无法发现可行的输入,它们在处理实际问题时存在很大的局限性。
[0005] 科学和工程问题中,通常可以采用诸如采样、实验等方法获得若干离散的数据,根 据这些数据,我们往往希望得到一个逼近于实际函数或者更加密集的离散方程与已知数据 相吻合,这个过程叫做拟合。线性拟合是比较简单的拟合方式,数据点使用直线进行连接, 结果是一个多边形。线性拟合简单易用,它可以在比较短的时间内得到逼近函数,缩短了算 法自动生成测试数据的前期工作量。


【发明内容】

[0006] 本发明所要解决的问题是为待测试源程序自动构建测试数据(测试用例),使得 在这些测试数据下执行待测试源程序能够覆盖该待测试源程序的所有判定的可能取值及 判定中所有条件的可能取值,完成条件/判定覆盖测试。
[0007] 为解决上述问题,本发明采用的方案如下:
[0008] -种面向条件判定覆盖的测试数据自动生成方法,包括分析待测源程序获得待测 源程序所有路径的集合和所有分支节点的集合BS以及分支节点的关联路径集的集合的步 骤,该方法还包括对分支节点集BS中的每一分支节点B执行以下步骤:
[0009] SI :根据B的关联路径集中各路径上位于B(含B)之前的各分支节点的各个条件, 构建关于输入变量向量X的分支函数Fk^_ (X);所述输入变量向量X为所述待测源程序输 入变量构成的向量;所述分支函数Fk^_(X)表示路径k上第i个分支节点的第j个条件的 分支函数;所述路径k经过分支节点B ;
[0010] S2 :构建初始的输入向量集U ;所述初始的输入向量集U至少包含两个输入向量;
[0011] S3 :计算以输入向量集U中每个输入向量作为待测源程序的输入执行待测源程序 时与所述分支节点B关联的各路径k上位于B之前(含B)的每个分支节点上的各分支函 数F k^_(X)获得分支函数值的集合V以及最远公共分支节点mk;当执行待测源程序时的执 行路径经过分支节点B时计算B的判定和判定中各个条件的取值;假如输入向量集U中存 在一个输入向量执行待测源程序时执行路径经过分支节点B且使B的判定或判定中某个条 件产生新的取值,则记录该输入向量作为所述分支节点B的一个测试数据;假如所述分支 节点B的测试数据集覆盖了 B的判定及判定中各条件所有可能取值,则返回该测试数据集 作为所述分支节点B的测试数据集;
[0012] S4 :根据分支节点B的关联路径集中各路径k上位于B之前(含B)的各个分支节 点上的各分支函数值的集合V以及最远公共节点m k构建路径k上位于最远公共节点mk之 前(含mk)的每个分支节点的各分支函数的拟合函数LF k,u ;LFk^表示路径k上第i个分 支节点的第j个条件的分支函数的线性拟合函数;
[0013] S5 :根据与B关联的各路径上位于B之前(含B)的每个分支节点中的各分支函数 的线性拟合函数LFk^_和待测源程序计算可行区间I ;
[0014] S6 :在可行区间I内随机选取各输入变量的输入值得到测试数据集加入至输入向 量集U中;
[0015] S7 :重复执行步骤S3至S6直到步骤S3至S6执行的次数达到限定的次数;
[0016] S8 :返回所有记录的所述分支节点B的测试数据作为所述分支节点B的测试数据 集。
[0017] 进一步,根据本发明的面向条件判定覆盖的测试数据自动生成方法,所述步骤S2 中所述的初始的输入向量集U包含Ni+Ι个输入向量,所述Ni为输入变量的个数;初始的输 入向量集 U= {uQ,,其中

【权利要求】
1. 一种面向条件判定覆盖的测试数据自动生成方法,包括分析待测源程序获得待测 源程序所有路径的集合和所有分支节点的集合BS以及分支节点的关联路径集的集合的步 骤,其特征在于,该方法还包括对分支节点集BS中的每一分支节点B执行以下步骤: 51 :根据B的关联路径集中各路径上位于B (含B)之前的各分支节点的各个条件,构建 关于输入变量向量X的分支函数Fk^_ (X);所述输入变量向量X为所述待测源程序输入变 量构成的向量;所述分支函数Fti,j(X)表示路径k上第i个分支节点的第j个条件的分支 函数;所述路径k经过分支节点B ; 52 :构建初始的输入向量集U ;所述初始的输入向量集U至少包含两个输入向量; 53 :计算以输入向量集U中每个输入向量作为待测源程序的输入执行待测源程序时 与所述分支节点B关联的各路径k上位于B之前(含B)的每个分支节点上的各分支函数 Fk^_(X)获得分支函数值的集合V以及最远公共分支节点mk;当执行待测源程序时的执行 路径经过分支节点B时计算B的判定和判定中各个条件的取值;假如输入向量集U中存在 一个输入向量执行待测源程序时执行路径经过分支节点B且使B的判定或判定中某个条件 产生新的取值,则记录该输入向量作为所述分支节点B的一个测试数据;假如所述分支节 点B的测试数据集覆盖了 B的判定及判定中各条件所有可能取值,则返回该测试数据集作 为所述分支节点B的测试数据集; 54 :根据分支节点B的关联路径集中各路径k上位于B之前(含B)的各个分支节点 上的各分支函数值的集合V以及最远公共节点mk构建路径k上位于最远公共节点mk之前 (含m k)的每个分支节点的各分支函数的拟合函数LFk^ ;LFk^表示路径k上第i个分支 节点的第j个条件的分支函数的线性拟合函数; 55 :根据与B关联的各路径上位于B之前(含B)的每个分支节点中的各分支函数的线 性拟合函数LF k^_和待测源程序计算可行区间I ; 56 :在可行区间I内随机选取各输入变量的输入值得到测试数据集加入至输入向量集 U中; 57 :重复执行步骤S3至S6直到步骤S3至S6执行的次数达到限定的次数; 58 :返回所有记录的所述分支节点B的测试数据作为所述分支节点B的测试数据集。
2. 如权利要求1所述的面向条件判定覆盖的测试数据自动生成方法,其特征在于, 所述步骤S2中所述的初始的输入向量集U包含Ni+Ι个输入向量,所述Ni为输入变量 的个数;初始的输入向量集u = {uQ,Up U2, · · ·,UNi},其中Ui = {Uu,Ui,2, · · ·,ι^,Μ};输入
3.如权利要求1所述的面向条件判定覆盖的测试数据自动生成方法,其特征在于,所 述步骤S3包括: 531 :从输入向量集U获取未执行的输入向量ut ; 532 :判断未执行的输入向量ut是否存在;假如不存在未执行的输入向量,则执行步骤 S34 ;否则执行步骤S33 ; 533 :根据ut执行待测源代码得到执行的路径与分支节点B的关联路径集中各路径k 的公共分支节点mtt,计算路径k上位于分支节点B之前(含B)的各分支节点的分支函数 FuJX)的值,B的所有关联路径的各个分支节点的各分支函数FuJX)的值构成集合V; 若执行的路径经过分支节点B,则执行的路径为分支节点B的一条关联路径,根据该关联路 径上B的判定中各个条件的分支函数值得到分支节点B的判定和判定中各条件的取值;假 如B的判定或判定中条件产生了新的取值,则记录该输入向量作为所述分支节点B的一个 测试数据;假如B的测试数据集覆盖了 B的判定且判定中各条件所有可能取值,返回该测试 数据集作为所述分支节点B的测试数据集并结束对整个分支节点B生成测试数据的过程。 S34 :从分支B的各关联路径k记录的{mu, mk>2, . . .,mk,TU}中选取最远公共分支节点 mk。
4. 如权利要求1所述的面向条件判定覆盖的测试数据自动生成方法,其特征在于,所 述步骤S4包括以下步骤: 541 :输入向量集U和B的关联路径集中各路径k上位于B之前(含B)的各个分支节 点的各分支函数值的集合V以及最远公共节点m k构建坐标集Vk,y,z,j = {(u^Fk^Juu)), (? j,Fk,y,z (u2,』)),· · ·,(uTU,』,Fk,y,z (uTU,』))); 542 :以 Vk,y,z,』一{(u1;』,Fk, y,z (i^,』)),(u2,』,Fk,y,z (u2,』)),· · ·,(uTU,』,Fk,y,z (uTU,』))}内两 个相邻的坐标点构建Fk,y, z(Xj)的线性拟合函数LFk,y,z(Xj) = Pj*Xj+qj,得到参数集LFPQk;i,j 一 {(Pi,Qi),(P2,%),···,(Pm,%i)}; 其中,\y^表示路径k上第y个分支节点第z个分支函数对应第j个输入变量的坐 标集,其中y < m ;Ui;j为输入向量集U中第i个输入向量的第j个输入变量的值;Fty,z( Xj) 为路径k上第y个节点第z个分支函数关于第j个输入变量的函数;LFk,y, z(xp为路径k上 第y个节点第z个分支函数关于第j个输入变量的线性拟合函数;LFPQ k^.为路径k上第i 个节点第j个分支函数的线性拟合函数的参数集。
5. 如权利要求1所述的面向条件判定覆盖的测试数据自动生成方法,其特征在于,所 述步骤S5包括: 551 :计算分支节点B的各关联路径k上位于分支节点B之前(含B)的各个分支节点 中各分支函数的可行区间Dk,i;j ; 552 :合并每个分支节点内的各分支函数的可行区间Dk^_得到各分支节点的可行区间 Dk,i ; 553 :合并最远公共分支节点mk前的各分支节点的可行区间Dti得到分支节点B在关 联路径k上的可行区间I k。 554 :合并分支节点B在各关联路径k上的可行区间Ik,得到分支节点B的可行区间I。
6. 如权利要求1所述的面向条件判定覆盖的测试数据自动生成方法,所述可行区间I =仏,12,. . .,IJ,其中,s为输入变量的个数,Ii为第i个输入变量的可行区间,Ii = {ΙΜ, Iu,. . .,IuJ,其中,Ii,」为第i个输入变量第j个可行分段区间,Mi为第i个输入变量可 行分段区间数,其特征在于,所述步骤S6中,当Mi为1时,从^为第i个输入变量的可行 区间的唯一分段区间Iu的扩展区间中随机取值构建测试数据。
7. -种机器可读介质,其特征在于,该可读介质上存储有指令集合,当该指令集合被执 行时,使得该机器可执行权利要求1至6中任一项权利要求所述的面向条件判定覆盖的测 试数据自动生成方法。
【文档编号】G06F11/36GK104050083SQ201410271284
【公开日】2014年9月17日 申请日期:2014年6月17日 优先权日:2014年6月17日
【发明者】陈鑫, 欧建生, 成新, 周岩, 鞠秀芳 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1