一种基于遗传算法和带权匹配算法的测试案例自动生成方法

文档序号:6603260阅读:270来源:国知局
专利名称:一种基于遗传算法和带权匹配算法的测试案例自动生成方法
技术领域
本发明涉及系统测试技术领域,特别涉及工程测试中的测试案例自动生成方法, 是一种能够显著提高测试案例自动生成质量的方法。
背景技术
在当前的系统工程测试中,白盒测试和黑盒测试是两种普遍应用的测试方法。其 中,黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。在设计 测试案例时,黑盒测试不需要考虑程序的内部结构和内部特性,即避免了引入代码细节,使 得测试案例的设计可以只需依赖程序的功能要求,而不必像白盒测试那样等到代码正式开 发完成再针对代码进行测试案例设计。而黑盒测试案例的生成十分耗费人力,而且测试案 例设计的质量往往与测试人员的专业素质息息相关。例如一个测试案例的使用可能涉及到 很多功能,而这些功能的不同使用顺序会导致不同的测试结果。假设一个应用涉及到300 个相互作用的功能,若需要人力来进行测试案例的设计和生成,很可能就是按照测试人员 的逻辑思维将这300个功能简单串联起来成为一个测试案例,容易漏掉一些潜在的会出错 的功能测试序列。而借助计算机自动进行测试案例的生成就能将这种出错的可能性大大减 小,从而减少对测试人员能力的依赖,同时使得测试案例的生成变得简单和高效。一种典型 的测试案例自动生成方法包括如下步骤1.测试人员选取测试的功能点并加以定义。这些需要测试的功能点可以通过项目 功能说明书进行划定,待测功能点的粒度大小及数量可以按照项目的实际情况进行确定。2.测试人员根据步骤1所定义的功能点设计一个测试案例生成方法,以产生由这 些待测功能点组成的测试案例。其中实现的策略可以是随机、暴力枚举等。在生成测试案 例的过程中,还需要生成对应测试案例的预期测试结果用以比对;生成过程根据测试人员 的要求生成包含不同功能点的测试案例。3.根据步骤2所生成的测试案例及其对应的预期测试结果,测试人员将这些测试 案例在被测对象中进行执行,并将得到的实际运行结果与预期测试结果进行比较,如此就 完成了一个测试案例的测试。在上述自动生成测试案例的方法的实现过程中,使用最多的便是通过随机算法进 行功能操作的枚举,虽然随机枚举这种实现方式能够克服测试人员设计测试案例时的主观 因素,但是由于随机的不可控性,在一个测试案例中会产生很多连续的冗余的代码段,而且 随着生成功能点的增多,生成的测试案例将会变得非常庞大,一旦出现错误,开发人员的调 试任务将会非常繁重。例如,假如需要产生一个300个功能点使用的测试案例,我们假设 1个功能点对应一个操作,那么,一个随机产生的测试案例可能包含有超过1000个功能调 用。但是我们希望这些功能调用尽量精简(这样在交付给开发人员后定位错误比较方便)。如此就产生了一个矛盾既要保证功能点的充分包含,同时还要让测试案例的长 度维持在一个合理的范围,而且还不能丢掉代码生成的随机性。如何很好地解决这一技术
4问题,成为本领域技术人员函待解决的技术难题。

