首页 / 专利库 / 软件 / 黑盒测试 / 一种面向路径的测试数据自动生成方法

一种面向路径的测试数据自动生成方法

阅读:685发布:2020-08-17

专利汇可以提供一种面向路径的测试数据自动生成方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种面向路径的测试数据自动生成方法,目的是提出一种无数据依赖关系分析的能够用于白盒、黑盒的测试数据自动生成的方法。本发明约束构造器根据当前程序输入和各输入变量的增量执行路径W上的语句,不分析W上的语句之间的数据依赖关系,构造W上各谓词函数的线性算术表示,然后建立输入变量的线性约束系统;约束求解器采用线性规划、线性整数规划、线性混合整数规划和最小二乘解法相结合的方法求解线性约束系统,经过若干次 迭代 寻找所需的测试数据。本发明构造线性约束系统的效率高,生成测试数据的能 力 强,既能用于 白盒测试 ,又能用于 黑盒测试 ;通用性和可移植性好,适用范围广。,下面是一种面向路径的测试数据自动生成方法专利的具体信息内容。

1.一种面向路径的测试数据自动生成方法,由输入接口、词法分析器、 语法分析器、约束构造器、约束求解器、路径满足检查器、输出接 口模实现测试数据自动生成,其特征在于其实现步骤是:
[1]用户从输入接口指定程度路径W、各输入变量的初值和增量以及其它 参数值,如W上的所有谓词函数是否均为输入变量的线性函数,当W 上的某谓词函数为输入变量的非线性函数时迭代求解的次数上限、以 及当W上存在黑盒且黑盒中包含输入语句时,根据黑盒的接口规范所 规定的黑盒中的输入变量的个数及各输入变量的数据类型;
[2]词法分析器对W进行词法分析后,语法分析器根据词法分析的结果对 W进行语法分析,对W转换为约束构造程序和路径满足检查程序,约 束构造程序经编译产生约束构造器,路径满足检查程序经编译产生路 径满足检查器;
[3]约束构造器根据当前程序输入和各输入变量的增量执行W上的语句, 不分析W上的语句之间的数据依赖关系,构造W上各谓词函数的线性 算术表示,然后建立输入变量的线性约束系统;
[4]约束求解器采用线性规划、线性整数规划、线性混合整数规划和最小 二乘解法相结合的方法求解该线性约束系统:若W上的谓词函数均为 输入变量的线性函数,则采用线性规划、线性整数规划、线性混合整 数规划方法求解;若W上的谓词函数中含有输入变量的非线性函数, 则先采用线性规划、线性整数规划、线性混合整数规划方法求解,若 无法找到解,则将该线性约束系统转换为线性方程系统,求它的最小 二乘解;求解后获得新的程序输入即测试数据;最后由路径满足检查 器进行检查,若该程序输入能使W被经过则结束,若该程序输入不能 使W被经过则根据W上所有谓词函数是否为输入变量的线性函数以及 迭代次数上限决定是否继续迭代求解;求解结果由输出接口输出。
2.权利要求1所述的一种面向路径的测试数据自动生成方法,其特征在 于所述约束构造器构造W上各谓词函数的线性算术表示的方法是:用 户输入程序路径W、输入变量的初值 X=和输入变量的增量 Y=;对于W上的m个谓词结点n1,Λ,nm,依次令ni的谓词函 数的线性算术表示为L(i, X, Y,W)=di1v1+Λ+ditv1+ci,按照X依次执 行W上的ni之前的除谓词结点之外的语句,计算ni的谓词函数 值Poldi,并且令ci=Poldi,其中i=1,K,m;然后计算各线性算术表示的 系数值和常数项,计算方法是:对于W上的t个输入变量v1Λ,vt的初 值x1,Λ,x1,依次将第j个输入变量vi的值xj与其增量yj相加,其余输 入变量的值保持不变,将新的输入记作 Z,然后按照 Z依次执行W上 的ni之前的除谓词结点之外的语句,计算ni的谓词函数值Pnewij,并 且令dij=(Pnewij-Poldi)/yj,ci=ci-dij×xj,其中i=1,K,m,j=1,K,t;然 后建立输入变量的线性约束系统:如果谓词结点ni的分支谓词F?0的 值应该为“真”,那么由ni的谓词函数的线性算术表示L(i, X, Y,W)建立 的线性约束为L(i, X, Y,W)?0,其中的关系操作符与F?0中的相同;如 果谓词结点ni的分支谓词F?0的值应该为“假”,那么由ni的谓词函数 的线性算术表示L(i, X, Y,W)建立的线性约束为L(i, X, Y,W)??0,其中 的关系操作符“??”与F?0中的“?”相反,即当“?”为“>”时,“??” 为“≤”;当“?”为“≥”时,“??”为“<”;当“?”为“<”时,“??” 为“≥”;当“?”为“≥”时,“??”为“<”;当“?”为“=”时,“??” 为“≠”,即(L(i, X, Y,W)>0)∨(L(i, X, Y,W)<0)。
3.如权利要求1所述的一种面向路径的测试数据自动生成方法,其特征 在于所述线性规划、线性整数规划、线性混合整数规划和最小二乘解 法相结合的方法求解线性约束系统的过程是:
3.1若W上的谓词函数均为输入变量的线性函数,并且线性规划、线性 整数规划、线性混合整数规划方法找到解,则由路径满足检查器进 行检查,若该解能使W被经过则从输出接口输出解,然后结束;若 该解不能使W被经过则从输出接口给出求解精度可能不够的警告, 然后结束;
3.2若W上的谓词函数均为输入变量的线性函数,所有输入变量均无整 数限制,并且线性规划方法找不到解,则从输出接口给出W不可行 的结论,然后结束;
3.3若W上的谓词函数均为输入变量的线性函数,某输入变量有整数限 制,并且线性整数规划、线性混合整数规划方法找不到解,则从输 出接口给出W可能不可行的结论,然后结束;
3.4若W上的某谓词函数为输入变量的非线性函数,则先采用线性规划、 线性整数规划、线性混合整数规划方法求解,若找到解,则由路径 满足检查器进行检查,若该解能使W被经过则从输出接口输出解, 然后结束;若该解不能使W被经过,并且当前迭代次数 已经达到迭代次数上限,则从输出接口给出W可能不可行的结论, 然后结束;若该解不能使W被经过,并且当前迭代次数尚未达到迭 代次数上限,则当前迭代次数加一,将该解作为新的当前程序输入, 转第[3]步进行下次迭代;
3.5若W上的谓词函数中含有输入变量的非线性函数,则先采用线性规 划、线性整数规划、线性混合整数规划方法求解,若找不到解,则 将该线性约束系统转换为线性方程系统,求它的最小二乘解;由路 径满足检查器进行检查,若该最小二乘解能使W被经过则从输出接 口输出该最小二乘解,然后结束;若该最小二乘解不能使W被经过, 并且当前迭代次数已经达到迭代次数上限,则从输出接口给出W可 能不可行的结论,然后结束;若该最小二乘解不能使W被经过,并 且当前迭代次数尚未达到迭代次数上限,则当前迭代次数加一,将 最小二乘解作为新的当前程序输入,转第[3]步进行下次迭代。

