当前位置: 首页 > 专利查询>南京大学专利>正文

一种线性拟合函数驱动的测试数据自动生成方法技术

技术编号:15398479 阅读:65 留言:0更新日期:2017-05-22 14:06
本发明专利技术公开了一种基于线性拟合函数驱动的测试数据自动生成方法。本发明专利技术通过路径分析得到路径集合,然后对每个路径寻找可覆盖该路径的测试数据产生待测源代码的测试数据集。其中,对每个路径寻找可覆盖该路径的测试数据通过以下方法实现:首先通过随机方法构建输入向量集,然后对输入向量集的运行分析,再通过线性拟合的手段扩展输入向量集,经重复迭代,获得可覆盖该路径的测试数据。本发明专利技术方法高度自动化,能够尽可能的提高单元测试的效率,降低测试成本,并且支持面向路径的测试覆盖准则。

A method of automatic generation of test data driven by linear fitting function

The invention discloses a test data automatic generation method driven by a linear fitting function. The invention obtains a path set by path analysis, then searches each path for test data that can cover the path, and generates a test data set for the source code to be tested. Among them, for each path for test data can cover the path through the following steps: firstly, through the method of constructing random input vectors, then analysis of the input vector set operation, then the input vector set by linear fitting method, through repeated iteration, test data obtained can cover the path. The method of the invention is highly automated, capable of improving the efficiency of unit testing as much as possible, reducing test costs, and supporting a path oriented test coverage criterion.