发明内容
本发明的目标是设计一种新型的测试案例自动生成方法,其能够获得高质量的测 试案例集该测试案例集中可以包括多个测试案例,每个测试案例的长度都是相同的,同时 该长度是由测试人员所指定的;每个测试案例都是相互独立的,且每个测试案例都各自覆 盖了一定数量的功能覆盖点;最后能够在比较快的时间里得到一个测试案例集,该测试案 例集中的测试案例都运行之后,能保证需要覆盖的功能点都能被测试到。为了解决上述问题,本发明公开了一种基于遗传算法和带权匹配算法的测试案例 自动生成方法,其包括如下步骤(1)提取并形成测试案例数据结构,该数据结构中包含一个测试案例的具体内容, 同时还包含一个第一覆盖向量,其用来记录该测试中有哪些功能点会被测试到;(2)提取并形成测试案例集的集数据结构,在该集数据结构中,包含若干个测试案 例数据结构,该集数据结构包含一个第二覆盖向量,其用来记录该测试案例集中的测试案 例能够保证哪些功能点被测试到;(3)建立初始种群;(4)根据所述集数据结构建立遗传算法的适应性函数;(5)进入遗传算法部分,在进行交叉的过程中,先基于遗传算法和带权匹配算法对 待交叉的两个个体进行处理,再继续进行遗传算法的交叉,变异,选择过程;(6)迭代得出符合要求的测试案例集,生成测试案例。优选地,步骤(5)中所述的基于遗传算法和带权匹配算法对待交叉的两个个体进 行处理包括如下步骤a以每个个体的适应度为依据,根据概率选择一个适应度高的个体,其具有功能覆
盖向量;b在当前种群中通过相似函数寻找一个与该个体最互补的互补个体,互补个体具 有功能覆盖向量,其中所述个体与互补个体是不相同的个体;c将这两个个体所包含的内容映射到对应的二分图中,该二分图的每个顶点代表 某个测试案例;且二分图的边这样连接对于左半部分的每一个顶点,我们都与另一半边 的顶点相连接,除了与其代表同一测试案例的顶点不连接;使用相似函数衡量每一对测试 案例的相似度,该值作为这个二分图边的权值;将这个二分图作为输入,让带权匹配算法进 行处理,得到需要的相似对,使得总的相似度和最大;d通过返回的测试案例相似对,对该个体和互补个体中的测试案例进行重新调整; 这两个调整过的个体被作为待交叉操作的两个个体,进行余下的交叉操作。优选地,所述相似函数为一辅助函数,其接收两个功能覆盖向量,并返回这两个功 能覆盖向量所关联的两个测试案例或两个测试案例集所覆盖的功能点的相似度。优选地,所述第二覆盖向量的值由该测试案例集中的每一个测试案例的第一覆盖 向量来综合获得。优选地,所述带权匹配算法为Kuhn-Munkres算法。优选地,采用显式编码对存储测试案例的所述案例数据结构和集数据结构的具体
5的内容进行编码。优选地,在所述步骤(1)和(2)中还包括为功能覆盖向量赋值的步骤。优选地,所述为功能覆盖向量赋值的步骤包括a对于每一个测试案例集,通过随机的方法生成指定数量、指定长度的测试案例;b对每个测试案例都进行分析,记录其覆盖了多少功能点,同时赋值每个测试案例 相关的功能覆盖向量;c对于每一个测试案例集,通过其包含的测试案例对应的功能覆盖向量,综合得到 该测试案例集的功能覆盖向量。优选地,步骤(4)中所述的适应性函数通过测试案例集的功能覆盖向量统计出个 体中所包含的测试案例总共覆盖的功能点个数。优选地,所述适应函数为
其中k为功能点个数,di为表示第i个 功能点是否被覆盖的二元变量(取1时覆盖,取0时未覆盖),p为功能覆盖向量,f(p)为 计算测试案例或测试案例集覆盖的不同功能点数量的函数。本发明与现有的方法相比,具备以下优点1.该方法能够解决普通遗传算法所不 能解决的测试案例覆盖质量的问题,具有很大的应用价值;2.该方法对于原测试框架没有 影响,整合进入比较方便;在涉及的测试案例自动生成的地方,该方法都能比较简单的整入 到原来的测试流程中,从而提高生成的测试案例的质量;3.该方法的提出建立在两个成熟 算法之上,使用较为安全。