说明书全文

技术领域:本发明涉及计算机软件测试中为指定的程序路径自动生成 测试数据的方法,尤其是指定的程序路径中包括函数调用或者可执行程序 调用时的测试数据自动生成方法。

背景技术:计算机及软件在国民经济和社会生活等方面的应用越来越 广泛和深入。人们在开发软件的过程中难免会引入错误。软件测试是揭示 软件错误的重要手段。在软件测试中,面向路径的测试数据生成问题可以 描述为:给定一个程序P和P中一条路径W,设P的输入空间为D,求 x∈D, 使得P以 x为输入运行,所经过的路径为W。软件测试中的控制流测试中 诸如语句覆盖、分支覆盖、条件覆盖、判定-条件覆盖、路径覆盖等问题, 数据流测试中的定义覆盖、引用覆盖等问题,组装测试中的调用对覆盖、 数据流测试等问题,以及面向断言的测试和回归测试中的一些问题都可以 归结为该问题。目前,测试人员一般采用手工方法寻找 x。自动求解面向 路径的测试数据将有效地提高软件测试的效率和质量

解决面向路径的测试数据生成的关键在于约束系统的建立和求解。建 立约束系统的困难是分析、化简路径W上的各种语句成分和各种数据类型, 建立尽可能简洁的约束系统;求解约束系统的主要困难是处理可能存在的 非线性约束。Matiyasevic和E.J.Weyuker等人的研究表明:不存在通 用的有效的算法,对于任意的P和W,能生成使W被经过的程序输入。但 是实际应用的需要迫使人们进行研究,并提出各种方法求解该问题。

对于某种面向路径的测试数据生成方法,当W上存在函数调用或者可 执行程序调用,但是没有提供被调用的函数或程序的源代码,只是给出该 函数编译后的目标代码或程序编译后的可执行代码,且后面的谓词函数对 这些目标代码或可执行代码存在数据依赖关系,此时,若该方法仍能生成 测试数据,则称该方法能够用于黑盒测试,否则称该方法不能用于黑盒测 试。