【技术实现步骤摘要】
一种线性拟合函数驱动的测试数据自动生成方法
本专利技术涉及一种测试数据自动生成方法,特别涉及自动化单元测试中路径覆盖测试的测试用例数据的生成方法。
技术介绍
测试技术是保障软件系统质量最重要和最有效的方法之一,一直以来也是工业界保证软件系统正确性最主要的手段。受计算能力和时间、空间资源的限制,测试无法穷尽软件所有可能的执行,实践中,各种测试充分度准则被用于驱动和评估测试过程。因此,面向给定的测试充分度准则,如何生成对应的测试用例集合,以驱动程序的执行覆盖相应的结构,成为测试过程中最关键的技术环节。目前测试用例的设计基本依靠人工手动完成,不仅费时费力,而且用例的有效性也难以得到保证。如何自动地为各种测试充分度准则生成有效的测试用例,已成为测试技术研究的热点问题之一。面向路径的测试覆盖准则,是应用较广泛的一种白箱测试充分度准则,它要求测试用例驱动程序沿着给定的路径执行。理论研究已经证明,不存在通用有效的算法可以为程序中任意路径生成测试输入。已有的研究工作可分为基于静态分析和基于动态执行两类方法。基于静态分析的方法无法有效的处理路径中的非线性约束条件,动态方法容易陷入局部最优点而无法发现可行的输入,它们在处理实际问题时存在很大的局限性。科学和工程问题中,通常可以采用诸如采样、实验等方法获得若干离散的数据,根据这些数据,我们往往希望得到一个逼近于实际函数或者更加密集的离散方程与已知数据相吻合,这个过程叫做拟合。线性拟合是比较简单的拟合方式,数据点使用直线进行连接,结果是一个多边形。线性拟合简单易用,它可以在比较短的时间内得到逼近函数,缩短了算法自动生成测试数据的前期工作量。
技术实现思路
本专利技术所要解决的问题是为待测试源程序自动构建测试数据(测试用例),使得在这些测试数据下执行待测试源程序能够覆盖该待测试源程序的所有路径,完成路径覆盖测试。为解决上述问题,本专利技术采用的方案如下:根据本专利技术的一种基于线性拟合函数驱动的测试数据自动生成方法,包括分析待测源程序获得待测源程序所有路径的路径集PS的步骤,该方法还包括对路径集PS中的每一路径P执行以下步骤:S1:根据所述路径P上的各分支节点的各个判断语句,构建关于输入变量向量X的分支函数Fi,j(X);所述输入变量向量X为所述待测源程序输入变量构成的向量;所述分支函数Fi,j(X)表示第i个分支节点的第j个判断语句的分支函数;S2:构建初始的输入向量集U;所述初始的输入向量集U至少包含两个输入向量;S3:计算以输入向量集U中每个输入向量作为待测源程序的输入执行待测源程序时所述路径P上的每个分支节点上的各分支函数Fi,j(X)获得分支函数值的集合V以及最远公共分支节点m;假如输入向量集U中存在一个输入向量执行待测源程序时覆盖所述路径P,则返回该输入向量作为所述路径P的测试数据;S4:根据各个分支节点上的各分支函数值的集合V以及最远公共分支节点m构建最远公共分支节点m前的每个分支节点中的各分支函数的线性拟合函数LFi,j;LFi,j表示第i个分支的第j个分支函数的线性拟合函数;S5:根据每个分支节点中的各分支函数的线性拟合函数LFi,j和待测源程序计算可行区间I;S6:在可行区间I内随机选取各输入变量的输入值得到测试数据集加入至输入向量集U中;S7:重复执行步骤S3至S6直到步骤S3至S6执行的次数达到限定的次数;S8:从输入向量集U中找出能够覆盖路径P最多分支的输入向量作为路径P的测试数据。进一步,根据本专利技术的基于线性拟合函数驱动的测试数据自动生成方法,所述步骤S2中所述的初始的输入向量集U包含Ni+1个输入向量,所述Ni为输入变量的个数;初始的输入向量集U={u0,u1,u2,...,uNi},其中ui={ui,1,ui,2,...,ui,Ni};输入向量u0为随机生成,ui与u0满足关系:其中i,j∈{1,2,...,Ni}。进一步,根据本专利技术的基于线性拟合函数驱动的测试数据自动生成方法,所述步骤S3包括:S31:从输入向量集U获取未执行的输入向量uk;S32:判断未执行的输入向量uk是否存在;假如不存在未执行的输入向量,则执行步骤S34;否则执行步骤S33;S33:根据uk执行待测源代码得到执行的路径和路径P的公共分支节点mk,并计算路径P上的分支函数Fi,j(X)的值,各个分支节点上的各分支函数Fi,j(X)的值构成集合V;S34:从{m1,m2,...,mKU}中选取最远公共分支节点m。进一步,根据本专利技术的基于线性拟合函数驱动的测试数据自动生成方法,所述步骤S4包括以下步骤:S41:输入向量集U和各个分支节点上的各分支函数值的集合V以及最远公共分支节点m构建最远公共分支节点m构建坐标集Vy,z,j={(u1,j,Fy,z(u1,j)),(u2,j,Fy,z(u2,j)),...,(uKU,j,Fy,z(uKU,j))};S42:以坐标集Vy,z,j={(u1,j,Fy,z(u1,j)),(u2,j,Fy,z(u2,j)),...,(uKU,j,Fy,z(uKU,j))}内两个相邻的坐标点构建Fy,z(xj)的线性拟合函数LFy,z(xj)=pj*xj+qj,得到参数集LFPQi,j={(p1,q1),(p2,q2),...,(pNi,qNi)};其中,Vy,z,j表示第y个节点第z个分支函数对应第j个输入变量的坐标集,其中y≤m;ui,j为输入向量集U中第i个输入向量的第j个输入变量的值;Fy,z(xj)为第y个节点第z个分支函数关于第j个输入变量的函数;LFy,z(xj)为第y个节点第z个分支函数关于第j个输入变量的线性拟合函数;LFPQi,j为第i个节点第j个分支函数的线性拟合函数的参数集。进一步,根据本专利技术的基于线性拟合函数驱动的测试数据自动生成方法,所述步骤S5包括:S51:计算各个分支节点中各分支函数的可行区间Di,j;S52:合并每个分支节点内的各分支函数的可行区间Di,j得到各分支节点的可行区间Di;S53:合并最远公共分支节点m前的各分支节点的可行区间Di得到可行区间I。进一步,根据本专利技术的基于线性拟合函数驱动的测试数据自动生成方法,所述可行区间I={I1,I2,...,Is},其中,s为输入变量的个数,Ii为第i个输入变量的可行区间,Ii={Ii,1,Ii,2,...,Ii,Mi},其中,Ii,j为第i个输入变量第j个可行分段区间,Mi为第i个输入变量可行分段区间数;所述步骤S6中,当Mi为1时,从Ii为第i个输入变量的可行区间的唯一分段区间Ii,1的扩展区间中随机取值构建测试数据。进一步,根据本专利技术的一种机器可读介质,该可读介质上存储有指令集合,当该指令集合被执行时,使得该机器可执行本专利技术的基于线性拟合函数驱动的测试数据自动生成方法。本专利技术的技术效果如下:1、本专利技术方法无需分析程序路径上各语句之间的数据依赖关系,采用动态执行的方式,自动确定分支谓词的线性拟合函数,效率高。2、能有效地处理路径中的非线性约束条件,并采用动态步长扩张的方式,很好的解决动态方法容易陷入局部最优点而无法发现可行的输入的问题。3、能有效地处理路径中的复合条件约束,将复合条件谓词等价转换成分支函数分组,利用线性拟合函数快速的确定输入变量的可用取值区间。4、约束求解器本文档来自技高网
...
一种线性拟合函数驱动的测试数据自动生成方法

