CN102331966A - 面向路径的软件测试数据进化生成系统 - Google Patents
面向路径的软件测试数据进化生成系统 Download PDFInfo
- Publication number
- CN102331966A CN102331966A CN201110004891A CN201110004891A CN102331966A CN 102331966 A CN102331966 A CN 102331966A CN 201110004891 A CN201110004891 A CN 201110004891A CN 201110004891 A CN201110004891 A CN 201110004891A CN 102331966 A CN102331966 A CN 102331966A
- Authority
- CN
- China
- Prior art keywords
- test data
- path
- genetic algorithm
- tested program
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明开发出一套面向路径的软件测试数据进化生成系统,该系统不仅能够根据用户选择的测试路径,使用遗传算法自动生成穿越目标路径的测试数据,而且在使用遗传算法生成测试数据的过程中,提供了多种可供选择的遗传算法个体编码方式、适应值计算方法、选择方式、交叉方式、变异方式等,方便用户根据不同类型的被测程序选择不同的测试数据生成方法,另外本系统还提供了传统随机法的测试数据生成方法作为对比,真正实现软件测试数据自动化生成。运用本发明系统,不仅使得软件测试效率的大大提高,也节约了软件开发的大量资源,更为国家相关计划和工程的可信软件研发提供了技术支持,促进我国软件业的发展。
Description
技术领域
本专利涉及软件测试领域,设计并开发了一个面向路径的软件测试数据自动生成系统。
背景技术
软件测试是软件质量保证的关键,是软件开发中不可缺少的环节,也是软件工程的重要组成部分,测试的效果直接关系到软件产品的质量。据美国工业界的统计,软件测试占整个软件开发周期总成本的50%以上,包括十分耗时、枯燥、非常困难且容易出错的诸多环节。另外,随着计算机控制对象复杂度的不断提高和软件功能的不断增强,软件的规模也在不断地增大。大型系统的代码量甚至达到了千万行以上,这使得软件测试的开销也越来越大。在软件测试工作中最重要的环节就是测试数据的生成,这也是非常耗时的一个环节,则试数据的合理、准确与否常常关系到整个测试的成败。因此如果将该环节自动化,无疑将会缩短软件的开发周期,提高软件质量。
近几十年来,国际上和国内少数研究机构针对不同的计算机语言开发出路径覆盖测试数据生成的系统,其中Scott开发的系统是针对Fortran语言的,但只考虑了有限的Fortran语句,如if语句,和一些简单的算术分支谓词以及简单的变量类型;Ferguson和Korel开发了一个名为TESTGEN的测试数据生成系统,该系统支持Pascal语言编写的程序模块的测试数据生成。这个系统具有以下的限制性:只支持整型数据的生成;只支持简单的算术和布尔分支谓词;只支持了Pascal语言的一个子集,一些很重要的元素不能应用,如过程等。单锦辉等在2002年《计算机工程与科学》第24卷第1期上给出了一种面向路径的测试数据自动生成工具的设计与实现,但是该方法使用的测试数据生成方法是基于改进的松弛迭代方法进行的,需要用户实现的初始操作较多,面对非专业的软件测试人员是较难使用;刘义等2005年在《中国科教博览》杂志上发表的C程序路径覆盖及测试数据自动生成系统,该方法只是针对分支覆盖准则的路径覆盖;李宝林等在2007年《计算机工程》第33卷第15期中提出的面向路径的测试数据自动生成工具,该方法在路径选择和测试数据生成方法方面均有待改进,且测试数据生成的效率有待提高。
目前在软件测试各种覆盖准则中,路径覆盖对程序的覆盖程度最高,检错效率也最高,因此设计开发基于路径覆盖的测试数据自动生成系统十分必要。现有路径覆盖的测试数据生成方法有很多,遗传算法作为一种高效的全局搜索方法,已经被广泛应用于测试数据生成中,现有使用该方法自动生成路径覆盖测试数据的系统软件采用的都是传统遗传算法,遗传算法的个体编码方式、适应值计算、选择方式、交叉方式以及变异方式等均只使用一种方法,测试数据生成的效率有待提高。实际上被测程序是多种多样的,如能针对不同被测程序,可以采用不同的编码方式和不同的适应值计算方法,将能够有效提高测试数据的生成效率。软件测试行业需要一种能够结合现有改进的遗传算法,快速生成被测程序测试数据的软件,真正实现软件测试数据生成的自动化。
发明内容
为了实现软件测试数据生成的自动化,提高软件测试的效率和质量,本发明开发出一套面向路径的软件测试数据进化生成系统,该系统不仅能够根据用户所选择的测试路径,自动生成穿越这些目标路径的测试数据,而且在使用遗传算法生成测试数据的过程中,提供了多种可供选择的遗传算法个体编码方式、适应值计算方法、选择方式、交叉方式、变异方式等操作,方便用户根据被测程序的不同类型选择不同的测试数据生成方式,真正实现软件测试数据自动化生成。主要包含以下三大模块:
1、软件测试系统管理模块
本模块主要实现的功能是被测程序的选择、插装、输入输出处理以及外部变理处理等一系列设置操作,是通过一个交互式界面来实现的。
1.1被测程序插装是指为了动态的获取某一数据在程序中的运行状态,在程序中插入一些检查语句,通过这些检查语句的执行并输出程序的运行特征数据。本系统主要针对被测程序中的分支语句进行插装。
1.2输入处理包含被测程序的导入、被测程序的编辑操作等部分。另外还包括对文件或程序的打开、保存、另存为、编辑、打印等一系列的操作处理。
1.3外部变量处理是对系统中软件测试数据生成方法的选择设置,还包含对系统本身的设置操作。
2、被测程序分析操作模块
本模块实现了通过对被测程序的内部分析,得出被测程序的输入数据类型、被测程序的控制流图、进一步得到针对路径覆盖准则的目标路径等。
2.1被测程序的输入值个数、输入值类型及其范围是应用遗传算法生成测试数据的重要条件。不同的被测程序输入值个数不同、输入值类型及取值范围也不会相同。
2.2程序的控制流程图(CFG)是根据被测程序的结构特征来生成的,其能够指导用户生成软件测试所需要的目标路径。被测程序的结构可用控制流图CFG=(V,E,entry,exit)表示,V是语句节点的集合,E是边集,表示语句间可能的控制流向,entry是唯一的源节点,对应程序的开始语句,exit是唯一的汇节点,对应程序的结束语句。
2.3针对用户选择的目标路径,将其表示成编码形式,本发明使用的编码是基于赫夫曼编码的形式,由0、1代码组成,对于任何一个分支语句,如果路径选择真分支,则用1表示,选择假分支则用0表示,这样路径编码能保证任何一个目标路径的编码都不是其他编码的前缀。
3、软件测试数据生成模块
本模块是发明的核心内容,本发明主要使用遗传算法生成穿越目标路径的测试数据,系统中我们对传统遗传算法进行了改进,生成测试数据的效率较高,为了给科研人员进行研究对比,我们还提供了随机法生成穿越目标路径的测试数据。本模块包括遗传算法和随机法执行过程中所需要的参数设置、执行过程、结果输出等。
3.1遗传操作方式及其参数的设定,对于遗传算法包括的选择算子、交叉算子、变异算子、交叉概率、变异概率、遗传算法种群规模、遗传算法终止代数、染色体编码方式、适应值函数、被测程序的输入值类型及取值范围、测试路径输入、实验执行次数等,如果是随机法则包括种群规模、最大运行代数、实验执行次数等;可以根据测试人员或是科研人员的实际需要进行设定,如果不重新设定,则采用系统的初始设定方式和参数执行相应的操作。
3.2测试数据的生成方法包括改进的遗传算法和随机法。
遗传算法需要首先随机生成初始种群,然后重复做以下操作:解码进化个体,运行被测程序,检查是否有种群个体穿越目标路径,若有则记录该个体,删除找到的目标路径,如果没达到终止条件,计算个体适应值,执行选择、交叉、变异操作,得到新的种群。直到生成了全部目标路径的测试数据或者达到了最大运行代数,算法结束。解码最优个体,得到测试数据。本发明中提供了多种个体编码方式和适应值计算方法、选择方式、交叉方式、变异方式,可供用户自由选择。
随机法不进行进化操作,每一代都是随机生成测试数据,运行被测程序,检查是否有穿越目标路径的测试数据,如果有则记录该数据并删除找到的目标路径,如果生成了全部目标路径的测试数据或是达到最大运行代数则结束算法。
3.3生成的测试数据,在输出窗口以表格形式输出。详细给出每条目标路径对应的测试数据,以及生成该数据的运行代数,生成所有测试数据所需要的运行时间等具体信息。
本发明提供了一种面向路径的软件测试数据进化生成系统,该系统能够根据用户需求,应用遗传算法生成软件测试所需要的测试数据,提供了多种遗传操件的方式可供用户选择,并设计了随机法作为对比来验证遗传算法的优良性能。本发明在测试系统界面有针对不同被测程序的插装、客户需求设置、遗传算法参数设置、随机法参数设置等一系列设置操作。通过上述系统界面的参数设置,将这些参数传递给后台执行用户指定命令的响应函数,可方便的应用遗传算法去执行已经插装完成的被测程序,生成用户需求的软件测试数据。运用本发明系统,不仅使得软件测试效率的大大提高,也节约了软件开发的大量资源,更为国家相关计划和工程的可信软件研发提供了技术支持,促进我国软件业的发展。
附图说明
图1是本发明采用的遗传算法在面向路径的软件测试数据生成流程图;
图2是本发明采用的随机法在面向路径的软件测试数据生成流程图;
图3是本发明采用的遗传算法在面向路径的软件测试数据生成界面示意图;
图4是本发明采用的随机法在面向路径的软件测试数据生成界面示意图;
具体实施方式
为了使本发明的目的、特征、和优点能够更加明显易懂,下面结合附图和具体实例对本发明的实施方式作进行详细的说明。
本发明可用于众多通用或者专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或者便携式设备、平板型设备、多处理器系统、包括以上任何系统或者设备的分布式计算机环境等等。在实际应用中,对软件进行测试之前,软件测试人员首先对被测试程序进行分析。现在计算机高级语言有很多种,同样功能的软件也可以用不同的计算机语言来实现,这就给该系统的兼容性带来了困难;本发明是使用VC++6.0系统开发出来的,现在仅考虑了使用C和C++语言编写的被测程序代码的问题,因此本发明适用于C或C++程序的测试数据生成。
本发明中,基于遗传算法的路径覆盖测试数据生成方法流程图见参考图1,面向路径的遗传算法测试数据生成系统运行实例见参考图3,具体包括以下步骤:
步骤101:对被测程序进行分析,主要对被测程序输入变量进行分析。对应被测程序的一个测试数据(或称为测试用例),可能包含多个分量,每个分量可能是各种类型,如整型、实型、或者是布尔型等,因此输入变量包括输入个数、输入类型、输入值范围。通过对被测程序结构分析,获取被测程序输入变量信息。
步骤102:被测程序的控制流程图(CFG)是根据被测程序的结构特征生成的,在本系统中,其能够指导用户生成软件测试所需要的目标路径。任何一个被测程序的结构都可以用控制流图CFG=(V,E,entry,exit)表示,V是节点的集合,表示语句,E是边集,表示语句间可能的控制流向,entry是唯一的源节点,对应程序的开始语句,exit是唯一的汇节点,对应程序的结束语句。
步骤103:根据被测程序的控制流程图(CFG),选择需要生成测试数据的目标路径,并对目标路径进行编码。在本发明中,目标路径的表示是采用的赫夫曼编码方式,赫夫曼编码是以分支节点的执行情况表示路径,若分支语句的真分支采用1表示,假分支采用0表示,那么,该程序的一个路径就可以用二叉树的叶结点的赫夫曼编码表示。根据目标路径编码设计适应值函数,有效改进了测试数据的生成效率。
步骤104:测试系统管理界面即本系统的界面,包含了三个子步骤,其分别是被测程序插装、输入输出处理、外部变量处理。
子步骤1041:被测程序的插装是为了动态的获取被测程序的运行状态,在程序中插入一些检查语句,通过这些检查语句的执行得到程序的运行特征数据;本系统由于路径编码的特殊形式,在对被测程序插装中只对分支语句进行插装,大大简化了插装工作。
子步骤1042:输入输出的处理包含被测程序的导入、被测程序的编辑操作、生成测试数据的输出等部分。另外还包括对文件或程序的打开、保存、另存为、编辑、打印等一系列的操作处理。
子步骤1043:外部变量的处理主要是对系统中软件测试数据生成方法的选择设置,还包含对系统本身的设置操作。
步骤105:客户的测试参数设置是指在应用遗传算法之前应给予响应函数的一些执行命令。在测试系统管理界面中,包含了大多数的参数设置,包括遗传算法的选择算子、交叉算子、变异算子、交叉概率、变异概率、遗传算法种群规模、遗传算法终止代数、染色体编码方式、适应值函数、被测程序的输入、实验执行次数等等,这些设置的参数将传递给响应函数以使其能够执行相应的操作。
种群规模是遗传算法必需的参数之一,遗传算法从一组随机产生的初始解出发,称它们为“种群”,开始对它们进行搜索,种群中的每个个体包含问题的一个解。种群规模的大小直接影响着遗传算法的运行性能。由于本发明是面向实验的系统,与实际相结合,因此在本发明中,遗传算法的种群规模设置的参数范围在1至200之间,并且该参数范围能够满足实际需求。
终止代数是遗传算法运行结束条件的一个参数,它表示遗传算法运行到指定的进化代数之后就停止,并将当前种群中最佳个体作为所求问题的最优解输出。另一个算法的终止条件是算法搜索到所有的目标路径并生成了相应的测试数据。在本发明中,根据实际需求,遗传算法的终止代数设置范围是在2000代以内。
染色体编码方式是应用遗传算法时首要解决的问题,也是实现遗传算法的关键步骤,编码方式在很大程度上决定了进化种群的遗传操作方法及其效率,因此本发明的实用性及其性能优劣也直接在编码方式上显示出来。遗传算法交替地在解空间和编码空间中工作,通过适应值函数作用于编码空间,遗传算法可以选择较优的编码,而编码空间又可以通过解码过程映射到解空间,获得较优的解。在本发明中,根据软件测试的实际需求,在本系统中提供了以下3种编码方式:二进制编码方式、格雷码编码方式、实数编码方式。
(1)二进制编码方式是遗传算法中最常用的一种编码方式,它使用的编码符号集是由二进制符号0和1所组成的二值符号集{0,1},它构成的个体基因型是一个二进制编码符号串。假定某一参数的取值范围是[Umin,Umax],那么我们用长度为l的二进制编码符号串来表示该参数,若某一个体的编码是x:blbl-1bl-2...b2b1,对应的解码公式是该编码方式容易简单,比较易于理解。
(2)格雷码编码方式是二进制编码方式的一种变形,其连续的两个整数所对应的编码值仅仅只有一个码位是不同的,其它码位完全相同,因此它可以与二进制编码相互转换,具有提高遗传算法局部搜索能力的作用。
(3)实数编码方式是指个体的每个基因值用某一范围内的一个浮点数表示,个体的编码长度等于其输入变量的个数,因为这种编码方式使用的是输入变量的真实值,所以也叫真实值编码方式,具有计算方便,精度较高的特点。
适应值函数的选取是遗传算法中最关键的问题,其可被看作是遗传算法与实际问题相结合的接口,对遗传算法的收敛速度和最终获得的结果影响很大,因此把测试数据生成问题转化为函数优化问题的关键就是适应值函数。本发明依据在现有的理论和实践,在本系统中,遗传算法应用在软件测试数据生成使用的适应值函数有以下四种:加权法,层接近度,分支距离、层接近度和分支距离的综合,这四种适应值函数设计方法基本上涵盖了目前国内外研究比较成熟的方法。
(1)加权法假设解码后的测试数据为x,以x为被测试程序的输入,穿越的路径记为字符串p(x),字符串的位数记为|p(x)|。设此时目标路径还有n(t)个,记第j条目标路径为pj,j=1,2,...n(t),根据p(x)与pj的匹配程度,计算该个体的适应值,记为f(x)。记|pj|为目标路径pj的编码位数,我们从左向右依次比较p(x)与pj各位的编码.记djk(p(x))为反映p(x)与pj第k位编码是否相同的量,如果相同,则令djk(p(x))为1;否则,令djk(p(x))为0,这样最多比较min(|p(x)|,|pj|)次。在编码按位比较的同时,用计数器mjk标记p(x)与pj比较到底k位时相同位的个数,依次作为权值计算个体适应值,个体x针对目标路径pj的适应值函数表示如下:
(2)层接近度表示输入变量所穿越路径与目标路径的接近程度。假设以种群某一代个体x为例,该个体对应被测程序P的输入变量,考虑计算个体针对第j条目标路径pi的适应值fj(x),以rj表示目标路径pj的节点个数。以x为输入,运行被测程序P,所穿越的路径记为p(x),其穿越控制流程图中节点为n1(x),n2(x),…,nk(x)。从第一个节点开始比较pj与p(x),记相同节点的个数为ns(pj,p(x))。容易理解,ns(pj,p(x))反映了两条路径的层接近度,该值越大,说明pj越接近p(x),从而个体x的质量也就越高。为了方便进化个体的比较,通过除以rj将ns(pj,p(x))标量化到[0,1],这时的ns(pj,p(x))就是传统意义上的层接近度。然后令适应值函数fj(x)=1-ns(pj,p(x),则fj(x)越小越好,当fj(x)=0时表示个体x穿越路径即为目标路径。
(3)分支距离反映输入变量要想穿越目标路径的分支,离满足分支语句前件的距离。这里采用分支函数,分支函数是根据分支谓词表达式的类型来确定具体值。比如需要计算分支距离的节点上条件语句为xopy,其中op可能为>,<,≥,≤,=,≠等,用fi(x)表示目标路径pj第j个分支所对应的分支函数,那么分支距离的定义根据具体情况可以表示如下:
(4)综合法是将传统的层接近度与分支距离相结合的方法,首先分别计算不同路径的层接近度ns(pj,p(x))和分支距离distan ce(pj,p(x)),并将分支距离distan ce(pj,p(x))标量化到[0,1]范围内,然后我们得到个体对于路径pj的适应值函数fj(x)=(1-ns(pj,p(x)))+distance(pj,p(x))。针对所有目标路径都做上述运算,得到个体x针对k条目标路径的适应值函数为:
实验执行次数是指在一次运行本发明系统遗传算法所要执行的次数,而实验执行次数的大小完全由用户本身决定,且每次运行的实验结果都会相应的在本系统中显示出来。
步骤106:遗传算法的初始化种群是指根据被测程序的输入变量,每次运行遗传算法之前,本系统都将自动运行随机函数生成预定种群规模的初始值作为被测程序的输入,每个输入都采用事先选择的编码方式进行编码,这样就构成种群中的一个个体,所有个体构成初始种群,其种群大小就是遗传算法的种群规模。
步骤107:执行被测程序需要先将种群中个体解码,得到被测程序的输入数据,不同的个体可能穿越的目标路径不同,因此,只要有个体穿越了目标路径,就将该代种群的个体及该个体穿越的目标路径记录保存下来。没有被穿越的目标路径要经过以下操作。
步骤108和109:无论是遗传算法的初始化种群还是后续遗传算法通过选择、交叉、变异操作产生的新种群,每一代个体都需进行适应值函数评估,以确定种群个体的优劣,判断个体是否满足要求,如此反复的评估以指导算法搜索最优解,直到算法满足终止条件为止。在这些循环过程中,若搜索到满足目标路径需求的数据,则将这些数据保留作为被测程序的测试数据,否则循环地执行遗传操作直到终止算法为止。
步骤110:选择算子是遗传算法的基本操作算子之一,体现了自然界优胜劣汰的基本规律,根据各个个体的适应值大小,按照一定的规则或方法,从当前代种群中选择出一些优良的个体遗传到下一代种群中。在本发明中采用了常用的四种选择操作,其分别是轮盘赌选择、随机联赛选择、随机竞争选择、最优保留策略。
轮盘赌选择即比例选择算子,其思想是各个个体被选中的概率与其适应值大小成正比,其具体操作如下:
(1)先计算出群体中所有个体的适应值的总和。
(2)其次计算出每个个体的相对适应值的大小,它即为各个个体被遗传到下一代群体中的概率。
(3)最后再使用模拟赌盘操作(即0到1之间的随机数)来确定各个个体被选中的次数。
随机联赛选择是每次选取几个个体之中适应值最高的一个个体遗传到下一代种群中,具体操作如下:
(1)从种群中随机选择N个个体进行适应值大小比较,将适应值最高的一个个体遗传到下一代种群中。
(2)将上述过程重复操作,直到产生的新个体达到种群规模为止。
随机竞争选择与轮盘赌选择基本一样,在随机竞争选择中,每次按轮盘赌选择机制选取一对个体,然后让这两个个体进行竞争,适应值高的被选中,如此反复,直到达到种群规模为止。
最优保留策略即将当前种群中适应值最高的个体不参与交叉和变异操作,而是用它来替换种群中经过交叉、变异等遗传操作后所产生的适应值最低的个体。具体操作是:
(1)找出种群中适应值最高的个体和适应值最低的个体;
(2)当前种群中最佳个体适应值比总的迄今为止最佳个体的适应值还要高,则以当前最佳个体作为新的迄今为止的最佳个体;
(3)用迄今为止最佳个体替换当前种群中的最差个体。
步骤111:交叉算子也是遗传算法的基本操作算子之一,体现了信息交换的思想,该算子将当前种群内的各个个体随机搭配成对,对每一对个体,以某个概率(称为交叉概率pc)交换他们之间的部分染色体。其中交叉概率可在步骤105中测试系统界面参数设置中设定,其值的大小也直接影响着交叉算子的性能。在本发明中,系统采用了三种交叉操作,分别是单点交叉、多点交叉、均匀交叉。通过交叉操作,遗传算法的搜索能力得以飞跃提高。
单点交叉是指在种群个体编码串中只随机设置一个交叉点,然后在该点相互交换两个配对个体的部分染色体,从而产生两个新个体。
多点交叉是指在种群个体编码串中随机设置两个或两个以上交叉点,然后再进行部分基因交换。具体操作步骤如下:
(1)在相互配对的两个个体编码串中随机设置两个或者两个以上交叉点。
(2)交换两个个体在所设定的交叉点之间的部分染色体。
均匀交叉是指两个配对个体的每一个基因座上的基因都以相同的交叉概率进行交换,从而形成两个新个体。
步骤112:变异算子也是遗传算法的基本操作算子之一,其思想是对种群中的个体编码串的某些基因座上的基因值作变动。变异概率pm的大小也直接影响着算法的性能。在本发明中,不同的编码方式,其变异方式也会不尽相同,本系统采用了四种变异操作,分别是基本位变异、实值变异、均匀变异、非均匀变异。
基本位变异是指对个体编码串中以变异概率pm随机指定的某一位或某几个基因座上的基因值做变异运算。对于每一个指定的变异点,对其基因值做取反运算或用其它等位基因值来代替,从而产生一个新个体。
均匀变异是指分别用符合某一范围内均匀分布的随机数,以某一较小的概率来替换个体编码串中各个基因座上的原有基因值。均匀变异的具体操作如下:
(1)依次指定个体编码串中的每个基因座为变异点。
(2)对每一个变异点,以变异概率pm从对应基因的取值范围内取一随机数来替代原有基因值。
非均匀变异是均匀变异的改进,它不是取均匀分布的随机数去替换原有的基因值,而是对原有基因值作一随机扰动,以扰动后的结果作为变异后的新基因值,它的操作过程与均匀变异类似,重点搜索原个体附近的微小区域。
当前代种群经过遗传算法的选择操作、交叉操作、变异操作后,就生成了新种群,也就是下一代的种群,其同样也要经过步骤107、步骤108、步骤109、步骤110、步骤111、步骤112等一系列的往复循环操作,最终生成软件测试所需要的测试数据。
参考图2,是本发明中遗传算法的对比算法,即基于随机法的路径覆盖测试数据生成方法流程图;参考图4是随机法在面向路径的软件测试数据生成实例。由于该算法是遗传算法的对比,考虑到本系统的兼容性,因此步骤201、步骤202,步骤203,步骤204(包括子步骤20412042、2043)都与遗传算法中的流程相同,步骤205中的客户测试参数设置仅包含了随机法种群规模、随机法终止代数、被测程序的输入、实验执行次数等,且这些参数的设定如在步骤105中所述。不同的步骤如下:
步骤206:随机法的初始化种群是指根据被测程序的输入个数、输入值类型及其范围,本系统都将自动运行随机函数生成预定种群规模的初始值作为被测程序的输入,这些一定规模的输入个体的集合就是本系统随机法的种群,其种群大小就是随机法的的种群规模,每个输入也就是种群中的个体。
步骤207:随机法的初始化种群生成了执行被测程序的原始输入,通过这些原始输入去执行被测程序,不同的个体可能穿越的目标路径不同,因此,只要有个体穿越了目标路径,就将该代种群的个体及该个体穿越的目标路径记录保存下来。
步骤208:根据执行被测程序的结果,判断当前种群中是否有个体穿越了目标路径,只要有个体穿越了目标路径,就将该个体及其穿越的目标路径记录保存下来。否则将返回到步骤206的随机法种群初始化进行循环操作,直到找到所有的被测程序的测试数据或者满足终止代数为止。最终的输出是能够穿越被测程序指定的目标路径的测试数据,也就是用户要求的测试数据。
本发明提供了一种面向路径覆盖的软件测试数据进化生成系统,该系统能够根据用户需求,应用遗传算法生成软件测试所需要的测试数据,并设计了随机法作为对比来验证遗传算法的优良性能。本发明在测试系统界面有进行针对不同被测程序的插装、客户需求设置、遗传算法参数设置、随机法参数设置等一系列设置操作。通过上述系统界面的参数设置,将这些参数传递给后台执行用户指定命令的响应函数,可方便的应用遗传算法去执行已经插装完成的被测程序,生成用户需求的软件测试数据。运用本发明系统,不仅使得软件测试效率的大大提高,也节约了软件开发的大量资源,更为国家相关计划和工程的可信软件研发提供了技术支持,促进我国软件业的发展。
以上对本发明所提供的面向路径的软件测试数据进化生成系统详细介绍,对本发明的原理及实践方式进行了阐述,以上说明只是用于帮助理解本发明的方法及核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,说明书内容不应理解为对本发明的限制。
Claims (4)
1.面向路径的软件测试数据进化生成系统,其特征如下:
软件测试系统管理模块,是被测程序的选择、插装、输入处理以及外部变量处理等一系列设置操作,是通过一个交互式界面来实现的。
被测程序分析操作模块,实现了通过对被测程序的内部分析,得出被测程序的输入数据类型、被测程序的控制流图、进一步得到针对路径覆盖准则的目标路径等。
软件测试数据生成模块,主要使用遗传算法生成穿越目标路径的测试数据,本系统对传统遗传算法进行了改进,生成测试数据的效率较高,还提供了随机法生成穿越目标路径的测试数据作为对比。本模块包括遗传算法和随机法执行过程中所需要的参数设置、执行过程、结果输出等。
2.如权利要求1所述的系统,其特征在于,所述软件测试系统管理模块包括:
(1)被测程序插装是指为了动态的获取某一数据在程序中的运行状态,在程序中插入一些检查语句,通过这些检查语句的执行并输出程序的运行特征数据。本系统主要针对被测程序中的分支语句进行插装。
(2)输入处理包含被测程序的导入、被测程序的编辑操作等部分。另外还包括对文件或程序的打开、保存、另存为、编辑、打印等一系列的操作处理。
(3)外部变量处理是对系统中软件测试数据生成方法的选择设置,还包含对系统本身的设置操作。
3.如权利要求1所述的系统,其特征在于,所述被测程序分析操作模块包括:
(1)被测程序的输入值个数、输入值类型及其范围是应用遗传算法生成测试数据的重要条件。不同的被测程序输入值个数不同、输入值类型及取值范围也不会相同。
(2)程序的控制流程图(CFG)是根据被测程序的结构特征来生成的,其能够指导用户生成软件测试所需要的目标路径。被测程序的结构可用控制流图CFG=(V,E,entry,exit)表示,V是语句节点的集合,E是边集,表示语句间可能的控制流向,entry是唯一的源节点,对应程序的开始语句,exit是唯一的汇节点,对应程序的结束语句。
(3)针对用户选择的目标路径,将其表示成编码形式,本发明使用的编码是基于赫夫曼编码的形式,由0、1代码组成,对于任何一个分支语句,如果路径选择真分支,则用1表示,选择假分支则用0表示,这样路径编码能保证任何一个目标路径的编码都不是其他编码的前缀。
4.如权利要求1或3所述的系统,其特征在于,所述软件测试数据生成模块包括:
(1)遗传操作方式及其参数的设定,对于遗传算法包括的选择算子、交叉算子、变异算子、交叉概率、变异概率、遗传算法种群规模、遗传算法终止代数、染色体编码方式、适应值函数、被测程序的输入值类型及取值范围、测试路径输入、实验执行次数等,如果是随机法则包括种群规模、最大运行代数、实验执行次数等;可以根据测试人员或是科研人员的实际需要进行设定,如果不重新设定,则采用系统的初始设定方式和参数执行相应的操作。
(2)测试数据的生成方法包括改进的遗传算法和随机法。遗传算法需要首先随机生成初始种群,然后重复做以下操作:解码进化个体,运行被测程序,检查是否有种群个体穿越目标路径,若有则记录该个体,删除找到的目标路径,如果没达到终止条件,计算个体适应值,执行选择、交叉、变异操作,得到新的种群。直到生成了全部目标路径的测试数据或者达到了最大运行代数,算法结束。解码最优个体,得到测试数据。本发明中提供了多种个体编码方式和适应值计算方法、选择方式、交叉方式、变异方式,可供用户自由选择。
随机法不进行进化操作,每一代都是随机生成测试数据,运行被测程序,检查是否有穿越目标路径的测试数据,如果有则记录该数据并删除找到的目标路径,如果生成了全部目标路径的测试数据或是达到最大运行代数则结束算法。
(3)生成的测试数据,在输出窗口以表格形式输出。详细给出每条目标路径对应的测试数据,以及生成该数据的运行代数,生成所有测试数据所需要的运行时间等具体信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110004891A CN102331966A (zh) | 2011-01-10 | 2011-01-10 | 面向路径的软件测试数据进化生成系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110004891A CN102331966A (zh) | 2011-01-10 | 2011-01-10 | 面向路径的软件测试数据进化生成系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102331966A true CN102331966A (zh) | 2012-01-25 |
Family
ID=45483749
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110004891A Pending CN102331966A (zh) | 2011-01-10 | 2011-01-10 | 面向路径的软件测试数据进化生成系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102331966A (zh) |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102708047A (zh) * | 2012-04-23 | 2012-10-03 | 福建师范大学 | 数据流测试用例生成方法 |
CN103198015A (zh) * | 2013-03-21 | 2013-07-10 | 中国人民解放军国防科学技术大学 | 一种基于使用概率的嵌入式软件可靠性测试数据生成方法 |
CN103218297A (zh) * | 2013-05-15 | 2013-07-24 | 百度在线网络技术(北京)有限公司 | 测试数据的筛选方法及装置 |
CN103559129A (zh) * | 2013-10-31 | 2014-02-05 | 中国矿业大学 | 基于遗传算法的统计回归测试数据生成方法 |
CN103729297A (zh) * | 2013-12-31 | 2014-04-16 | 北京理工大学 | 一种基于分层遗传算法的测试用例生成方法 |
CN103885874A (zh) * | 2012-12-20 | 2014-06-25 | 百度在线网络技术(北京)有限公司 | 一种用于确定程序文件所对应的测试数据的方法与设备 |
CN103902455A (zh) * | 2014-04-08 | 2014-07-02 | 中国矿业大学 | 含随机数软件测试数据生成问题的优化模型及进化求解 |
CN104750610A (zh) * | 2015-03-24 | 2015-07-01 | 中国矿业大学 | 基于占优度的消息传递并行程序变异体约简方法 |
CN104765690A (zh) * | 2015-04-22 | 2015-07-08 | 哈尔滨工业大学 | 基于模糊遗传算法的嵌入式软件测试数据生成方法 |
CN105930272A (zh) * | 2016-04-22 | 2016-09-07 | 中国矿业大学 | 基于重要语句的分支覆盖测试数据生成方法 |
TWI570554B (zh) * | 2015-11-05 | 2017-02-11 | 財團法人資訊工業策進會 | 軟體測試裝置、軟體測試方法及其電腦程式產品 |
CN106502908A (zh) * | 2016-11-07 | 2017-03-15 | 牡丹江师范学院 | 基于统计分析的可执行基础路径进化生成方法 |
CN107665170A (zh) * | 2016-07-29 | 2018-02-06 | 高德软件有限公司 | 一种流程测试方法及装置 |
CN108304625A (zh) * | 2018-01-15 | 2018-07-20 | 北京航空航天大学 | 人工智能程序员书写数字飞行器代码的遗传编程决策方法 |
CN108509335A (zh) * | 2018-01-31 | 2018-09-07 | 浙江理工大学 | 基于遗传算法优化的软件测试数据生成方法 |
CN109918307A (zh) * | 2019-03-14 | 2019-06-21 | 牡丹江师范学院 | 基于否定选择遗传算法的路径覆盖测试数据生成方法 |
CN110084321A (zh) * | 2019-05-08 | 2019-08-02 | 牡丹江师范学院 | 一种基于k-均值聚类的软件测试目标路径选择方法 |
WO2019223247A1 (zh) * | 2018-05-23 | 2019-11-28 | 华南理工大学 | 基于路径覆盖测试用例自动生成的单元测试方法 |
CN112488314A (zh) * | 2020-11-24 | 2021-03-12 | 江苏科技大学 | 一种基于改进遗传算法的系统弹性恢复方法及恢复系统 |
CN116048958A (zh) * | 2022-11-17 | 2023-05-02 | 中山大学 | 医疗机器人控制软件测试数据的生成方法、注入方法 |
CN116775499A (zh) * | 2023-08-21 | 2023-09-19 | 中国电信股份有限公司 | 测试数据生成方法、装置、计算机设备和存储介质 |
-
2011
- 2011-01-10 CN CN201110004891A patent/CN102331966A/zh active Pending
Non-Patent Citations (6)
Title |
---|
《电子学报》 20100630 巩敦卫等 "一种新的多路径覆盖测试数据进化生成方法" 摘要,第1300页左栏第2段,右栏第2段、第4段,第1302页左栏第2-10段 1-4 第38卷, * |
《计算机工程》 20070831 李宝林等 "面向路径的测试数据自动生成工具" 第7-8页第1节-第2节 1-4 第33卷, 第15期 * |
《计算机工程与应用》 20020131 单锦辉等 "面向路径的测试数据自动生成工具及其图形界面的Tcl/Tk设计" 第75-76页第3节 1-4 , 第01期 * |
单锦辉等: ""面向路径的测试数据自动生成工具及其图形界面的Tcl/Tk设计"", 《计算机工程与应用》 * |
巩敦卫等: ""一种新的多路径覆盖测试数据进化生成方法"", 《电子学报》 * |
李宝林等: ""面向路径的测试数据自动生成工具"", 《计算机工程》 * |
Cited By (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102708047A (zh) * | 2012-04-23 | 2012-10-03 | 福建师范大学 | 数据流测试用例生成方法 |
CN102708047B (zh) * | 2012-04-23 | 2014-12-10 | 福建师范大学 | 数据流测试用例生成方法 |
CN103885874A (zh) * | 2012-12-20 | 2014-06-25 | 百度在线网络技术(北京)有限公司 | 一种用于确定程序文件所对应的测试数据的方法与设备 |
CN103885874B (zh) * | 2012-12-20 | 2018-03-23 | 百度在线网络技术(北京)有限公司 | 一种用于确定程序文件所对应的测试数据的方法与设备 |
CN103198015A (zh) * | 2013-03-21 | 2013-07-10 | 中国人民解放军国防科学技术大学 | 一种基于使用概率的嵌入式软件可靠性测试数据生成方法 |
CN103218297A (zh) * | 2013-05-15 | 2013-07-24 | 百度在线网络技术(北京)有限公司 | 测试数据的筛选方法及装置 |
CN103218297B (zh) * | 2013-05-15 | 2018-05-04 | 百度在线网络技术(北京)有限公司 | 测试数据的筛选方法及装置 |
CN103559129A (zh) * | 2013-10-31 | 2014-02-05 | 中国矿业大学 | 基于遗传算法的统计回归测试数据生成方法 |
CN103559129B (zh) * | 2013-10-31 | 2016-08-17 | 中国矿业大学 | 基于遗传算法的统计回归测试数据生成方法 |
CN103729297A (zh) * | 2013-12-31 | 2014-04-16 | 北京理工大学 | 一种基于分层遗传算法的测试用例生成方法 |
CN103902455A (zh) * | 2014-04-08 | 2014-07-02 | 中国矿业大学 | 含随机数软件测试数据生成问题的优化模型及进化求解 |
CN103902455B (zh) * | 2014-04-08 | 2016-08-03 | 中国矿业大学 | 含随机数软件测试数据生成问题的建模及进化求解方法 |
CN104750610B (zh) * | 2015-03-24 | 2018-01-09 | 中国矿业大学 | 基于占优度的消息传递并行程序变异体约简方法 |
CN104750610A (zh) * | 2015-03-24 | 2015-07-01 | 中国矿业大学 | 基于占优度的消息传递并行程序变异体约简方法 |
CN104765690A (zh) * | 2015-04-22 | 2015-07-08 | 哈尔滨工业大学 | 基于模糊遗传算法的嵌入式软件测试数据生成方法 |
CN104765690B (zh) * | 2015-04-22 | 2017-10-27 | 哈尔滨工业大学 | 基于模糊遗传算法的嵌入式软件测试数据生成方法 |
TWI570554B (zh) * | 2015-11-05 | 2017-02-11 | 財團法人資訊工業策進會 | 軟體測試裝置、軟體測試方法及其電腦程式產品 |
CN105930272A (zh) * | 2016-04-22 | 2016-09-07 | 中国矿业大学 | 基于重要语句的分支覆盖测试数据生成方法 |
CN105930272B (zh) * | 2016-04-22 | 2018-10-02 | 中国矿业大学 | 基于重要语句的分支覆盖测试数据生成方法 |
CN107665170A (zh) * | 2016-07-29 | 2018-02-06 | 高德软件有限公司 | 一种流程测试方法及装置 |
CN106502908A (zh) * | 2016-11-07 | 2017-03-15 | 牡丹江师范学院 | 基于统计分析的可执行基础路径进化生成方法 |
CN108304625A (zh) * | 2018-01-15 | 2018-07-20 | 北京航空航天大学 | 人工智能程序员书写数字飞行器代码的遗传编程决策方法 |
CN108304625B (zh) * | 2018-01-15 | 2021-10-08 | 北京航空航天大学 | 人工智能程序员书写数字飞行器代码的遗传编程决策方法 |
CN108509335B (zh) * | 2018-01-31 | 2021-03-19 | 浙江理工大学 | 基于遗传算法优化的软件测试数据生成方法 |
CN108509335A (zh) * | 2018-01-31 | 2018-09-07 | 浙江理工大学 | 基于遗传算法优化的软件测试数据生成方法 |
US11720477B2 (en) | 2018-05-23 | 2023-08-08 | South China University Of Technology | Unit testing method based on automatic generation of path coverage test cases |
WO2019223247A1 (zh) * | 2018-05-23 | 2019-11-28 | 华南理工大学 | 基于路径覆盖测试用例自动生成的单元测试方法 |
CN109918307A (zh) * | 2019-03-14 | 2019-06-21 | 牡丹江师范学院 | 基于否定选择遗传算法的路径覆盖测试数据生成方法 |
CN110084321B (zh) * | 2019-05-08 | 2023-01-20 | 宿迁学院 | 一种基于k-均值聚类的软件测试目标路径选择方法 |
CN110084321A (zh) * | 2019-05-08 | 2019-08-02 | 牡丹江师范学院 | 一种基于k-均值聚类的软件测试目标路径选择方法 |
CN112488314B (zh) * | 2020-11-24 | 2021-07-09 | 江苏科技大学 | 一种基于改进遗传算法的系统弹性恢复方法及恢复系统 |
CN112488314A (zh) * | 2020-11-24 | 2021-03-12 | 江苏科技大学 | 一种基于改进遗传算法的系统弹性恢复方法及恢复系统 |
CN116048958A (zh) * | 2022-11-17 | 2023-05-02 | 中山大学 | 医疗机器人控制软件测试数据的生成方法、注入方法 |
CN116048958B (zh) * | 2022-11-17 | 2023-12-01 | 中山大学 | 医疗机器人控制软件测试数据的生成方法、注入方法 |
CN116775499A (zh) * | 2023-08-21 | 2023-09-19 | 中国电信股份有限公司 | 测试数据生成方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102331966A (zh) | 面向路径的软件测试数据进化生成系统 | |
CN102323906B (zh) | 一种基于遗传算法的mc/dc测试数据自动生成方法 | |
Attia et al. | Assessing gaps and needs for integrating building performance optimization tools in net zero energy buildings design | |
CN101093559B (zh) | 一种基于知识发现的专家系统构造方法 | |
CN106168797B (zh) | 一种模块化获取核电站故障树顶事项失效概率的方法 | |
CN109857457B (zh) | 一种在双曲空间中学习源代码中的函数层次嵌入表示方法 | |
CN109933602A (zh) | 一种自然语言与结构化查询语言的转换方法及装置 | |
CN102073708A (zh) | 面向大规模不确定图数据库的子图查询方法 | |
CN106776729B (zh) | 一种大规模知识图谱路径查询预测器构造方法 | |
Aguilar-Ruiz et al. | Natural encoding for evolutionary supervised learning | |
CN114819372A (zh) | 一种基于神经网络的电力消费概率预测方法 | |
CN103473465B (zh) | 基于多目标人工免疫系统的土地资源空间布局优化方法 | |
CN104732067A (zh) | 一种面向流程对象的工业过程建模预测方法 | |
CN113591093A (zh) | 基于自注意力机制的工业软件漏洞检测方法 | |
CN116107279A (zh) | 基于注意力深度神经网络的流程工业能耗多目标优化方法 | |
Mishra et al. | A review of random test case generation using genetic algorithm | |
CN101894063B (zh) | 一种用于微处理器功能验证的测试程序生成方法及装置 | |
Chatzikonstantinou | A 3-dimensional architectural layout generation procedure for optimization applications: DC-RVD | |
Jiang et al. | Test data generation approach for basis path coverage | |
CN102222274A (zh) | 基于调度编码的免疫克隆选择作业车间调度方法 | |
CN111310974A (zh) | 一种基于ga-elm的短期需水预测方法 | |
Stinstra et al. | Metamodeling by symbolic regression and Pareto simulated annealing | |
CN106055742B (zh) | 基于设计熵的产品自适应设计更改方法 | |
Schirru et al. | Genetic algorithms applied to the nuclear power plant operation | |
CN105022798A (zh) | 一种基于预测关系的离散贝叶斯网络分类数据挖掘方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20120125 |