目前,国内外面向路径的测试数据生成方法可分为四类:随机法、试 探法、静态法和动态法。随机法实质上是困难的。试探法主要包括遗传算 法和模拟退火法两种。遗传算法本身很复杂,其理论研究目前相当有限, 结果也不太深入,作为遗传算法的理论基石之一的隐性并行性的证明还存 在严重缺陷。模拟退火法的收敛速度很缓慢。静态法包括符号执行法和区 间算术法,它们都需要对W上的语句进行转换,故不能用于黑盒测试。符 号执行方法通常要进行复杂的代数运算,且难于处理依赖于输入变量的循 环条件、数组元素下标和函数调用。区间算术法需要对变量的取值区间进 行对分穷举,当变量的取值区间为无穷区间时,该方法也是困难的。动态 法可分为直线式程序法和Bogdan Korel、M.Gallagher等人、Neelam Gupta 等人分别提出的方法等几种。直线式程序法要求用户先提供所有整数类型 的变量值,并且在数值优化过程有可能陷于局部极值。Bogdan Korel和 M.Gallagher等人分别提出的方法一次只考虑一个分支谓词和一个输入变 量,且使用回溯技术,迭代次数多,资源消耗大;且Bogdan Korel提出的 方法为了减小搜索的盲目性,需要采用动态数据流分析技术确定影响分支 谓词的变量,不能用于黑盒测试。

Neelam Gupta等人于1998年在ACM SIGSOFT第六届软件工程基础国 际研讨会的论文集(Proceedings of the ACM SIGSOFT Sixth International Symposium on the Foundations of Software Engineering)上发表的论 文“Automated test data generation using an iterative relaxation method”中提出一种动态方法,从程序输入空间D中任选一组程序输入考 察W上各分支谓词,通过静态、动态数据流分析确定各谓词函数对于输入 变量的依赖关系,构造谓词片和动态切片,建立这些谓词函数关于当前输 入的线性算术表示,然后建立输入变量的增量的线性约束系统,进而建立 输入变量的增量的线性方程系统,采用高斯消去法求解后得到各输入变量 的增量,从而获得一组新的程序输入。

该方法在构造线性约束系统的过程中必须分析W上各语句之间的静 态、动态数据依赖关系,故构造线性约束系统的效率较低,求解问题的能 较弱,不能用于黑盒测试:当W上有循环语句时,必须指明该循环的循 环体执行的次数,并将循环在W上展开;当W上存在函数调用时,需要采 用类似宏替换的方法用实参替换被调用的函数体中的形参,将被调用的函 数体在调用处展开。该方法不允许W上有goto语句;且该方法采用高斯消 去法求解所建立的线性方程系统存在以下缺点:若自由变量取值不适当, 可能导致线性方程系统不相容。

Neelam Gupta等人于1999年在IEEE第十四届自动化软件工程国际会 议的论文集(Proceedings of The 14th IEEE Interantional Conference on Automated Software Engineering)上发表的论文“UNA based iterative test data generation and its evaluation”中提出基于最小二乘解的约 束求解方法,克服了基于高斯消去法的约束求解方法的缺点,但仍存在以 下缺点:(1)存在这样的线性混合整数规划问题,至少有一组解,但是基 于最小二乘解的约束求解方法找不到;(2)对于所有规模的问题,基于最 小二乘解的约束求解方法寻找实数值解的迭代算法在最坏情况下不收敛。

Jon Edvardsson等人于2001年在第八届欧洲软件工程会议与ACM SIGSOFT第九届软件工程基础国际研讨会的联合会议的论文集 (Proceedings of The Joint 8th European Software Engineering Conference and 9th ACM SIGSOFT Symposium on the Foundations of Software Engineering)上发表的论文“Analysis of the constraint solver in UNA based test data generation”中提出的基于线性规划、 线性整数规划、线性混合整数规划的约束求解方法可以克服基于最小二乘 解的约束求解方法的缺点。但是基于线性规划、线性整数规划、线性混合 整数规划的约束求解方法仍存在以下缺点:存在可行的W,并且W上某些 谓词函数中含有输入变量的非线性函数,由于采用线性算术表示对谓词函 数进行线性化,根据某些初始程序输入建立的线性约束系统转化为一个矛 盾的线性方程系统,如果采用基于线性规划、线性整数规划、线性混合整 数规划的约束求解方法,则无法生成相应的测试数据。此外,人们在建立 约束系统后,还研究了一些其它的约束求解方法,效果均不理想。