图1 传统的遗传算法流程图;图2本发明中涉及的A和B个体所包含测试案例的功能点覆盖向量图;图3本发明中涉及的优化算法在整个遗传算法框架中所处的位置示意图;图4本发明中涉及的优化算法流程图;图5本发明中的测试案例的编码形式示意图;图6本发明中的测试案例在二分图中与顶点的映射关系示意图;图7本发明中的测试案例二分图表示的边权值情况示意图。
具体实施例方式发明原理本发明的测试案例自动生成方法是建立在遗传算法之上,在遗传算法进行交叉的 过程中,对两个待交叉的个体所包含的测试案例映射到二分图的顶点上,用这些测试案例 覆盖功能的相似度作为这个二分图边的权值本,然后通过Kuhn-Mimkres算法处理这个二 分图,对每一个测试案例找到一个唯一的、测试尽可能多相同功能点的测试案例,最后通过 这些相似测试案例对来调整两个待交叉个体中的测试案例,使得整个遗传算法因此能获得 更好的执行效果。本发明的特点就是通过一个优化技术,将一般方法不能生成的这样具有 高随机性、高覆盖性同时还具有一定的测试案例长度限制的测试案例集。本优化技术的算 法复杂度是多项式级的0(rT3),对遗传算法的每一代迭代运算的时间影响很小。遗传算法是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,它的一般算法流程包括1.创建一个随机的初始状态2.评估每个个体的适应度3.判断是否有满足要求的个体,若有,则返回;若无,则继续4操作4.繁殖(包括交叉和变异)5.产生下一代,返回步骤2遗传算法是一种建立在随机方法之上的优化算法,它还是要依靠随机算法生成一 定数量的原始解,通过每一阶段的迭代操作,将这些初始解进行交叉和变异操作,然后淘汰 掉质量差的个体,使得最后的解慢慢接近于最优的解。利用遗传算法能够显著的提高生成 的测试案例的质量。在使用遗传算法的过程中,最重要的就是对每一阶段产生的数据进行评估,该部 分的评估通常通过定义一个评估函数来实现。对于之前描述的测试案例生成过程来说,这 个评估函数是比较明显的,对于一个测试案例来说,在测试案例的长度确定之后,覆盖越多 功能点其适应度(也就是测试案例的质量)就越高。以上描述的步骤是非常通用的遗传算法应用,虽然是通用的方法,对于特定的问 题,遗传算法还是需要具体的修改以使得其能够更为有效的处理特定的优化问题,在本发 明中,就在遗传算法中的交叉环节中采用了 Kuhn-Mimkres带权匹配算法对两个待交叉的 个体进行处理,使得交叉能够更为有效的调整测试案例集合,产生比一般测试案例生成方 法更有质量的测试案例。Kuhn-Munkres带权匹配算法又被称为匈牙利算法,该算法主要用来获得一个匹配 集合,使得该匹配集合中的边的权值最大或者最小。我们在遗传算法的交叉过程中,将两个 待交叉个体中包含的测试案例映射到二分图中,再赋予适当的权值,最后通过该算法获得 一个匹配集合,继而通过这个匹配集合调整两个个体中的测试案例,获得更好的交叉后代。实施例下面结合附图,对本发明的测试案例自动生成方法作详细阐述。该测试案例自动生成方法具体包括如下步骤1.提取并形成测试案例数据结构(SingleTestCase)。该SingleTestCase里包含 了一个测试案例的具体内容,同时还包含一个覆盖向量Pc (称之为第一覆盖向量),用来记 录该测试中有哪些功能点会被测试到。Pc的值通过测试人员分析该测试案例得到,例如通 过开发的解析程序实现。2.提取并形成测试案例集的集数据结构(TestCaseSet)。在TestCaseSet中,包 含若干个SingleTestCase,即该测试案例集含有多少测试案例,就在该数据结构中包含多 少个SingleTestCase类型的变量来记录。同时,该TestCaseSet中也包含一个覆盖向量 Ps(称之为第二覆盖向量),用来记录该测试案例集中的测试案例能够保证哪些功能点被 测试到,Ps的值由该测试案例集中的每一个测试案例的Pc来综合获得。例如,我们设一个 测试案例集含有3个测试案例,它们的覆盖向量分别是Pel = <1,0,1,0,1>,Pc2 = <1,1,0, 0,0>,Pc3 = <0,0,1,0,0>,其中,测试案例的覆盖向量的每一维代表一个待测的功能点,若 对应的维度取0,则表明该功能没有被该测试案例覆盖到,若为1,则表明该功能被覆盖了。 这样,通过Pel,Pc2, Pc3,我们就可以得到Ps = <1,1,1,0,1>,这个测试案例集覆盖向量就
7表明了若将这个测试案例集的测试案例都进行测试的话,所覆盖功能点的情况。推导的方 法很简单,只要将Pel,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 = <dl,d2,d3,…,dk>,这 样适应函数
,其中,di为表示第i个功能点是否被覆盖的二元变量(取1时 覆盖,取0时未覆盖),p为功能覆盖向量,f(p)为计算测试案例或测试案例集覆盖的不同 功能点数量的函数。这个函数是很好理解的,即通过测试案例集的功能覆盖向量,我们统计 出该个体中所包含的测试案例总共覆盖了多少个功能点,覆盖的功能点越多,该个体在整 一代中的适应度函数值就越高,被选择留下来的几率就越高。5.进入遗传算法部分,其中在进行交叉的过程中,先使用本发明的下述的优化技 术对待交叉的两个个体进行处理,再继续进行一般通用的遗传算法的交叉,变异,选择等过 程,直至迭代得出符合要求的测试案例集。传统的遗传算法流程如图1所示。我们这里着 重介绍下本方法所提供的优化功能的理论依据。我们假设被测的应用程序含有5个待测功 能点,分别为Sl,s2,…,s5。等待进行进行交叉操作的两个个体A和B分别包含3个测试案 例,其中A的三个测试案例分别表示为a,b,c ;B中的三个测试案例分别表示为d,e, f。这些测试案例的功能点覆盖情况如图2所示,从图2中我们可以知道,测试案例集A中的测试 案例a,b,c累计覆盖了 4个不同的功能点Sl,s2, s3, s4 ;测试案例集B中的测试案例d,e, f 累计覆盖了 3个不同的功能点Sl,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 = <l,0,l,0,0>,KWSimilarity(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-Mimkres带权匹配算法对这个 二分图进行处理,为每一个测试案例找到唯一的另一个相似测试案例,使得最后的边权值 的和最大。例如图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中的测试案例尽量不相同,这样,就能使得测试案例集所覆盖的功能点尽可
10能多。最后,这两个调整过的个体A和B将作为待交叉操作的两个个体,进行余下的交叉操作。 上面以举例方式对本发明进行了说明,但本发明不限于上述具体实施例,凡基于 本发明所做的任何改动或变型均属于本发明要求保护的范围。
权利要求
一种基于遗传算法和带权匹配算法的测试案例自动生成方法,其特征在于,具体包括以下步骤(1)提取并形成测试案例数据结构,该数据结构中包含一个测试案例的具体内容,同时还包含一个第一覆盖向量(Pc),其用来记录该测试中有哪些功能点会被测试到;(2)提取并形成测试案例集的集数据结构,在该集数据结构中,包含若干个测试案例数据结构,该集数据结构包含一个第二覆盖向量(Ps),其用来记录该测试案例集中的测试案例能够保证哪些功能点被测试到;(3)建立初始种群;(4)根据所述集数据结构建立遗传算法的适应性函数;(5)进入遗传算法部分,在进行交叉的过程中,先基于遗传算法和带权匹配算法对待交叉的两个个体进行处理,再继续进行遗传算法的交叉,变异,选择过程;(6)迭代得出符合要求的测试案例集,生成测试案例。
2.根据权利要求1所述的测试案例自动生成方法,其特征在于,步骤(5)中所述的基于 遗传算法和带权匹配算法对待交叉的两个个体进行处理包括如下步骤a.以每个个体的适应度为依据,根据概率选择一个适应度高的个体(A),其具有功能 覆盖向量(Pa);b.在当前种群中通过相似函数寻找一个与该个体(A)最互补的互补个体(B),互补个 体(B)具有功能覆盖向量(Pb),其中所述个体(A)与互补个体(B)是不相同的个体;c.将这两个个体所包含的内容映射到对应的二分图中,该二分图的每个顶点代表某个 测试案例;且二分图的边这样连接左半部分的每一个顶点都与另一半边的顶点相连接, 除了与其代表同一测试案例的顶点不连接;使用相似函数衡量每一对测试案例的相似度, 该值作为这个二分图边的权值;将这个二分图作为输入,用带权匹配算法进行处理,得到需 要的相似对,使得总的相似度和最大;d.通过返回的测试案例相似对,对该个体(A)和互补个体(B)中的测试案例进行重新 调整;这两个调整过的个体被作为待交叉操作的两个个体,进行余下的交叉操作。
3.根据权利要求2所述的测试案例自动生成方法,其特征在于,所述相似函数为一辅 助函数,其接收两个功能覆盖向量,并返回这两个功能覆盖向量所关联的两个测试案例或 两个测试案例集所覆盖的功能点的相似度。
4.根据权利要求1所述的测试案例自动生成方法,其特征在于,所述第二覆盖向量 (Ps)的值由该测试案例集中的每一个测试案例的第一覆盖向量(Pc)来综合获得。
5.根据权利要求1所述的测试案例自动生成方法,其特征在于,所述带权匹配算法为 Kuhn-Munkres 算法。
6.根据权利要求1所述的测试案例自动生成方法,其特征在于,采用显式编码对存储 测试案例的所述案例数据结构和集数据结构的具体的内容进行编码。
7.根据权利要求1所述的测试案例自动生成方法,其特征在于,在所述步骤(1)和(2) 中还包括为功能覆盖向量赋值的步骤。
8.根据权利要求7所述的测试案例自动生成方法,其特征在于,所述为功能覆盖向量 赋值的步骤包括a)对于每一个测试案例集,通过随机的方法生成指定数量、指定长度的测试案例;b)对每个测试案例都进行分析,记录其覆盖功能点的个数,同时赋值每个测试案例相 关的功能覆盖向量;C)对于每一个测试案例集,通过其包含的测试案例对应的功能覆盖向量,综合得到该 测试案例集的功能覆盖向量。
9.根据权利要求1所述的测试案例自动生成方法,其特征在于,步骤(4)中所述的适应 性函数通过测试案例集的功能覆盖向量统计出个体中所包含的测试案例总共覆盖的功能 点个数。
10.根据权利要求9所述的测试案例自动生成方法,其特征在于,所述适应函数为 m =其中k为功能点个数,di为表示第i个功能点是否被覆盖的二元变量,ρ为 功能覆盖向量,f (P)为计算测试案例或测试案例集覆盖的不同功能点数量的函数。
全文摘要
本发明涉及工程测试中的测试案例自动生成方法,属于系统测试技术领域,是一种能够显著提高测试案例自动生成质量的方法,其特点是在现有测试案例自动生成方法中融入遗传算法和带权匹配算法,使得应用该方法能够自动获得高质量的测试案例集测试案例集中包括多个测试案例,每个测试案例的长度相同,同时该长度由测试人员指定;每个测试案例相互独立,且每个测试案例都各自覆盖了一定数量的功能覆盖点;能够在较快时间里得到一个测试案例集,该测试案例集中的测试案例都运行之后,能保证需要覆盖的功能点都能被测试到。
文档编号G06F11/36GK101853202SQ20101018685
公开日2010年10月6日 申请日期2010年5月28日 优先权日2010年5月28日
发明者周霖, 姚刘杰, 张成硕, 李红, 王铸, 顾宗华 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1