CN101853202B - 一种基于遗传算法和带权匹配算法的测试案例自动生成方法 - Google Patents
一种基于遗传算法和带权匹配算法的测试案例自动生成方法 Download PDFInfo
- Publication number
- CN101853202B CN101853202B CN 201010186855 CN201010186855A CN101853202B CN 101853202 B CN101853202 B CN 101853202B CN 201010186855 CN201010186855 CN 201010186855 CN 201010186855 A CN201010186855 A CN 201010186855A CN 101853202 B CN101853202 B CN 101853202B
- Authority
- CN
- China
- Prior art keywords
- test cases
- test
- collection
- function
- functional coverage
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Measuring Or Testing Involving Enzymes Or Micro-Organisms (AREA)
Abstract
本发明涉及工程测试中的测试案例自动生成方法,属于系统测试技术领域,是一种能够显著提高测试案例自动生成质量的方法,其特点是在现有测试案例自动生成方法中融入遗传算法和带权匹配算法,使得应用该方法能够自动获得高质量的测试案例集:测试案例集中包括多个测试案例,每个测试案例的长度相同,同时该长度由测试人员指定;每个测试案例相互独立,且每个测试案例都各自覆盖了一定数量的功能覆盖点;能够在较快时间里得到一个测试案例集,该测试案例集中的测试案例都运行之后,能保证需要覆盖的功能点都能被测试到。
Description
技术领域
本发明涉及系统测试技术领域,特别涉及工程测试中的测试案例自动生成方法,是一种能够显著提高测试案例自动生成质量的方法。
背景技术
在当前的系统工程测试中,白盒测试和黑盒测试是两种普遍应用的测试方法其中,黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。在设计测试案例时,黑盒测试不需要考虑程序的内部结构和内部特性,即避免了引入代码细节,使得测试案例的设计可以只需依赖程序的功能要求,而不必像白盒测试那样等到代码正式开发完成再针对代码进行测试案例设计。而黑盒测试案例的生成十分耗费人力,而且测试案例设计的质量往往与测试人员的专业素质息息相关。例如一个测试案例的使用可能涉及到很多功能,而这些功能的不同使用顺序会导致不同的测试结果。假设一个应用涉及到300个相互作用的功能,若需要人力来进行测试案例的设计和生成,很可能就是按照测试人员的逻辑思维将这300个功能简单串联起来成为一个测试案例,容易漏掉一些潜在的会出错的功能测试序列。而借助计算机自动进行测试案例的生成就能将这种出错的可能性大大减小,从而减少对测试人员能力的依赖,同时使得测试案例的生成变得简单和高效。
一种典型的测试案例自动生成方法包括如下步骤:
1.测试人员选取测试的功能点并加以定义。这些需要测试的功能点可以通过项目功能说明书进行划定,待测功能点的粒度大小及数量可以按照项目的实际情况进行确定。
2.测试人员根据步骤1所定义的功能点设计一个测试案例生成方法,以产生由这些待测功能点组成的测试案例。其中实现的策略可以是随机、暴力枚举等。在生成测试案例的过程中,还需要生成对应测试案例的预期测试结果用以比对;生成过程根据测试人员的要求生成包含不同功能点的测试案例。
3.根据步骤2所生成的测试案例及其对应的预期测试结果,测试人员将这些测试案例在被测对象中进行执行,并将得到的实际运行结果与预期测试结果进行比较,如此就完成了一个测试案例的测试。
在上述自动生成测试案例的方法的实现过程中,使用最多的便是通过随机算法进行功能操作的枚举,虽然随机枚举这种实现方式能够克服测试人员设计测试案例时的主观因素,但是由于随机的不可控性,在一个测试案例中会产生很多连续的冗余的代码段,而且随着生成功能点的增多,生成的测试案例将会变得非常庞大,一旦出现错误,开发人员的调试任务将会非常繁重。例如,假如需要产生一个300个功能点使用的测试案例,我们假设1个功能点对应一个操作,那么,一个随机产生的测试案例可能包含有超过1000个功能调用。但是我们希望这些功能调用尽量精简(这样在交付给开发人员后定位错误比较方便)。
如此就产生了一个矛盾:既要保证功能点的充分包含,同时还要让测试案例的长度维持在一个合理的范围,而且还不能丢掉代码生成的随机性。如何很好地解决这一技术问题,成为本领域技术人员函待解决的技术难题。
发明内容
本发明的目标是设计一种新型的测试案例自动生成方法,其能够获得高质量的测试案例集:该测试案例集中可以包括多个测试案例,每个测试案例的长度都是相同的,同时该长度是由测试人员所指定的;每个测试案例都是相互独立的,且每个测试案例都各自覆盖了一定数量的功能覆盖点;最后能够在比较快的时间里得到一个测试案例集,该测试案例集中的测试案例都运行之后,能保证需要覆盖的功能点都能被测试到。
为了解决上述问题,本发明公开了一种基于遗传算法和带权匹配算法的测试案例自动生成方法,其包括如下步骤:
(1)提取并形成测试案例数据结构,该数据结构中包含一个测试案例的具体内容,同时还包含一个第一覆盖向量,其用来记录该测试中有哪些功能点会被测试到;
(2)提取并形成测试案例集的集数据结构,在该集数据结构中,包含若干个测试案例数据结构,该集数据结构包含一个第二覆盖向量,其用来记录该测试案例集中的测试案例能够保证哪些功能点被测试到;
(3)建立初始种群;
(4)根据所述集数据结构建立遗传算法的适应性函数;
(5)进入遗传算法部分,在进行交叉的过程中,先基于遗传算法和带权匹配算法对待交叉的两个个体进行处理,再继续进行遗传算法的交叉,变异,选择过程;
(6)迭代得出符合要求的测试案例集,生成测试案例。
优选地,步骤(5)中所述的基于遗传算法和带权匹配算法对待交叉的两个个体进行处理包括如下步骤:
a以每个个体的适应度为依据,根据概率选择一个适应度高的个体,其具有功能覆盖向量;
b在当前种群中通过相似函数寻找一个与该个体最互补的互补个体,互补个体具有功能覆盖向量,其中所述个体与互补个体是不相同的个体;
c将这两个个体所包含的内容映射到对应的二分图中,该二分图的每个顶点代表某个测试案例;且二分图的边这样连接:对于左半部分的每一个顶点,我们都与另一半边的顶点相连接,除了与其代表同一测试案例的顶点不连接;使用相似函数衡量每一对测试案例的相似度,使用相似函数得到的相似度值作为这个二分图边的权值;将这个二分图作为输入,让带权匹配算法进行处理,得到需要的相似对,使得总的相似度和最大;
d通过返回的测试案例相似对,对该个体和互补个体中的测试案例进行重新调整;这两个调整过的个体被作为待交叉操作的两个个体,进行余下的交叉操作。
优选地,所述相似函数为一辅助函数,其接收两个功能覆盖向量,并返回这两个功能覆盖向量所关联的两个测试案例或两个测试案例集所覆盖的功能点的相似度。
优选地,所述第二覆盖向量的值由该测试案例集中的每一个测试案例的第一覆盖向量来综合获得。
优选地,所述带权匹配算法为Kuhn-Munkres算法。
优选地,采用显式编码对存储测试案例的所述案例数据结构和集数据结构的具体的内容进行编码。
优选地,在所述步骤(1)和(2)中还包括为功能覆盖向量赋值的步骤。
优选地,所述为功能覆盖向量赋值的步骤包括:
a对于每一个测试案例集,通过随机的方法生成指定数量、指定长度的测试案例;
b对每个测试案例都进行分析,记录其覆盖了多少功能点,同时赋值每个测试案例相关的功能覆盖向量;
c对于每一个测试案例集,通过其包含的测试案例对应的功能覆盖向量,综合得到该测试案例集的功能覆盖向量。
优选地,步骤(4)中所述的适应性函数通过测试案例集的功能覆盖向量统计出个体中所包含的测试案例总共覆盖的功能点个数。
本发明与现有的方法相比,具备以下优点:1.该方法能够解决普通遗传算法所不能解决的测试案例覆盖质量的问题,具有很大的应用价值;2.该方法对于原测试框架没有影响,整合进入比较方便;在涉及的测试案例自动生成的地方,该方法都能比较简单的整入到原来的测试流程中,从而提高生成的测试案例的质量;3.该方法的提出建立在两个成熟算法之上,使用较为安全。
附图说明
图1:传统的遗传算法流程图;
图2本发明中涉及的A和B个体所包含测试案例的功能点覆盖向量图;
图3本发明中涉及的优化算法在整个遗传算法框架中所处的位置示意图;
图4本发明中涉及的优化算法流程图;
图5本发明中的测试案例的编码形式示意图;
图6本发明中的测试案例在二分图中与顶点的映射关系示意图;
图7本发明中的测试案例二分图表示的边权值情况示意图。
具体实施方式
发明原理:
本发明的测试案例自动生成方法是建立在遗传算法之上,在遗传算法进行交叉的过程中,对两个待交叉的个体所包含的测试案例映射到二分图的顶点上,用这些测试案例覆盖功能的相似度作为这个二分图边的权值本,然后通过Kuhn-Munkres算法处理这个二分图,对每一个测试案例找到一个唯一的、测试尽可能多相同功能点的测试案例,最后通过这些相似测试案例对来调整两个待交叉个体中的测试案例,使得整个遗传算法因此能获得更好的执行效果。本发明的特点就是通过一个优化技术,将一般方法不能生成的这样具有高随机性、高覆盖性同时还具有一定的测试案例长度限制的测试案例集。本优化技术的算法复杂度是多项式级的0(n^3),对遗传算法的每一代迭代运算的时间影响很小。
遗传算法是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,它的一般算法流程包括:
1.创建一个随机的初始状态
2.评估每个个体的适应度
3.判断是否有满足要求的个体,若有,则返回;若无,则继续4操作
4.繁殖(包括交叉和变异)
5.产生下一代,返回步骤2
遗传算法是一种建立在随机方法之上的优化算法,它还是要依靠随机算法生成一定数量的原始解,通过每一阶段的迭代操作,将这些初始解进行交叉和变异操作,然后淘汰掉质量差的个体,使得最后的解慢慢接近于最优的解。利用遗传算法能够显著的提高生成的测试案例的质量。
在使用遗传算法的过程中,最重要的就是对每一阶段产生的数据进行评估,该部分的评估通常通过定义一个评估函数来实现。对于之前描述的测试案例生成过程来说,这个评估函数是比较明显的,对于一个测试案例来说,在测试案例的长度确定之后,覆盖越多功能点其适应度(也就是测试案例的质量)就越高。
以上描述的步骤是非常通用的遗传算法应用,虽然是通用的方法,对于特定的问题,遗传算法还是需要具体的修改以使得其能够更为有效的处理特定的优化问题,在本发明中,就在遗传算法中的交叉环节中采用了Kuhn-Munkres带权匹配算法对两个待交叉的个体进行处理,使得交叉能够更为有效的调整测试案例集合,产生比一般测试案例生成方法更有质量的测试案例。
Kuhn-Munkres带权匹配算法又被称为匈牙利算法,该算法主要用来获得一个匹配集合,使得该匹配集合中的边的权值最大或者最小。我们在遗传算法的交叉过程中,将两个待交叉个体中包含的测试案例映射到二分图中,再赋予适当的权值,最后通过该算法获得一个匹配集合,继而通过这个匹配集合调整两个个体中的测试案例,获得更好的交叉后代。
实施例:
下面结合附图,对本发明的测试案例自动生成方法作详细阐述。
该测试案例自动生成方法具体包括如下步骤:
1.提取并形成测试案例数据结构(SingleTestCase)。该SingleTestCase里包含了一个测试案例的具体内容,同时还包含一个覆盖向量Pc(称之为第一覆盖向量),用来记录该测试中有哪些功能点会被测试到。Pc的值通过测试人员分析该测试案例得到,例如通过开发的解析程序实现。
2.提取并形成测试案例集的集数据结构(TestCaseSet)。在TestCaseSet中,包含若干个SingleTestCase,即该测试案例集含有多少测试案例,就在该数据结构中包含多少个SingleTestCase类型的变量来记录。同时,该TestCaseSet中也包含一个覆盖向量Ps(称之为第二覆盖向量),用来记录该测试案例集中的测试案例能够保证哪些功能点被测试到,Ps的值由该测试案例集中的每一个测试案例的Pc来综合获得。例如,我们设一个测试案例集含有3个测试案例,它们的覆盖向量分别是Pc1=<1,0,1,0,1>,Pc2=<1,1,0,0,0>,Pc3=<0,0,1,0,0>,其中,测试案例的覆盖向量的每一维代表一个待测的功能点,若对应的维度取0,则表明该功能没有被该测试案例覆盖到,若为1,则表明该功能被覆盖了。这样,通过Pc1,Pc2,Pc3,我们就可以得到Ps=<1,1,1,0,1>,这个测试案例集覆盖向量就表明了若将这个测试案例集的测试案例都进行测试的话,所覆盖功能点的情况。推导的方法很简单,只要将Pc1,Pc2,Pc3的对应维度进行取或操作,最后的值就是Ps对应维度的值。这里的TestCaseSet对应于遗传算法中的一个个体,是遗传算法进行交叉和选择的目标。
SingleTestCase中存储测试案例的具体的内容需要进行适当的编码,在经典的遗传算法中,由0和1组成的二进制串被用来对具体的内容进行编码,这种编码的方式对于遗传算法的交叉和变异过程来说非常方便。但是对于本发明来说,因为需要在每一代生成的时候对每个测试案例进行衡量,判断该测试案例的功能点覆盖情况,所以我们就采用了显式编码的方法,即如图5所示,我们可以开一个足够大的数组,该数组被划分为等长的段,每一段的开头存储一个具体的功能调用,该段的其余部分就存储该操作所需要的参数。这样的编码大大简化了遗传算法对个体的评估过程。
知道了具体的编码方式之后,SingleTestCase和TestCaseSet的数据结构就可以定义了,SingleTestCase除了1所说明的编码方式之外,还需要为每一个测试案例定义一个相对应的功能覆盖向量来表明该测试案例实际能够测试到的功能点的情况。其中TestCaseSet由多个SingleTestCase组成(数量由测试人员指定),同样也需要定义一个对应的表示功能覆盖的功能向量。对这些数据结构的赋值过程是这样的:
a对于每一个测试案例集,通过随机的方法生成指定数量,指定长度的测试案例。
b对每个测试案例都进行分析,记录其覆盖了多少功能点,同时赋值每个测试案例相关的功能覆盖向量。
c对于每一个测试案例集来说,通过其包含的测试案例对应的功能覆盖向量,综合得到该测试案例集的功能覆盖向量。
3.根据遗传算法的要求建立初始种群,即假定测试人员指定了种群的大小(即测试案例集的数量)为N,每个个体(即测试案例集)中包含M个独立的测试案例,每个测试案例的长度指定为L。这样,通过随机的方法,生成M个独立的测试案例,并将这些案例存储到SingleTestCase中,然后再将这些SingleTestCase分配到N个测试案例集中。最后再将这些测试案例对应的覆盖向量Pc赋值,对每个测试案例集覆盖向量Ps进行赋值。
4.根据上述提供的TestCaseSet,我们根据该数据结构设计遗传算法的适应性函数,测试人员对测试案例集的要求就是覆盖尽可能多的功能点,这样,当被测试程序被定义了k个功能点时,对于个体A,其对应的功能覆盖向量假设为P=<d1,d2,d3,…,dk>,这样适应函数其中,di为表示第i个功能点是否被覆盖的二元变量(取1时覆盖,取0时未覆盖),p为功能覆盖向量,f(p)为计算测试案例或测试案例集覆盖的不同功能点数量的函数。这个函数是很好理解的,即通过测试案例集的功能覆盖向量,我们统计出该个体中所包含的测试案例总共覆盖了多少个功能点,覆盖的功能点越多,该个体在整一代中的适应度函数值就越高,被选择留下来的几率就越高。
5.进入遗传算法部分,其中在进行交叉的过程中,先使用本发明的下述的优化技术对待交叉的两个个体进行处理,再继续进行一般通用的遗传算法的交叉,变异,选择等过程,直至迭代得出符合要求的测试案例集。传统的遗传算法流程如图1所示。我们这里着重介绍下本方法所提供的优化功能的理论依据。我们假设被测的应用程序含有5个待测功能点,分别为s1,s2,…,s5.等待进行进行交叉操作的两个个体A和B分别包含3个测试案例,其中A的三个测试案例分别表示为a,b,c;B中的三个测试案例分别表示为d,e,f。这些测试案例的功能点覆盖情况如图2所示,从图2中我们可以知道,测试案例集A中的测试案例a,b,c累计覆盖了4个不同的功能点s1,s2,s3,s4;测试案例集B中的测试案例d,e,f累计覆盖了3个不同的功能点s1,s2,s5。从图2中,我们可以很容易发现一个现象,若我们对个体A和B应用遗传算法中经典的三种交叉方法:单点交叉,两点交叉,均匀交叉。我们将无法获得功能覆盖点超过4的新个体(因为以上交叉方法的原理是产生由1和0组成的掩码,来决定对应位置上的测试案例是否交换,在图2中,就是指(a,d),(b,e),(c,f)这三对测试案例是否交换)。从图2中还可以观察到一个现象,例如在个体A中,测试案例a其实已经覆盖了整个测试案例集覆盖的4个功能点,换句话说就是,a其实在一定程度上具有整个测试案例集所具有的测试功能,其余的两个测试案例b和c即使被移除,也不会影响整个测试案例集的功能覆盖点的数量。本发明的优化技术即是基于这两个现象而产生的。首先我们定义一个辅助函数Similarity(p,q),该辅助函数接收的两个功能覆盖向量(可以是测试案例的功能向量,也可以是测试案例集的功能向量),该函数能够返回这两个功能覆盖向量所关联的两个测试案例(或两个测试案例集)所覆盖的功能点的相似度。如图2所示,测试案例a,b,c的功能覆盖向量分别为Pa=<1,1,1,1,0>,Pb=<1,1,1,0,0>,Pc=<1,0,1,0,0>,所以Similarity(Pa,Pb)=3,Similarity(Pa,Pc)=2。由这几个数据可以看出,若将测试案例b,c从测试案例集A中移除,对测试案例集A的功能覆盖点的数量没有影响。其原因就是,随机生成的两个测试案例b,c所覆盖的功能点都被测试案例a所覆盖了,在测试中,我们希望一个测试案例集能覆盖尽量多的功能点,但是这种覆盖相似功能点的测试案例却影响着遗传算法的最后效果。如果我们能发现这些覆盖相似功能点的测试案例,再选择将这些覆盖相似功能点的测试案例与其它个体相交换,换回覆盖其它不同功能点的测试案例,那么,我们就能提升该测试案集的功能覆盖数量。而被交换出去的测试案例也没有被抛弃,而是被调整到其它个体中,其覆盖的功能点也有极大的概率提高另一个个体的功能覆盖数量,这样就使得整个遗传算法中每一代的每一个个体都能有大的覆盖率的提升。这样,使得迭代产的结果质量上升,同时使得其迭代的结果更为稳定,退化的现象减少。因为传统遗传算法的交叉过程并不能分辨出有哪些个体是覆盖相同功能点的,其交叉算法都是针对两个个体相同位置进行交换,所以这种交叉方式对于提高功能覆盖率并没有帮助,因为若像图2中所示的情况,将案例a与案例d相交换,个体A最多覆盖4个功能点,而B也只能覆盖4个功能点;但是若我们将个体A中相似的两个测试案例a和b分开,将b与d相交换,那么,就可以使得个体A的功能点覆盖提升到5,同时B也能覆盖比原来高的3个功能点。因此,对于如图2的情况,我们建立如图6所示的二分图,我们使用Similarity函数衡量每一对测试案例的相似度,使用相似函数得到的相似度值作为这个二分图边的权值。二分图中的每个点代表一个测试案例。在建立这个二分图之后,我们就是用Kuhn-Munkres带权匹配算法对这个二分图进行处理,为每一个测试案例找到唯一的另一个相似测试案例,使得最后的边权值的和最大。例如图2所示的情况,可能的匹配对及其权值的情况如下:Similarity(a,b)=4,Similarity(a,c)=2,Similarity(a,d)=0Similarity(a,e)=1,Similarity(a,f)=2,Similarity(b,c)=2Similarity(b,d)=0,Similarity(b,e)=1,Similarity(b,f)=2Similarity(c,d)=0,Similarity(c,e)=1,Similarity(c,f)=1Similarity(d,e)=0,Similarity(d,f)=0,Similarity(e,f)=1
我们要从这些序对中挑选3对,使得每一个测试案例都只出现一次,而且使得这三对Similarity值最大。这个工作我们就交给Kuhn-Munkres带权匹配算法来完成。我们应用Kuhn-Munkres带权匹配算法之后,就能选出(a,b),(c,f),(d,e)这一组符合之上所述条件的结果。对于这些找出的测试案例对来说,每一对测试案例都必须分配到不同的两个个体中(A或者B),例如测试案例对(a,b),a和b不能同时分配到A或者B中。这样,我们通过将每一个测试案例对中的测试案例分别分配到两个个体中,我们就可以重新获得两个新的调整过的个体A’和B’。这样,在A’和B’中处于相同位置的测试案例就是相似的测试案例,我们就可以继续在这两个新的个体上使用遗传算法的交叉过程。我们的优化在整个生物算法流程中所处的位置如图3所示。这个优化算法产生的效果可以用生物学的观点来解释,在生物体的染色体中,两条互相缠绕的DNA链上对应位置的基因控制着同一种功能,在生物体中也经常会出现染色体上控制相同功能的基因片段进行互换,这样就不会影响整个生物体的功能。我们的优化找到的就是这些相似功能的基因片段,并将它们分配到两个不同DNA链上的同一位置。
6.迭代得出符合要求的测试案例集,生成测试案例。
其中,所述基于遗传算法和带权匹配算法对待交叉的两个个体进行处理(亦即优化)如图4所示,具体包括如下步骤::
a)首先以每个个体的适应度为依据,根据概率选择一个适应度高的个体A(适应度越大,被选择的概率越高)。A的功能覆盖向量为Pa;
b)在当前种群中通过相似函数(Similarity函数)寻找一个与A最互补的个体B,B的功能覆盖向量为Pb。即使得Similarity(Pa,Pb)的值最小,其中A与B是不相同的个体。我们假设这里的A、B的具体情况与图2中的A、B相同。
c)将这两个个体所包含的映射到对应的二分图中,如图6所示,我们建立这个二分图,这个二分图的每个顶点代表了某一个测试案例。二分图的边是这样连接的:对于左半部分的每一个顶点,我们都与另一半边的顶点相连接(除了与其代表同一测试案例的顶点不连接)。即假如一共有6个测试案例,每一个左半部分的顶点将与5个其它代表不同测试案例的右半部分顶点相连接。每条边的权值如图7所示,其中N/A表示边不存在。这样,每一条边就代表一个测试案例相似对的相似度,例如(a,b)这条边就表示测试案例a和测试案例b的覆盖了相同功能点的个数。我们需要注意到一个情况,对于每一对,我们在这个二分图中存在两条边,例如测试案例a和测试案例b,我们有(a,b)和(b,a)这两条边来表示,因为这样有利于Kuhn-Munkres算法进行处理。通过这样表示之后,我们就将这个二分图作为输入,让Kuhn-Munkres算法进行处理,得到需要的相似对,使得总的相似度和最大。Kuhn-Munkres最后得到的结果也是正确结果的两倍,这个并不影响最终的结果。例如,根据图2所示的情况建好如图6的二分图之后,Kuhn-Munkres得到的是这些相似对:(a,b),(c,f),(d,e),(b,a),(f,c),(e,d),由于对称性,我们只需要去掉重复的对数就可以了,最后取(a,b),(c,f)和(d,e)就可以进行调整了。
这样,我们通过这些返回的测试案例相似对,对A和B中的测试案例进行重新调整。即每一对中的两个测试案例分别放在两个不同的测试案例集中(A或者B)。这样的做法使得A或者B中的测试案例尽量不相同,这样,就能使得测试案例集所覆盖的功能点尽可能多。最后,这两个调整过的个体A和B将作为待交叉操作的两个个体,进行余下的交叉操作。
上面以举例方式对本发明进行了说明,但本发明不限于上述具体实施例,凡基于本发明所做的任何改动或变型均属于本发明要求保护的范围。
Claims (7)
1.一种基于遗传算法和带权匹配算法的测试案例自动生成方法,其特征在于,具体包括以下步骤:
(1)提取并形成测试案例数据结构,该数据结构中包含一个测试案例的具体内容,同时还包含一个第一功能覆盖向量Pc,其用来记录该测试中有哪些功能点会被测试到;
(2)提取并形成测试案例集的集数据结构,在该集数据结构中,包含若干个测试案例数据结构,该集数据结构包含一个第二功能覆盖向量Ps,其用来记录该测试案例集中的测试案例能够保证哪些功能点被测试到;
(3)建立初始种群;
其中:k为功能点个数,di为表示第i个功能点是否被覆盖的二元变量,p为功能覆盖向量,f(p)为计算测试案例或测试案例集覆盖的不同功能点数量的函数;
(5)进入遗传算法部分,在进行交叉的过程中,先基于遗传算法和带权匹配算法对待交叉的两个个体进行处理,个体即测试案例集,再继续进行遗传算法的交叉,变异,选择过程,所述的基于遗传算法和带权匹配算法对待交叉的两个个体进行处理包括如下步骤:
a.以每个个体的适应度为依据,根据概率选择一个适应度高的个体A,其具有功能覆盖向量Pa;
b.在当前种群中通过相似函数寻找一个与该个体A最互补的互补个体B,互补个体B具有功能覆盖向量Pb,其中所述个体A与互补个体B是不相同的个体,所述的相似函数为一辅助函数,其接收两个功能覆盖向量,并返回这两个功能覆盖向量所关联的两个测试案例或两个测试案例集所覆盖的功能点的相似度;
c.将这两个个体所包含的内容映射到对应的二分图中,该二分图的每个顶点代表某个测试案例;且二分图的边这样连接:左半部分的每一个顶点都与另一半边的顶点相连接,除了与其代表同一测试案例的顶点不连接;使用相似函数衡量每一对测试案例的相似度,相似函数得到相似度值作为这个二分图边的权值;将这个二分图作为输入,用带权匹配算法进行处理,得到需要的相似对,使得总的相似度和最大;
d.通过返回的测试案例相似对,对该个体A和互补个体B中的测试案例进行重新调整;这两个调整过的个体被作为待交叉操作的两个个体,进行余下的交叉操作;
(6)迭代得出符合要求的测试案例集,生成测试案例。
2.根据权利要求1所述的测试案例自动生成方法,其特征在于,所述第二功能覆盖向量Ps的值由该测试案例集中的每一个测试案例的第一功能覆盖向量Pc来综合获得。
3.根据权利要求1所述的测试案例自动生成方法,其特征在于,所述带权匹配算法为Kuhn-Munkres算法。
4.根据权利要求1所述的测试案例自动生成方法,其特征在于,采用显式编码对存储测试案例的所述案例数据结构和集数据结构的具体的内容进行编码。
5.根据权利要求1所述的测试案例自动生成方法,其特征在于,在所述步骤(1)和(2)中还包括为功能覆盖向量赋值的步骤。
6.根据权利要求5所述的测试案例自动生成方法,其特征在于,所述为功能覆盖向量赋值的步骤包括:
a)对于每一个测试案例集,通过随机的方法生成指定数量、指定长度的测试案例;
b)对每个测试案例都进行分析,记录其覆盖功能点的个数,同时赋值每个测试案例相关的功能覆盖向量;
c)对于每一个测试案例集,通过其包含的测试案例对应的功能覆盖向量,综合得到该测试案例集的功能覆盖向量。
7.根据权利要求1所述的测试案例自动生成方法,其特征在于,步骤(4)中所述的适应性函数通过测试案例集的功能覆盖向量统计出个体中所包含的测试案例总共覆盖的功能点个数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010186855 CN101853202B (zh) | 2010-05-28 | 2010-05-28 | 一种基于遗传算法和带权匹配算法的测试案例自动生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010186855 CN101853202B (zh) | 2010-05-28 | 2010-05-28 | 一种基于遗传算法和带权匹配算法的测试案例自动生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101853202A CN101853202A (zh) | 2010-10-06 |
CN101853202B true CN101853202B (zh) | 2013-06-19 |
Family
ID=42804707
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010186855 Expired - Fee Related CN101853202B (zh) | 2010-05-28 | 2010-05-28 | 一种基于遗传算法和带权匹配算法的测试案例自动生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101853202B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103294595B (zh) * | 2013-05-23 | 2016-06-22 | 西安电子科技大学 | 一种基于遗传算法的软件修复方法 |
CN103593287B (zh) * | 2013-10-30 | 2016-08-17 | 北京信息控制研究所 | 一种基于遗传算法的数据流测试用例自动生成方法 |
US9779013B2 (en) * | 2016-01-12 | 2017-10-03 | Wipro Limited | Method and system for optimizing a test suite comprising plurality of test cases |
CN106411702B (zh) * | 2016-09-13 | 2019-08-20 | 深圳市华傲数据技术有限公司 | 基于图计算引擎的异步消息发送方法及系统 |
CN108549603A (zh) * | 2018-04-11 | 2018-09-18 | 平安普惠企业管理有限公司 | 测试方案生成方法、装置、计算机设备及存储介质 |
CN110502432B (zh) * | 2019-07-23 | 2023-11-28 | 平安科技(深圳)有限公司 | 智能测试方法、装置、设备及可读存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5805795A (en) * | 1996-01-05 | 1998-09-08 | Sun Microsystems, Inc. | Method and computer program product for generating a computer program product test that includes an optimized set of computer program product test cases, and method for selecting same |
CN101551842A (zh) * | 2009-05-05 | 2009-10-07 | 天津大学 | 一种基于模型驱动的安全测试方法 |
-
2010
- 2010-05-28 CN CN 201010186855 patent/CN101853202B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5805795A (en) * | 1996-01-05 | 1998-09-08 | Sun Microsystems, Inc. | Method and computer program product for generating a computer program product test that includes an optimized set of computer program product test cases, and method for selecting same |
CN101551842A (zh) * | 2009-05-05 | 2009-10-07 | 天津大学 | 一种基于模型驱动的安全测试方法 |
Non-Patent Citations (1)
Title |
---|
钱肖英.基于遗传算法的测试数据自动生成方法的研究.《中国优秀硕士学位论文全文数据库》.2009,全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN101853202A (zh) | 2010-10-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101853202B (zh) | 一种基于遗传算法和带权匹配算法的测试案例自动生成方法 | |
CN110059015B (zh) | 种群进化多目标测试用例优先级排序方法 | |
Lobato et al. | Multi-objective genetic algorithm for missing data imputation | |
CN104616062B (zh) | 一种基于多目标遗传规划的非线性系统辨识方法 | |
CN102323906A (zh) | 一种基于遗传算法的mc/dc测试数据自动生成方法 | |
Cuevas et al. | A cuckoo search algorithm for multimodal optimization | |
CN113361680A (zh) | 一种神经网络架构搜索方法、装置、设备及介质 | |
CN102331966A (zh) | 面向路径的软件测试数据进化生成系统 | |
CN105808426A (zh) | 一种用于弱变异测试的路径覆盖测试数据生成方法 | |
CN116204445B (zh) | 测试用例生成方法、装置、代码测试方法、设备及介质 | |
CN102708047B (zh) | 数据流测试用例生成方法 | |
CN110444022A (zh) | 交通流数据分析模型的构建方法和装置 | |
CN114418469B (zh) | 基于lgbm-nsga-ⅲ的盾构近接施工参数多目标优化方法及设备 | |
Ledezma et al. | GA-stacking: Evolutionary stacked generalization | |
CN104732067A (zh) | 一种面向流程对象的工业过程建模预测方法 | |
Riehl et al. | Control of stochastic evolutionary games on networks | |
CN109993205A (zh) | 时间序列预测方法、装置、可读存储介质及电子设备 | |
US11461656B2 (en) | Genetic programming for partial layers of a deep learning model | |
CN103902737A (zh) | 基于群智能算法的投影寻踪分类建模软件及实现 | |
CN109767034A (zh) | 继电保护的定值优化方法、装置、计算机设备和存储介质 | |
CN106156854A (zh) | 一种基于dna编码的支持向量机参数预测方法 | |
CN110879778A (zh) | 一种新的动态反馈和改进型补丁评价的软件自动修复方法 | |
CN116054144A (zh) | 分布式光伏接入的配电网重构方法、系统及存储介质 | |
CN105117330A (zh) | Cnn代码测试方法及装置 | |
CN112749082B (zh) | 一种基于de-th算法的测试用例生成方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130619 Termination date: 20190528 |
|
CF01 | Termination of patent right due to non-payment of annual fee |