发明内容:本发明所要解决的技术问题就是针对现有的面向路径W测 试数据自动生成方法的不足,提出一种新的测试数据自动生成方法,无须 分析W上各语句之间的数据依赖关系,通过计算W上各谓词函数的线性算 术表示,为输入变量建立线性约束系统,采用线性规划、线性整数规划、 线性混合整数规划和最小二乘解法相结合的约束求解方法,经过若干次迭 代寻找所需的测试数据,该方法既能用于白盒测试,又能用于黑盒测试。

本发明的技术方案是:本发明由输入接口、词法分析器、语法分析器、 约束构造器、约束求解器、路径满足检查器、输出接口模实现测试数据 自动生成。本发明总体逻辑结构是:用户指定程序路径W,词法分析器对W 进行词法分析后,语法分析器根据词法分析的结果对W进行语法分析,将 W转换为约束构造程序和路径满足检查程序,约束构造程序经编译产生约 束构造器,路径满足检查程序经编译产生路径满足检查器;约束构造器根 据当前程序输入和各输入变量的增量执行W上的语句,不分析W上的语句 之间的数据依赖关系,构造W上各谓词函数的线性算术表示,然后建立输 入变量的线性约束系统;约束求解器采用线性规划、线性整数规划、线性 混合整数规划和最小二乘解法相结合的方法求解线性约束系统:若W上的 谓词函数均为输入变量的线性函数,则采用基于线性规划、线性整数规划、 线性混合整数规划方法求解,若W上的谓词函数中含有输入变量的非线性 函数,则采用线性规划、线性整数规划、线性混合整数规划和最小二乘解 法相结合的方法求解;求解后获得新的程序输入即测试数据;最后由路径 满足检查器进行检查,若该程序输入能使W被经过则结束,若该程序输入 不能使W被经过则根据W上所有谓词函数是否为输入变量的线性函数以及 迭代次数上限决定是否继续迭代求解;求解结果由输出接口输出。本发明 定义了以下四个名词:

定义1.分支谓词:程序路径W上具有明确取值要求的判断语句中的条件表 达式称为分支谓词。不失一般性,设分支谓词为Exp1?Exp2的形式,其中 Exp1?Exp2是关系表达式,Exp1和Exp2是算术表达式,?∈{>,≥,=,<,≤}。

循环语句可以转换为等价的用判断语句和转移语句表达的形式。当人 们关心W上的循环体的内部执行情况时,可以将循环展开。当人们不关心 循环体的内部执行情况时,可以直接将该循环作为一个黑盒放在W上,不 必将其展开。

当人们不关心W上判断语句是执行“真”分支还是“假”分支时,可 以直接将该判断语句作为一个黑盒放在W上。

定义2.谓词结点:称分支谓词所在的判断语句为谓词结点。

定义3.谓词函数:谓词结点的分支谓词Exp1?Exp2可被转换成等价的分支 谓词形式F?0,其中F为算术表达式Exp1-Exp2,称F为该谓词结点的谓词 函数。

定义4.线性算术表示:设ni为W上的谓词结点,并且 X=和 Y= 为程序输入和输入变量的增量,其中t为W上输入变量的个数, yi≠0,j=1,…,t,若ni的谓词函数为F,则称L(i, X, Y,W)=di1v1+…+ditvt+ci 为W上ni处F关于 X和 Y的线性算术表示,其中dij=(Pnewij-Poldi)/yj,ci= Poldi-di1×x1-…-dit×xt,Poldi和Pnewij分别为按照程序输入 X和 X +<0,…,0,yj,0,…,0>依次执行W上的ni之前的除谓词结点之外的语句,计 算F所得之值。

本发明允许程序中变量的数据类型为整数类型,实数类型,基本数据 类型为整数类型或实数类型的数组、结构等复合类型,以及指向上述各种 类型的指针类型。

如果程序中包含了布尔类型的变量,就将其转化为实数类型,用大于 或等于零的数表示“真”值,用负数表示“假”值。如果一条路径上的某 分支谓词中的条件表达式由两个或两个以上的布尔类型的变量的合取组成 (如A/B),那么就将这个分支谓词视同在经过该路径时必须同时满足的 多个分支谓词A≥0、B≥0。如果一条路径上的某分支谓词中的条件表达式 由两个或两个以上的布尔变量的析取组成(如A∨B),那么在该路径上一次 只取一个分支谓词A≥0或B≥0与其它分支谓词一起考虑。如果用其中的 一个没找到解,就试另一个。

