面向路径的软件测试数据进化生成系统的制作方法

文档序号:6353019阅读:756来源:国知局
专利名称:面向路径的软件测试数据进化生成系统的制作方法
技术领域
本专利涉及软件测试领域,设计并开发了一个面向路径的软件测试数据自动生成系统。
背景技术
软件测试是软件质量保证的关键,是软件开发中不可缺少的环节,也是软件工程的重要组成部分,测试的效果直接关系到软件产品的质量。据美国工业界的统计,软件测试占整个软件开发周期总成本的50%以上,包括十分耗时、枯燥、非常困难且容易出错的诸多环节。另外,随着计算机控制对象复杂度的不断提高和软件功能的不断增强,软件的规模也在不断地增大。大型系统的代码量甚至达到了千万行以上,这使得软件测试的开销也越来越大。在软件测试工作中最重要的环节就是测试数据的生成,这也是非常耗时的一个环节, 则试数据的合理、准确与否常常关系到整个测试的成败。因此如果将该环节自动化,无疑将会缩短软件的开发周期,提高软件质量。近几十年来,国际上和国内少数研究机构针对不同的计算机语言开发出路径覆盖测试数据生成的系统,其中Scott开发的系统是针对!Fortran语言的,但只考虑了有限的 Fortran语句,如if语句,和一些简单的算术分支谓词以及简单的变量类型;Ferguson和 Korel开发了一个名为TESTGEN的测试数据生成系统,该系统支持fiscal语言编写的程序模块的测试数据生成。这个系统具有以下的限制性只支持整型数据的生成;只支持简单的算术和布尔分支谓词;只支持了 fiscal语言的一个子集,一些很重要的元素不能应用, 如过程等。单锦辉等在2002年《计算机工程与科学》第M卷第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],那么我们用长度为1的二进制编码符号串来表示该参数,若某一个体的编码是X A1Iv1Iv2. .. b2bi,对应的解码公式是
K/min+(‘~x2/—1Wrmax-VminM2C1),该编码方式容易简单,比较易于理解。(2)格雷码编码方式是二进制编码方式的一种变形,其连续的两个整数所对应的编码值仅仅只有一个码位是不同的,其它码位完全相同,因此它可以与二进制编码相互转换,具有提高遗传算法局部搜索能力的作用。(3)实数编码方式是指个体的每个基因值用某一范围内的一个浮点数表示,个体的编码长度等于其输入变量的个数,因为这种编码方式使用的是输入变量的真实值,所以也叫真实值编码方式,具有计算方便,精度较高的特点。适应值函数的选取是遗传算法中最关键的问题,其可被看作是遗传算法与实际问题相结合的接口,对遗传算法的收敛速度和最终获得的结果影响很大,因此把测试数据生成问题转化为函数优化问题的关键就是适应值函数。本发明依据在现有的理论和实践,在本系统中,遗传算法应用在软件测试数据生成使用的适应值函数有以下四种加权法,层接近度,分支距离、层接近度和分支距离的综合,这四种适应值函数设计方法基本上涵盖了目前国内外研究比较成熟的方法。(1)加权法假设解码后的测试数据为X,以χ为被测试程序的输入,穿越的路径记为字符串P(X),字符串的位数记为Ip(X)U设此时目标路径还有n(t)个,记第j条目标路径为Pj,j = 1,2, ...n(t),根据P(X)与?」的匹配程度,计算该个体的适应值,记为f(x)。 记IpjI为目标路径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)与h比较到底k位时相同位的个数,依次作为权值计算个体适应值,个体χ针对目标路径h的适应值函数表示如下(2)层接近度表示输入变量所穿越路径与目标路径的接近程度。假设以种群某一代个体χ为例,该个体对应被测程序P的输入变量,考虑计算个体针对第j条目标路径Pi的适应值t(x),以h表示目标路径P」的节点个数。以χ为输入,运行被测程序P,所穿越的路径记为Ρ(Χ),其穿越控制流程图中节点为Ii1(X)A2(X),…,nk(x)。从第一个节点开始比较Pj与P(x),记相同节点的个数为ns(Pj,P(x))。容易理解,ns(Pj,P(x))反映了两条路径的层接近度,该值越大,说明P」越接近P (χ),从而个体X的质量也就越高。为了方便进化个体的比较,通过除以rdfns(Pj,ρ (χ))标量化到^,1],这时的~( 」,P (χ))就是传统意义上的层接近度。然后令适应值函数f」(x) = l-ns(Pj,p(X),则f」(x)越小越好,当f」(x) =0 时表示个体χ穿越路径即为目标路径。 (3)分支距离反映输入变量要想穿越目标路径的分支,离满足分支语句前件的距离。这里采用分支函数,分支函数是根据分支谓词表达式的类型来确定具体值。比如需要计算分支距离的节点上条件语句为xopy,其中op可能为>,<,彡,彡,=,兴等,用& (χ)表示目标路径h第j个分支所对应的分支函数,那么分支距离的定义根据具体情况可以表示如下
权利要求
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)生成的测试数据,在输出窗口以表格形式输出。详细给出每条目标路径对应的测试数据,以及生成该数据的运行代数,生成所有测试数据所需要的运行时间等具体信息。
全文摘要
本发明开发出一套面向路径的软件测试数据进化生成系统,该系统不仅能够根据用户选择的测试路径,使用遗传算法自动生成穿越目标路径的测试数据,而且在使用遗传算法生成测试数据的过程中,提供了多种可供选择的遗传算法个体编码方式、适应值计算方法、选择方式、交叉方式、变异方式等,方便用户根据不同类型的被测程序选择不同的测试数据生成方法,另外本系统还提供了传统随机法的测试数据生成方法作为对比,真正实现软件测试数据自动化生成。运用本发明系统,不仅使得软件测试效率的大大提高,也节约了软件开发的大量资源,更为国家相关计划和工程的可信软件研发提供了技术支持,促进我国软件业的发展。
文档编号G06F11/36GK102331966SQ20111000489
公开日2012年1月25日 申请日期2011年1月10日 优先权日2011年1月10日
发明者任丽娜, 吴川, 姚香娟, 巩敦卫, 张婉秋, 张岩, 罗永金 申请人:中国矿业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1