【技术保护点】
一种基于线性拟合函数驱动的测试数据自动生成方法,包括分析待测源程序获得待测源程序所有路径的路径集PS的步骤,其特征在于,该方法还包括对路径集PS中的每一路径P执行以下步骤:S1:根据所述路径P上的各分支节点的各个判断语句,构建关于输入变量向量X的分支函数F

【技术特征摘要】
1.一种基于线性拟合函数驱动的测试数据自动生成方法,包括分析待测源程序获得待测源程序所有路径的路径集PS的步骤,其特征在于,该方法还包括对路径集PS中的每一路径P执行以下步骤:S1:根据所述路径P上的各分支节点的各个判断语句,构建关于输入变量向量X的分支函数Fi,j(X);所述输入变量向量X为所述待测源程序输入变量构成的向量;所述分支函数Fi,j(X)表示第i个分支节点的第j个判断语句的分支函数;S2:构建初始的输入向量集U;所述初始的输入向量集U至少包含两个输入向量;S3:计算以输入向量集U中每个输入向量作为待测源程序的输入执行待测源程序时所述路径P上的每个分支节点上的各分支函数Fi,j(X)获得分支函数值的集合V以及最远公共分支节点m;假如输入向量集U中存在一个输入向量执行待测源程序时覆盖所述路径P,则返回该输入向量作为所述路径P的测试数据;S4:根据各个分支节点上的各分支函数值的集合V以及最远公共分支节点m构建最远公共分支节点m前的每个分支节点中的各分支函数的线性拟合函数LFi,j;LFi,j表示第i个分支的第j个分支函数的线性拟合函数;S5:根据每个分支节点中的各分支函数的线性拟合函数LFi,j和待测源程序计算可行区间I;S6:在可行区间I内随机选取各输入变量的输入值得到测试数据集加入至输入向量集U中;S7:重复执行步骤S3至S6直到步骤S3至S6执行的次数达到限定的次数;S8:从输入向量集U中找出能够覆盖路径P最多分支的输入向量作为路径P的测试数据;所述步骤S5包括如下步骤:S51:计算各个分支节点中各分支函数的可行区间Di,j;S52:合并每个分支节点内的各分支函数的可行区间Di,j得到各分支节点的可行区间Di;S53:合并最远公共分支节点m前的各分支节点的可行区间Di得到可行区间I;所述可行区间I={I1,I2,...,Is},其中,s为输入变量的个数,Ii为第i个输入变量的可行区间,Ii={Ii,1,Ii,2,...,Ii,Mi},其中,Ii,j为第i个输入变量第j个可行分段区间,Mi为第i个输入变量可行分段区间数,所述步骤S6中,当Mi为1时,从Ii为第i个输入变量的可行区间的唯一分段区间Ii,1的扩展区间中随机取值构建测试数据。2.如权利要求1所述的基于线性拟合函数驱动的测试数据自动生成方法,其特征在于,所述步骤S2中...

【专利技术属性】
技术研发人员:陈鑫成新欧建生周岩鞠秀芳
申请(专利权)人:南京大学
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1