若分支谓词为Exp1≠Exp2,则将其转化为等价的形式:(Exp1>Exp2) ∨(Exp1>Exp2),然后按与布尔类型的变量的析取类似的方法进行处理即可。

字符类型的变量的取值实质上是取值范围受限的整数值。对于字符类 型的变量,用ASCII字符集将字符类型的值映射为整数类型,并引入附加 的约束以限制它的整数解落在有效的取值范围内,然后用ASCII字符集将 整数解映射回相应的字符类型的值。按类似的方法可以处理枚举类型的变 量。

W中允许包括函数调用或者可执行程序调用,本发明将被调用的函数 或可执行程序视为黑盒,直接将调用语句放在W上。若黑盒中包含输入语 句,用户还需提供黑盒的接口规范规定的黑盒中的输入变量的个数及各输 入变量的数据类型。

本发明具体实现步骤是:

1.用户从输入接口指定程序路径W、各输入变量的初值和增量以及其它 参数值,如W上的所有谓词函数是否均为输入变量的线性函数,当W上 的某谓词函数为输入变量的非线性函数时迭代求解的次数上限、以及 当W上存在黑盒且黑盒中包含输入语句时,根据黑盒的接口规范所规 定的黑盒中的输入变量的个数及各输入变量的数据类型等。

2.词法分析器对W进行词法分析后,语法分析器根据词法分析的结果对 W进行语法分析,将W转换为约束构造程序和路径满足检查程序,约 束构造程序经编译产生约束构造器,路径满足检查程序经编译产生路 径满足检查器。

3.约束构造器根据当前程序输入和各输入变量的增量执行W上的语句, 构造W上各谓词函数的线性算术表示,方法是:用户输入程序路径W、 输入变量的初值 X=和输入变量的增量 Y=。对 于W上的m个谓词结点n1,…,nm,依次令ni的谓词函数的线性算术表 示为L(i, X, Y,W)=di1v1+…+ditvt+ci,按照 X依次执行W上的ni之前的 除谓词结点之外的语句,计算ni的谓词函数值Poldi,并且令ci=Poldi, 其中i=1,…,m。然后计算各线性算术表示的系数值和常数项,计算方法是: 对于W上的t个输入变量v1,…,vt的初值x1,…,xt,依次将第j个输入变量vj 的值xj与其增量yj相加,其余输入变量的值保持不变,将新的输入记作 Z,然后按照 Z依次执行W上的ni之前的除谓词结点之外的语句,计算ni 的谓词函数值Pnewij,并且令dij=(Pnewij-Poldi)/yj,ci=ci-dij×xj,其中 i=1,...,m,j=1,...,t。然后建立输入变量的线性约束系统:如果谓词结点 ni的分支谓词F?0的值应该为“真”,那么由ni的谓词函数的线性算术 表示L(i, X, Y,W)建立的线性约束为L(i, X, Y,W)?0,其中的关系操作符与 F?0中的相同;如果谓词结点ni的分支谓词F?0的值应该为“假”,那 么由ni的谓词函数的线性算术表示L(i, X, Y,W)建立的线性约束为 L(i, X, Y,W)??0,其中的关系操作符“??”与F?0中的“?”相反,即当 “?”为“>”时,“??”为“≤”;当“?”为“≥”时,“??”为“<”; 当“?”为“<”时,“??”为“≥”;当“?”为“≥”时,“??”为 “<”;当“?”为“=”时,“??”为“≠”,即(L(i, X, Y,W)>0)∨(L(i, X, Y,W)<0)。

4.约束求解器采用线性规划、线性整数规划、线性混合整数规划和最小二 乘解法相结合的方法求解该线性约束系统:若W上的谓词函数均为输入 变量的线性函数,则采用线性规划、线性整数规划、线性混合整数规划 方法求解;若W上的谓词函数中含有输入变量的非线性函数,则先采用 线性规划、线性整数规划、线性混合整数规划方法求解,若无法找到解, 则将该线性约束系统转换为线性方程系统,求它的最小二乘解。

4.1若W上的谓词函数均为输入变量的线性函数,并且线性规划、线 性整数规划、线性混合整数规划方法找到解,则由路径满足检查 器进行检查,若该解能使W被经过则从输出接口输出解,然后结 束;若该解不能使W被经过则从输出接口给出求解精度可能不够 的警告,然后结束。

4.2若W上的谓词函数均为输入变量的线性函数,所有输入变量均无 整数限制,并且线性规划方法找不到解,则从输出接口给出W不 可行的结论,然后结束。

