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

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

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

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


【发明内容】

[0006] 本发明所要解决的问题是为待测试源程序自动构建测试数据(测试用例),使得 在这些测试数据下执行待测试源程序能够覆盖该待测试源程序的所有判定的可能取值及 判定中所有条件的可能取值并表明每个条件独立影响判定,完成修改的条件判定覆盖测 试。
[0007] 为解决上述问题,本发明采用的方案如下:
[0008] -种面向修订的条件判定覆盖的测试数据自动生成方法,包括分析待测源程序获 得待测源程序所有路径的集合和所有分支节点的集合BS以及分支节点的关联路径集的集 合的步骤,该方法还包括对分支节点集BS中的每一分支节点B执行以下步骤:
[0009] S1 :根据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&⑴获得分支函数值的集合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,Up u2, · · ·,uNi},其中
[0018] Ui = {Uu,Ui,2, · · ·,Ui,Ni};输入向量uQ为随机生成,Ui与uQ满足关系: lij j _ Μη .·? r~H i 丰 / 1 F'irin >14 · ?,其中 e U,2,...,Ni}。 Wy随机,= j 进一步,根据本发明的面向修订的条件判定覆盖的测试数据自动生成方法,所述步骤 S3包括:
[0019] S31 :从输入向量集U获取未执行的输入向量ut ;
[0020] S32 :判断未执行的输入向量ut是否存在;假如不存在未执行的输入向量,则执行 步骤S34 ;否则执行步骤S33 ;
[0021] S33 :根据ut执行待测源代码得到执行的路径与分支节点B的关联路径集中各路 径k的公共分支节点!,计算路径k上位于分支节点B之前(含B)的各分支节点的分支 函数〇〇的值,B的所有关联路径的各个分支节点的各分支函数F k^(X)的值构成集合 V ;若执行的路径经过分支节点B,则执行的路径为分支节点B的一条关联路径,根据该关联 路径上B的判定中各个条件的分支函数值得到分支节点B的判定和判定中各条件的取值; 假如B的判定或判定中条件产生了新的取值,则记录该输入向量作为所述分支节点B的一 个测试数据;假如B的测试数据集覆盖了 B的判定且判定中各条件所有可能取值并且每个 条件都独立影响了判定,返回该测试数据集作为所述分支节点B的测试数据集并结束对整 个分支节点B生成测试数据的过程。
[0022] S34 :从分支B的各关联路径k记录的{mu, mk,2, . . .,mk,TU}中选取最远公共分支 节点mk。
[0023] 进一步,根据本发明的面向修订的条件判定覆盖的测试数据自动生成方法,所述 步骤S4包括以下步骤:
[0024] S41 :输入向量集U和B的关联路径集中各路径k上位于B之前(含B)的各 个分支节点的各分支函数值的集合V以及最远公共节点m k构建坐标集Vk,y,z,j = {(u1;j, Fk,y,z (? j)),(? j,Fk,y,z (u2,』)),· · ·,(uTU,』,Fk,y,z (uTU,);
[0025] S42 :以 Vk,y,z,』一{(u1; j,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,得到参数集LFPQ k, i, j 一 { (Pi,Qi),(P2,%),···,(Pm,%i) };
[0026] 其中,Vk,y,u表示路径k上第y个分支节点第z个分支函数对应第j个输入变量的 坐标集,其中y ;ui;」为输入向量集U中第i个输入向量的第j个输入变量的值;Fty, z (Xj) 为路径k上第y个节点第z个分支函数关于第j个输入变量的函数;LFk, y,z(Xp为路径k上 第y个节点第z个分支函数关于第j个输入变量的线性拟合函数;LFPQ k^.为路径k上第i 个节点第j个分支函数的线性拟合函数的参数集。
[0027] 进一步,根据本发明的面向修订的条件判定覆盖的测试数据自动生成方法,所述 步骤S5包括:
[0028] S51 :计算分支节点B的各关联路径k上位于分支节点B之前(含B)的各个分支 节点中各分支函数的可行区间Dk, i;j ;
[0029] S52 :合并每个分支节点内的各分支函数的可行区间Dk,i;j得到各分支节点的可行 区间D k;i ;
[0030] S53 :合并最远公共分支节点mk前的各分支节点的可行区间Dti得到分支节点B在 关联路径k上的可行区间I k。
[0031] S54 :合并分支节点B在各关联路径k上的可行区间Ik,得到分支节点B的可行区 间I。
[0032] 进一步,根据本发明的面向修订的条件判定覆盖的测试数据自动生成方法,所述 可行区间I = ΙΛ,12, . . .,IJ,其中,S为输入变量的个数,Ii为第i个输入变量的可行区 间,Ii = Uu,Ii,2,. . .,,其中,为第i个输入变量第j个可行分段区间,Mi为第i 个输入变量可行分段区间数,所述步骤S6中,当Mi为1时,从Ii为第i个输入变量的可行 区间的唯一分段区间Iu的扩展区间中随机取值构建测试数据。
[0033] -种机器可读介质,该可读介质上存储有指令集合,当该指令集合被执行时,使得 该机器可执行上述面向修订的条件判定覆盖的测试数据自动生成方法。
[0034] 本发明的技术效果如下:
[0035] 1、本发明方法无需分析程序路径上各语句之间的数据依赖关系,采用动态执行的 方式,自动确定分支谓词的线性拟合函数,效率高。
[0036] 2、能有效地处理路径中的非线性约束条件,并采用动态步长扩张的方式,很好的 解决动态方法容易陷入局部最优点而无法发现可行的输入的问题。
[0037] 3、能有效地处理路径中的复合条件约束,将复合条件谓词等价转换成分支函数分 组,利用线性拟合函数快速的确定输入变量的可用取值区间。
[0038] 4、约束求解器采用线性拟合的方法求解约束系统,充分利用线性拟合函数简单 易用的优点;如果分支函数关于输入变量是线性的,则获得的线性拟合函数与函数本身完 全吻合,如果分支函数关于输入变量是非线性的,则综合在各个区间上得到的线性拟合函 数,可以估算分支函数的大致情况,随着程序的不断执行,用于函数赋值的数据越多,估算 得到的函数信息就越精确。理论上,当计算拟合函数的区间足够小时,获得的线性拟合函数 就能足够贴近函数的真实情况,对自动生成准确的测试数据就更有指导意义。
[0039] 5、本发明方法高度自动化,能够尽可能的提高单元测试的效率,降低测试成本。
[0040] 6、本发明方法能够很好的支持面向修改的条件/判定的测试覆盖准则。

【专利附图】

【附图说明】
[0041] 图1是本发明待测源程序代码例子。
[0042] 图2是本发明步骤S3的流程图。

【具体实施方式】
[0043] 下面结合说明书附图对本发明做进一步详细说明。
[0044] -、CLFF测试数据自动生成方法的基本原理
[0045] CLFF测试数据自动生成方法,即基于线性拟合函数驱动的测试数据自动生成算 法,是线性拟合技术在测试数据自动生成中的应用。具体来说,首先对待测源程序进行词法 分析、语法分析及语义分析后获得待测源程序所有路径和所有分支节点,然后针对每个分 支节点单独生成一套测试数据(测试用例)使得该测试数据能够覆盖该节点的判定及判定 中各个条件的所有可能取值以及表明各条件独立影响判定,每个分支节点对应一套测试数 据,测试源程序的所有分支节点能够得到测试数据集。
[0046] 在为某分支节点生成测试数据时,首先随机生成一输入数据,然后根据该输入数 据执行待测源程序,分析其执行结果,根据执行结果通过线性拟合后构造新的测试数据,然 后根据新的测试数据执行待测源程序,分析其执行结果,再根据执行结果通过线性拟合后 构造新的测试数据,重复上述步骤直到存在一组测试数据能够覆盖该分支节点的判定及判 定中各个条件的所有取值组合以及表明各条件独立影响判定。此外,这里还存在被分析的 分支节点永远无法覆盖判定/条件的所有取值组合或无法表明所有的条件都独立影响判 定,在这种情形下,通过对循环计数直到循环次数达到某一限值时停止,然后将能够覆盖该 分支节点的判定及判定中条件某一种取值的输入数据作为测试数据返回。
[0047] 因此,本发明的重点在于,如何根据执行结果进行线性拟合以及如何根据线性拟 合构造新的测试数据。
[0048] 二、构建分支函数
[0049] 本发明的步骤S1为根据所述分支节点B的关联路径集中每条路径上位于B之前 (含B)的各分支节点的各个条件,构建关于输入变量向量X的分支函数F k^_(X)。这个步 骤简称为构建分支函数。
[0050] 分支节点的关联路径集:经过分支节点的路径的集合。
[0051] 条件有两种,一种是布尔表达式:Bool (X);对于布尔表达式,分支函数Fj^jCX) =Β〇〇1(Χ)。另一种是包含条件运算符的条件,表示为:L(X)rel R(X),rel e { >,彡, =,尹,<,<};这里rel表示条件运算符,L(X)表示条件运算符左侧的表达式,R(X) 表示条件运算符右侧的表达式,那么,分支函数F k^_(X) =L(X) - R(X)。也就是说,分支 函数是条件的规范表示,任何条件都可以表示成如下格式:Fk^(X)re10, rel e { >,彡, =,尹,<,<}。通常每个分支节点上包含多个条件,进行条件的规范表示后,与所述 分支节点B关联的路径k上第i个分支节点的逻辑表达式可以表示成:c k, i = Fk, Μ (X) 代110<^1?15,1, 2(乂)代120(^2...(^_1?15, 1,;3(乂)代1;30,这里(^表示与(六11(1)或或(〇1')的逻辑运 算符,s表示路径k上第i个分支节点上条件的数量。
[0052] 除了上述的规范表示外,构建的分支函数还有一个参数的映射过程,也就是将分 支函数F k^_(X)的参数映射至输入变量的向量X中使得分支函数Fk^_(X)是关于输入变 量向量X的函数。对于特定的路径k,分支函数F k^_(X)与输入变量向量X之间的函数关 系是确定的。如图1所示,由C语言编写的example源代码中,总共有6条路径:分别为 : 路径 1 :P1 - C1 - P2 - C2 - P4 - P6 ;路径 2 :P1 - C1 - P2 - C2 - C3 - P5 - P6 ; 路径 3 :P1 - Cl - P2 - C2 - C3 - P6 ;路径 4 :P1 - Cl - P3 - C2 - P4 - P6 ;路径 5 : P1 - Cl - P3 - C2 - C3 - P5 - P6 ;路径 6 :P1 - Cl - P3 - C2 - C3 - P6。程序中一 共有三个分支节点:Cl,C2, C3。与分支节点Cl关联的路径集:路径1,2, 3,4, 5,6 ;与分支 节点C2关联的路径集:路径1,2,3,4, 5,6 ;与分支节点C3关联的路径集:路径2,3,5,6。 example函数有3个输入分别为a,b,c,其中C2分支节点的条件为d+e>100,在路径确定的 情形下,d和e相对于a, b, c的输入是确定的,可以表示成d = D(a, b, c)和e = E(a, b, c), 则该条件的分支函数定义为= D(X) - E(X),X = {a, b,c}。由此,对于任一输入 x= {ax,bx,cx},分支函数Fk^(X)均能直接计算得到一具体的函数值。以路径4为例,d =(a - b)*2, e = b,由此可以得到C2分支节点的唯--个条件的分支函数F4,2>1 (a, b, c) =d+e - 100 = (a - b) *2+b - 100 = 2*a - b - 100。以路径 2 为例,d = (a - b) *2, e =d = (a - b)*2,由此可以得到C2分支节点的唯--个条件的分支函数F2,2>1 (a, b, c)= d+e - 100 = (a - b)*4 - 100。也就是说,不同路径下,同样分支节点的同样条件的分支 函数可能不同。但在确定了的路径下,分支函数关于输入变量的函数是确定了的。
[0053] 本步骤的输入是待测源程序在分支节点B的关联路径集上每一路径中位于B之前 (含B)的各分支节点的各个条件,输出是相应条件的分支函数F k^(X)。这里X为输入变 量向量,由待测源程序输入变量构成的向量。分支函数Fk^_(X)表示路径k上第i个分支 节点的第j个条件的分支函数,i和j的取值范围取决于分支节点所在路径上的分支节点 数和各个分支节点上的条件数。
[0054] 需要说明的是,这里路径是由对待测源程序进行词法分析、语法分析及语义分析, 最终分析得到待测试源程序程序路径集中的某一条路径,所述分支节点B是由程序路径集 中所有路径的分支节点组成的程序分支节点集中的某一个分支节点。本领域技术人员理 解,对待测源程序进行词法分析、语法分析属于现有技术,其具体实现细节也不是本发明所 要讨论的主题范畴。本领域技术人员还可以理解,在对待测源程序进行词法分析、语法分析 及语义分析后,可以首先对待测源程序所有分支节点的各个条件构建分支函数,得到一个 总的分支函数集,然后根据与分支节点B关联的路径集上每一条路径中位于B之前(含B) 的分支节点从这个总的分支函数集中选取相应的分支函数即可。
[0055] 三、构建初始的输入向量集
[0056] 本步骤即为前述的步骤S2。
[0057] 由于本发明通过线性拟合构建可行区间,然后从可行区间内选取测试数据。而线 性拟合至少需要两个数据样本。因此,在构建初始的输入向量集U时,初始的输入向量集U 至少包含两个输入向量。这里,输入向量对应前述的输入变量向量X。输入向量的每个兀素 为对应着待测源程序相应的输入变量的具体的值。初始的输入向量集U内的输入向量由随 机生成,输入向量内的每个元素由随机生成。为更好的实现本发明的线性拟合。本发明中 优先采用如下方法构建初始的输入向量集U:
[0058] 初始的输入向量集U包含Ni+Ι个输入向量,Ni为输入变量的个数;初始的 输入向量集 u = {u。,Up u2, · · ·,uNi},其中 Ui = {Uu,Uu,屮,2, · · ·,Uw}。在这 Ni+1 个输入向量中,其中第一个输入向量,即输入向量UQ为随机生成。1^与11。满足关系: Γ Uj ^ = Uq > Φ j 吨如 2 ,其中 i,j e {l,2,...,Ni} Uq j9 ~ J
[0059] 这样设计的好处是,对于某个分支函数Fy (X)进行线性拟合时,每个输入变量可 以分别进行,而避免多元线性拟合,同时所有的变量都能得到进行有效的线性拟合的数据。 以前述例子的路径4为例,C2节点的分支函数为F 4,2;1 = 2*a - b - 100。假设输入向量 集的四个输入向量分别为:uQ = {0,一 3,一 2},屮={4,一 3,一 2},u2 = {0, 9,一 2},u3 ={0,一3,7}。其中,输入向量如七中,输入变量b和c的取值相同,分别为一3和一2, 此时,可以构建关于输入变量a的线性拟合函数LF^Ja) =2*a -97。同理,根据输入向 量11。,112可以构建关于输入变量b的线性拟合函数LF4, 2;1(b) = - l*b - 100。
[0060] 四、执行代码与统计
[0061] 本步骤即为前述的步骤S3。
[0062] 本步骤的输入为:输入向量集U、分支节点B的关联路径集和待测源程序。输出为: 各个输入向量对应的分支节点B的关联路径集中各路径k上位于分支节点B之前(含B) 的各分支节点的各个分支函数F k^_⑴的值构成的集合V,以及与路径k的最远公共路径分 支节点mk。
[0063] 具体的过程可通过图2所示的流程实现,包括步骤S31、S32、S33、S34。
[0064] S31,从输入向量集U获取未执行的输入向量ut。步骤S3?S6是迭代循环的过 程。输入向量集U随着迭代循环过程变化,迭代循环的第一次迭代的输入为初始的输入向 量集U,初始的输入向量集U由前述步骤S2获得。由于第η次迭代过程与前几次迭代过程 有所重复,即第η次迭代过程的输入向量集U中部分输入向量已经由前几次迭代过程执行 了步骤S33。考虑处理效率,这部分重复的输入向量不需要重复再执行步骤S33。因此,只 需要从输入向量集U中选取那些未执行的输入向量执行步骤S33即可。
[0065] S32,判断未执行的输入向量七是否存在。该步骤是S31的延伸的判断步骤。假 如未执行的输入向量ut不存在,表示输入向量集U中每个输入向量均执行了步骤S33,则执 行步骤S34。假如未执行的输入向量ut存在,则对该输入向量ut执行步骤S33。
[0066] S33,根据ut执行待测源代码得到执行的路径和分支节点B的各关联路径k的公 共分支节点mk, t,并计算关联路径k上位于分支节点B之前(含B)各分支节点的分支函数 Fk,u(X)的值。这里的执行待测源代码可以是模拟执行。一种实施方法是通过插桩的方式, 在待测源代码中植入插桩代码。插桩代码可以监视待测源代码每一步执行的结果以及执行 待测源代码的经过的路径。第二种实施方法是直接计算分支节点B的各关联路径k上位于 分支节点B之前(含B)各分支节点的分支函数F k^(X)值,然后根据分支函数Fk^(X)对 应的条件cti分析其执行的路径P t。在第一种实施方法下,包括三个步骤:植入插桩代码,执 行待测源程序,计算分支节点B的关联路径集中各路径k上位于B之前(含B)的各分支节 点的分支函数F k^_(X)的值。而第二种实施方法下,执行待测源程序和计算分支节点B的关 联路径集中各路径k上位于B之前(含B)的各分支节点的分支函数F k^_(X)的值可以一步 完成。因此本发明优先采用第二种实施方法。任一输入向量ut执行待测源代码后,可以得到 所执行的路径P t与分支节点B的关联路径集中路径k的公共分支节点mk,t。对于输入向量 集U = ,…,uKU}而言,可以关联路径k的公共分支节点集Mk = {π^,π^,…,mk,TU}, 以及分支函数Fu,」⑴的值的集合V= {V1,V2,...,Vτu}。这里的TU表示输入向量集U中 元素的个数。这里的公共分支节点叫^(其中,te {1,2,...,KU})为分支节点下标的表示 的输入向量ut在路径k下的最远公共分节点。输入向量u t在路径k下的公共分支节点是根 据输入向量ut执行待测源代码后所执行的路径Pt与路径k重叠的部分中最后一个分支节 点。相应地,计算B的关联路径k上的分支函数F k^_ (X)的值也是指根据输入向量ut执行待 测源代码后所执行的路径Pt与路径k重叠部分的分支节点的各条件中的分支函数F k^_ (X)

【权利要求】
1. 一种面向修订的条件判定覆盖的测试数据自动生成方法,包括分析待测源程序获得 待测源程序所有路径的集合和所有分支节点的集合BS以及分支节点的关联路径集的集合 的步骤,其特征在于,该方法还包括对分支节点集BS中的每一分支节点B执行以下步骤 : 51 :根据B的关联路径集中各路径上位于B(含B)之前的各分支节点的各个条件,构建 关于输入变量向量X的分支函数F k^_(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以及最远公共节点m k构建路径k上位于最远公共节点mk之前 (含mk)的每个分支节点的各分支函数的拟合函数LF k^ ;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, · · ·,ι^,Μ};输入 U: = Un ,> ^ j 向量UQ为随机生成,Ui与uQ满足关系:j ' ,,其中i, j e {1, 2, · · ·, Ni}。
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以及最远公共节点mk构建坐标集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)的各个分支节点 中各分支函数的可行区间D k,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 =Uu,Ii,2, ...,,其中,为第i个输入变量第j个可行分段区间,Mi为第i个输 入变量可行分段区间数,其特征在于,所述步骤S6中,当Mi为1时,从^为第i个输入变 量的可行区间的唯一分段区间Iu的扩展区间中随机取值构建测试数据。
7. -种机器可读介质,其特征在于,该可读介质上存储有指令集合,当该指令集合被执 行时,使得该机器可执行权利要求1至6中任一项权利要求所述的面向修订的条件判定覆 盖的测试数据自动生成方法。
【文档编号】G06F11/36GK104050082SQ201410271281
【公开日】2014年9月17日 申请日期:2014年6月17日 优先权日:2014年6月17日
【发明者】陈鑫, 欧建生, 成新, 周岩, 鞠秀芳 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1