4.3若W上的谓词函数均为输入变量的线性函数,某输入变量有整数 限制,并且线性整数规划、线性混合整数规划方法找不到解,则 从输出接口给出W可能不可行的结论,然后结束。

4.4若W上的某谓词函数为输入变量的非线性函数,则先采用线性规 划、线性整数规划、线性混合整数规划方法求解,若找到解,则 由路径满足检查器进行检查,若该解能使W被经过则从输出接口 输出解,然后结束;若该解不能使W被经过,并且当前迭代次数 已经达到迭代次数上限,则从输出接口给出W可能不可行的结论, 然后结束;若该解不能使W被经过,并且当前迭代次数尚未达到 迭代次数上限,则当前迭代次数加一,将该解作为新的当前程序 输入,转第3步进行下次迭代。

4.5若W上的谓词函数中含有输入变量的非线性函数,则先采用线性 规划、线性整数规划、线性混合整数规划方法求解,若找不到解, 则将该线性约束系统转换为线性方程系统,求它的最小二乘解。 由路径满足检查器进行检查,若该最小二乘解能使W被经过则从 输出接口输出该最小二乘解,然后结束;若该最小二乘解不能使 W被经过,并且当前迭代次数已经达到迭代次数上限,则从输出 接口给出W可能不可行的结论,然后结束;若该最小二乘解不能 使W被经过,并且当前迭代次数尚未达到迭代次数上限,则当前 迭代次数加一,将最小二乘解作为新的当前程序输入,转第3步 进行下次迭代。

采用本发明进行软件测试数据自动生成可以达到如下有益效果:

1.无须分析程序路径W上各语句之间的数据依赖关系,构造线性约束系统 的效率高,分析表明,Neelam Gupta等人提出的方法构造线性约束系统 的时间复杂性为O(k2·n+k·n·lmax·t),空间复杂性为O(k2·n),本发明构造 线性约束系统的时间复杂性和空间复杂性分别为O(k·t)和O(m·t),其中 k,n,lmax,t,m分别表示W上的语句个数、被定值变量个数(即输入变量个 数与被赋值变量个数之和)、各谓词结点的谓词片中语句个数的最大值、 输入变量个数和谓词结点个数,并且m≤k,t≤n。

2.无须分析程序路径W上各语句之间的数据依赖关系,生成测试数据的能 力强,不仅能够用于白盒测试,而且能够用于黑盒测试。当W上有循环 语句而且人们不关心循环体的内部执行情况时,本发明能够直接将该循 环作为一个黑盒放在W上,不必将其展开。当人们不关心W上判断语句 是执行“真”分支还是“假”分支时,本发明同样可以直接将该判断语 句作为一个黑盒放在W上。当W上存在函数调用或可执行程序调用时, 本发明可以将被调用的函数体或可执行程序视为黑盒,不必在调用处展 开,从而进一步提高了效率。本发明能够直接处理goto语句。

3.约束求解器采用线性规划、线性整数规划、线性混合整数规划和最小二 乘解法相结合的方法求解线性约束系统,结合了线性规划、线性整数规 划、线性混合整数规划和最小二乘解法的优点,通用性好,对于谓词函 数均为输入变量的线性函数或者谓词函数中含有输入变量的非线性函 数的一些程序路径能够有效地找到解。

4.当程序路径W上各谓词函数均为输入变量的线性函数且所有输入变量 均无整数限制时,迭代一次后,本发明或者能找到所需的测试数据, 或者保证该程序路径不可行。

5.可移植性好,不受程序设计语言和操作系统的限制,易于移植到各种 程序设计语言和操作系统。

6.适用范围广,能够用于单元测试、集成(组装)测试等阶段以及面向 断言的测试数据自动生成和回归测试数据的自动生成。

附图说明:

图1是本发明总体逻辑结构图。

图2是本发明的总流程图

图3是本发明构造线性算术表示的示意图。

图4是本发明求解线性约束系统的示意图。

具体实施方式:图1是本发明总体逻辑结构图。本发明由输入接口、 词法分析器、语法分析器、约束构造器、约束求解器、路径满足检查器、 输出接口模块实现测试数据自动生成。其总体逻辑结构是:用户指定程序 路径W,词法分析器对W进行词法分析后,语法分析器根据词法分析的结 果对W进行语法分析,将W转换为约束构造程序和路径满足检查程序,约 束构造程序经编译产生约束构造器,路径满足检查程序经编译产生路径满 足检查器;约束构造器根据当前程序输入和各输入变量的增量执行W上的 语句,不分析W上的语句之间的数据依赖关系,计算W上各谓词函数的线 性算术表示,然后建立输入变量的线性约束系统;约束求解器采用线性规 划、线性整数规划、线性混合整数规划和最小二乘解法相结合的方法求解 线性约束系统;求解后获得新的程序输入即测试数据;最后由路径满足检 查器进行检查,若该程序输入能使W被经过则结束,若该程序输入不能使 W被经过则根据W上所有谓词函数是否为输入变量的线性函数以及迭代次 数上限决定是否继续迭代求解;求解结果由输出接口输出。

图2是本发明的总流程图,图4描述了本发明求解线性约束系统的方 法。本发明实现步骤是:

1.用户从输入接口指定程序路径W、各输入变量的初值和增量以及其它参 数值,如W上的所有谓词函数是否均为输入变量的线性函数、当W上的 某谓词函数为输入变量的非线性函数时迭代求解的次数上限、以及当W 上存在黑盒且黑盒中包含输入语句时,根据黑盒的接口规范所规定的黑 盒中的输入变量的个数及各输入变量的数据类型等。

2.词法分析器对W进行词法分析后,语法分析器根据词法分析的结果对W  进行语法分析,将W转换为约束构造程序和路径满足检查程序,约束构 造程序经编译产生约束构造器,路径满足检查程序经编译产生路径满足 检查器。

3.约束构造器根据当前程序输入和各输入变量的增量执行W上的语句,计 算W上各谓词函数的线性算术表示,建立输入变量的线性约束系统。

4.约束求解器采用线性规划、线性整数规划、线性混合整数规划和最小二 乘解法相结合的方法求解该线性约束系统,如图4:若W上的谓词函数 均为输入变量的线性函数,则采用线性规划、线性整数规划、线性混合 整数规划方法求解;若W上的谓词函数中含有输入变量的非线性函数, 则先采用线性规划、线性整数规划、线性混合整数规划方法求解,若无 法找到解,则将该线性约束系统转换为线性方程系统,求它的最小二乘 解。

4.1若W上的谓词函数均为输入变量的线性函数,并且线性规划、线 性整数规划、线性混合整数规划方法找到解,则由路径满足检查 器进行检查,若该解能使W被经过则从输出接口输出解,然后结 束;若该解不能使W被经过则从输出接口给出求解精度可能不够 的警告,然后结束。

4.2若W上的谓词函数均为输入变量的线性函数,所有输入变量均无 整数限制,并且线性规划方法找不到解,则从输出接口给出W不 可行的结论,然后结束。

4.3若W上的谓词函数均为输入变量的线性函数,某输入变量有整数 限制,并且线性整数规划、线性混合整数规划方法找不到解,则 从输出接口给出W可能不可行的结论,然后结束。

4.4若W上的某谓词函数为输入变量的非线性函数,则先采用线性规 划、线性整数规划、线性混合整数规划方法求解,若找到解,则 由路径满足检查器进行检查,若该解能使W被经过则从输出接口 输出解,然后结束;若该解不能使W被经过,并且当前迭代次数 已经达到迭代次数上限,则从输出接口给出W可能不可行的结论, 然后结束;若该解不能使W被经过,并且当前迭代次数尚未达到 迭代次数上限,则当前迭代次数加一,将该解作为新的当前程序 输入,转第3步进行下次迭代。

4.5若W上的谓词函数中含有输入变量的非线性函数,则先采用线性 规划、线性整数规划、线性混合整数规划方法求解,若找不到解, 则将该线性约束系统转换为线性方程系统,求它的最小二乘解。 由路径满足检查器进行检查,若该最小二乘解能使W被经过则从 输出接口输出该最小二乘解,然后结束;若该最小二乘解不能使 W被经过,并且当前迭代次数已经达到迭代次数上限,则从输出 接口给出W可能不可行的结论,然后结束;若该最小二乘解不能 使W被经过,并且当前迭代次数尚未达到迭代次数上限,则当前 迭代次数加一,将最小二乘解作为新的当前程序输入,转第3步 进行下次迭代。

图3描述了本发明构造线性算术表示的方法。用户输入程序路径W、输 入变量的初值 X=和输入变量的增量 Y=。对于W上的m个 谓词结点n1,…,nm,依次令ni的谓词函数的线性算术表示为 L(i, X, Y,W)=dilv1+…+ditvt+ci,按照 X依次执行W上的ni之前的除谓词结点 之外的语句,计算ni的谓词函数值Poldi,并且令ci=Poldi,其中i=1,...,m。 然后计算各线性算术表示的系数值和常数项,计算方法是:对于W上的t个 输入变量v1,…,vt的初值x1,…,xt,依次将第j个输入变量vj的值xj与其增量yj 相加,其余输入变量的值保持不变,将新的输入记作Z,然后按照Z依次执 行W上的n1之前的除谓词结点之外的语句,计算ni的谓词函数值Pnewij,并 且令dij=(Pnewij-Poldi)/yj,ci=ci-dij×xj,其中i=1,...,m,j=1,...t。

根据软件工程的思想,本发明采用面向对象的方法,使用UML进行设 计,在Windows98操作系统下用C++语言和Java语言对本发明进行了实现, 开发出为C语言和Java语言程序路径自动生成测试数据的原型工具 (Path-wise Test Data Generator,简称PTDG)。

在以下函数中,对于一个具有十个元素的数组X,其中各元素的值是任 意输入的,要求采用冒泡排序方法对X中各元素进行排序,使得各元素按 不减序排列,即

X[0]<=X[1]<=X[2]<=X[3]<=X[4]<=X[5]<=X[6]<=X[7]<=X[8]<=X[9]。但是 在该函数中存在一个错误,即外层循环的结束条件“i<=7”应为“i<=8”。

  void Bubble_Sort(int X[])   {    int temp,i,j;    scanf(″%d%d%d%d%d%d%d%d%d%d″,    &X[0],&X[1],&X[2],&X[3],&X[4],   &X[5],&X[6],&X[7],&X[8],&X[9]);    for(i=0;i<=7;i++)    for(j=0;j<=8;j++)    if(X[j]>X[j+1]){    temp=X[j];    X[j]=X[j+1];    X[j+1]=temp;} }

当在以下程序路径W1=中调用该函数,

     n1:int X[10];

     n2:Bubble_Sort(X);

     n3:@X[0]>X[1]@

PTDG从初始输入

出发,假设各 输入变量的增量为<1,1,1,1,1,1,1,1,1,-1>,经过两次迭代能够找到使W1 被经过的程序输入

上述结果表明,存在程序输入

,当按照 这组输入执行W1时,W1是可行的,即调用函数Bubble_Sort后,会出现 “X[0]>X[1]”的结果,故违反了设计要求,从而发现函数中存在错误。上 述结果也表明PTDG可以直接处理函数调用。进一步的实验表明当 Bubble_Sort的函数体仅为目标代码而无源代码时,PTDG仍然能够找到相 同的解,而Neelam Gupta等人提出的方法则无法构造线性算术表示。因此 本发明能够用于黑盒测试。

在以下程序中,谓词函数中含有输入变量的非线性函数“x*x”。

n1:float x;

n2:scanf(″%f″,&x);

n3:if(x<-1)

n4:if(x*x>0)

            n5:printf(″Ok!″);

            n6:elseprintf(″No.″);

            n7:else printf(″No.″);

对于其中的路径W2=,从初始输入x=1出发,假设输入 变量x的增量为1,PTDG所得到的如下线性约束系统

            n3:x+1<0

            n4:3x-2>0

是矛盾的,仅采用基于线性规划、线性整数规划、线性混合整数规划的约 束求解方法无法进行求解,PTDG采用线性规划、线性整数规划、线性混合 整数规划和最小二乘解法相结合的约束求解方法却能够经过六次迭代找到 使W2被经过的程序输入-1.388210。由此可见本发明强大的寻找测试数据 的能力。

发明人还用其它一些实际的程序路径对PTDG进行实验。实验结果表 明:PTDG能够处理的程序中的语句包括顺序、条件、循环、转移等语句, 其中顺序语句包括说明语句、赋值语句、输入语句、输出语句等;能够为 整数类型、浮点类型、双精度浮点类型的输入变量生成测试数据;可以直 接处理数组、结构、指针和函数调用。并且可以扩充为支持布尔类型、字 符类型、枚举类型。另外的实验表明PTDG能够用于面向断言的测试以及回 归测试等场合的测试数据自动生成。

人们通常分单元测试、组装测试、确认测试等阶段对大型软件进行测 试。本发明可以直接应用在单元测试的控制流测试中诸如语句覆盖、分支 覆盖、条件覆盖、判定-条件覆盖、路径覆盖等,数据流测试中的定义覆盖、 引用覆盖等方面。由于本发明能够用于黑盒测试,故本发明支持更高层次 的软件测试,譬如组装测试中的调用对覆盖、数据流测试。本发明也可以 用于面向断言的测试以及回归测试等方面。

高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