CN105808426A - 一种用于弱变异测试的路径覆盖测试数据生成方法 - Google Patents

一种用于弱变异测试的路径覆盖测试数据生成方法 Download PDF

Info

Publication number
CN105808426A
CN105808426A CN201610108003.6A CN201610108003A CN105808426A CN 105808426 A CN105808426 A CN 105808426A CN 201610108003 A CN201610108003 A CN 201610108003A CN 105808426 A CN105808426 A CN 105808426A
Authority
CN
China
Prior art keywords
variation
branch
variation branch
path
difficulty
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.)
Granted
Application number
CN201610108003.6A
Other languages
English (en)
Other versions
CN105808426B (zh
Inventor
不公告发明人
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xuzhou University of Technology
Original Assignee
Xuzhou University of Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xuzhou University of Technology filed Critical Xuzhou University of Technology
Priority to CN201610108003.6A priority Critical patent/CN105808426B/zh
Publication of CN105808426A publication Critical patent/CN105808426A/zh
Application granted granted Critical
Publication of CN105808426B publication Critical patent/CN105808426B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公布了一种用于弱变异测试的路径覆盖测试数据生成方法,目的是将弱变异测试问题转化为路径覆盖问题,从而有效提高变异测试的效率,和生成具有较强检测缺陷能力的测试数据。首先,基于弱变异测试准则构建变异分支,基于变异分支之间的相关度和变异分支的覆盖难度,采取一定的方法生成变异分支相关图;接着,基于该图,按照一定的策略,生成比较容易覆盖的可执行路径集合;然后,构建多路径覆盖测试数据生成问题的多目标优化数学模型;最后采用多种群并行遗传算法生成覆盖这些路径的测试数据。

Description

一种用于弱变异测试的路径覆盖测试数据生成方法
技术领域
本发明涉及计算机软件测试领域,设计了一种用于弱变异测试的路径覆盖测试数据生成方法。该方法区别于原有方法的特色在于,将弱变异测试问题转化为路径覆盖问题,生成的目标路径容易覆盖而且路径集合比较小,覆盖这些路径测试数据有较强的检错能力。
背景技术
软件测试是保证软件质量的重要手段,通过测试,不但能够检测软件可能存在的缺陷,而且能够提高软件的可靠度。变异测试是一种面向缺陷的软件测试方法,通过人工分析的方法,对程序插入缺陷,以模拟真实的缺陷,这些缺陷很大程度上反映软件的真实缺陷。
变异测试是指对原程序的某一语句做微小的合乎语法的变动,如将关系运算符“=”替换为“!=”,产生一个新的程序,该程序称为一个变异体。若以某一测试用例,分别执行变异体和原程序,如果两者的输出不同,那么,称测试数据杀死了该变异体,这种变异测试准则称为强变异测试;如果两者在变异点的状态不同,这种变异测试准则称为弱变异测试。那么,已有研究表明,弱变异测试是强变异测试的有效替代。
一般的,一个程序往往存在很多变异体,为了杀死这些变异体,也需要大量的测试数据;而且,这些测试数据需要同时执行原程序和变异体,因此,变异测试的效率通常很低。为了克服上述缺陷,Papadakis等人在2011年《SoftwareQualityJournal》第19期发表的文章“Automaticallyperformingweakmutationwiththeaidofsymbolicexecution,concolictestingandsearch-basedtesting”一文提到,基于弱变异测试准则杀死变异体的问题,转化为变异条件语句真分支的覆盖问题。为此,对于变异前后的语句s和s',基于弱变异测试的必要条件,构建变异条件语句“ifs!=s'”,其真分支为一个标志语句,简称变异分支;然后,把这些变异分支插入到原程序的变异前的语句s前面,这样便形成了新的被测程序。那么,能够覆盖新程序变异分支的测试数据,一定能够杀死该变异分支对应的变异体。这样做的好处是,能够利用已有的分支覆盖测试数据生成方法,生成变异测试数据。
但是,采用上述方法进行弱变异测试转化,将导致新程序包含大量的变异分支,使得分支覆盖测试数据生成问题非常复杂。如果采用合适的方法,约简新程序中的变异分支,并对约简之后的变异分支,依所属的路径进行分组,那么,能够将分支覆盖问题,转化为路径覆盖问题,这样一来,能够减少需要生成的测试数据,从而提高变异测试的效率。
与变异测试相比,结构覆盖测试近年来取得丰硕的研究成果,尤其路径覆盖的测试结合基于搜索的方法生成测试数据,近年成为来软件测试研究的热点。该方法首先将路径覆盖问题,转化为一个数值函数优化问题,然后,采用进化优化方法,生成期望的测试数据。Xanthakis、Bueno以及Watkins等,分别利用遗传算法,针对串行程序生成覆盖路径的测试数据;田甜等人在2013年《计算机学报》第11期发表的文章“消息传递并行程序路径覆盖测试数据生成问题的模型及其进化求解方法”一文提到用于并行程序的测试数据生成方法。但是,上述这些方法存在的共同缺陷是,一次运行遗传算法,仅能生成覆盖一条路径的测试数据。为了克服上述缺陷,Ahmed等将多路径覆盖测试数据生成问题,转化为多目标优化问题,使得一次运行遗传算法,能够生成覆盖多条路径的测试数据。但是,该方法所有子中群都解决相同的优化问题。
考虑到变异测试不仅可以选择注入缺陷的位置和类型,而且可以根据不同层次的测试,选择变异算子,因此,本发明将弱变异分支问题转化为路径覆盖测试数据生成问题,在被测程序中插装的众多的变异分支,那么,基于弱变异测试准则,生成覆盖目标路径的测试数据,同时,路径中包含的变异分支作为检测缺陷,使生成测试数据的质量大大提高。
发明内容
本发明提出一种用于弱变异测试的路径覆盖测试数据生成方法。该方法,首先根据变异分支的覆盖难度和变异分支之间的相关性,按照一定的策略,生成比较容易覆盖的可执行路径集合;然后基于这些路径的覆盖,建立多目标优化数学模型;最后采用多种群并行遗传算法生成覆盖这些路径的测试数据。
本发明所要解决的技术问题:克服现有弱变异测试效率低的问题,将面向缺陷的弱变异测试问题转化为成熟的路径覆盖问题;并采用遗传算法生成测试数据,这些测试数据不仅能穿越目标路径,而且能发现目标路径中的缺陷,提高了软件测试的效率。
本发明的技术解决方案:一种用于弱变异测试的路径覆盖测试数据生成方法,其特征在于包含以下步骤:
步骤1.将弱变异测试转化为路径覆盖测试
在并行程序中,对原语句s实施某一变异算子,生成变异语句s',由原语句和变异语句构建的变异条件语句为“ifs!=s'”,其真分支简称变异分支。将这些变异分支插装到原程序相应位置,形成新的并行程序,记为S,若S由m(m>1)个进程组成,第i(i=0,1,2,...,m-1)个进程,记为Si。在进程Si中,一个变异分支记为一个节点,所有变异分支节点组成集合 H = { e 1 0 , e 2 0 , ... e | S 0 | 0 , ... , e 1 i , e 2 i , ... , e | S i | i , ... , e 1 m - 1 , e 2 m - 1 , ... , e | S m - 1 | m - 1 } .
设程序的输入域为X,以某一输入x∈X执行Si时,则穿越Si内的节点,形成一个序列该序列定义为并行程序的子路径其中|gi|为gi中变异分支的个数;那么x∈X穿越所有进程的并行程序路径,记为g=g0||g1||...||gi||...||gm-1
为了反映进程Si中变异分支被执行的可能性,定义如下随机变量:
显然变量服从(0,1)分布。
为此,在程序的输入域中采样R次,采样值分别为x1,x2,...,xR。对于每一采样值,根据变异分支是否被穿越,计算随机变量的值;如果变异分支的执行具有相关性,那么,随机变量的值也存在某种联系;反之亦然。因此,可以利用的条件分布率考察的之间的相关度计算公式如下:
α ( e j i , e j ′ i ′ ) = P ( λ j ′ i ′ | λ j i ) = Σ x ∈ { x 1 , x 2 , ... , x R | λ j i = 1 } λ j ′ i ′ Σ x ∈ { x 1 , x 2 , ... , x R } λ j i
由上式可知,若且i≠i'时,表示执行时,一定执行,因此,可以从插装程序中,约简变异分支减少变异分支的数目,从而减少了计算的复杂度性。
对于未约简的变异分支,可以构建变异分支相关矩阵:
变异分支的覆盖难度直接影响所属路径的覆盖难度。可以采用变异分支的执行概率衡量变异分支的覆盖难度。为此,在程序的输入域X中采样R次,采样值分别为x1,x2,...,xR,通过随机变量的分布律,计算变异分支执行概率的公式为:
p ( e j i ) = Σ x ∈ { x 1 , x 2 , ... , x R } λ j i ( x ) R
很显然,某一变异分支的执行概率越小,说明该变异分支的越难覆盖。因此,由变异分支执行概率可以确定变异分支的覆盖难度。
路径的覆盖难度直接受变异分支覆盖难度的影响,因此,基于变异分支的覆盖难度,从高到底的顺序,对将变异分支进行排序,形成一个有序的集合,不引起混淆情况下,仍记为H。
为了生成可执行路径,先基于H和Λ构建变异分支相关图。首先,从集合H中,选取最难覆盖的变异分支为基准变异分支,将放入顶点集合中,并设置合适的阈值Tα
然后,基于矩阵Λ中所属的行,考察与其他变异分支 e j k 1 i k 1 , ( i k 1 = 0 , 1 , ... , m - 1 ; j k 1 = 1 , 2 , ... ; j k 1 ≠ j ) 的相关度如果大于Tα,将放入 V e j i = { e j i , e j k 1 i k 1 } 中;以此类推,继续考察和其他变异分支相关度与阈值Tα的关系;直到与(或)相关的所有变异分支都考察完毕,那么结束生成
最后,考察集合中,任意两个顶点之间相关度是否大于0,如果大于0,添加到边集合直到所有顶点之间都考察完毕;生成变异分支相关图,记为
下面由变异分支相关图生成可执行路径集合,首先,考察中任意两个顶点之间是否存在边(入度边或出度边),如果两或多个顶点之间,不存在边,则将这些顶点分为n(n=1,2,...)个组。
然后,分别考察每个组内顶点与中其他顶点是否存在边,如果存在边,将中这些顶点放入对应的组内;直到中所有的顶点都被考察完毕;并根据每个组内变异分支所属并行程序的进程,及进程内这些变异分支从前往后的顺序,输出一系列并行程序的路径;删除这些路径中的不可执行的路径,从剩下的一或多条可执行路径中,选择一条包含节点最少的可执行路径,作为对应的路径
最后,将路径放入可执行路径集合Q中,并从变异分支集合H中,约简路径包含的变异分支;若继续从约简后的H中,选取最难覆盖的变异分支为基准节点,生成对应的可执行路径;若输出可执行路径集合Q={g1,g2,...,gk,...,g|Q|},|Q|为集合Q中可执行路径个数。
步骤2.多路径覆盖测试数据生成问题的数学模型
为了建立本发明的数学模型,需要将覆盖多路径测试数据生成问题,转化为多目标优化求解问题。针对可执行路径集合Q的|Q|条路径,可以构造|Q|个函数f1(X),f2(X),...,fk(X)...,f|Q|(X)。
当某一输入变量x∈X穿越并行程序S,穿越的路径记为若从可执行路径集合Q中,取路径为目标路径;那么路径gk与g*的相似度计算公式为:
ρ ( g * , g k ) = Σ i = 0 m - 1 | g * i ∩ g k i | max ( | g * i | , | g k i | ) m
其中表示从前到后连续相同的节点数,m为并行程序进程的个数。很显然,ρ(g*,gk)值越大,说明穿越路径g*越接近于目标路径gk
设函数fk(X)=ρ(g*,gk),则覆盖路径gk的测试数据生成问题,可以转化为函数fk(X)最大化问题;由此,覆盖路径g1,g2,...,gk,...,g|Q|的测试数据生成问题就转化为函数f1(X),f2(X),...,fk(X)...,f|Q|(X)的最大化问题,则本发明建立的数学模型如下:
maxf 1 ( X ) s . t . X ∈ D maxf 2 ( X ) s . t . X ∈ D ... maxf | Q | ( X ) s . t . X ∈ D
步骤3.多种群并行遗传算法生成测试数据
本发明采用多种群并行遗传算法求解上述多目标优化问题,对于|Q|个子优化问题,可以采用遗传算法的|Q|个子种群并行方式进化求解。对于第k个子优化问题 maxf k ( X ) s . t . X ∈ D , 对应第k个子中群,设每个子中群的规模为ν,设表示第k个子中群的第j个进化个体,则第k个子中群的ν个进化个体,可以表示为
因为,对于某个子中群而言,每迭代一次,除了判定该子中群的进化个体是否为求解的子优化问题的最优解之外,还要判定该个体是否为其他子优化问题的最优解。比如,对于目标路径gk,在进化过程中,进化个体不仅需要判断,是否为子优化问题 max f k ( X ) s . t . x ∈ D 的最优解之外,还要判定其是否为其他子优化问题 maxf k ′ ( X ) s . t . X ∈ D , ( k ′ = 1 , ... , k ≠ k ′ ) 的最优解。具体来说,若存在个体使得就是第k个子中群的最优解,即覆盖路径gk,把路径gk从目标路径集中删除,并终止第k个子中群的进化。若使得判定是否子优化问题的最优解,若使得即覆盖路径gk',把路径gk'从目标路径集中删除,并终止第k个子中群的进化。这样做的好处,对于每个子优化问题,采用多种群同时进化,不同种群之间的个体共享,扩大每个种群的搜索范围,从而达到提高求解效率。
类似的,计算剩下子优化问题的最优解;最终,使得目标路径的个数为0,或种群超过设定的代数,终止算法的运行。
本发明需要设定遗传参数。本发明采用轮盘赌方式选择,单点交叉,单点变异,交叉概率和变异概率分别为0.9和0.3,根据具体被测程序输入数据的类型选择实数编码或是二进制编码。
上述技术方案具有如下有益效果:
(1)本发明将弱变异测试问题转化为路径覆盖问题,可以提高软件测试的效率。进行变异测试时,将变异分支插入原程序,导致新程序包含大量的变异分支,使得分支覆盖测试数据生成问题非常复杂;采用本发明的方法,将约简之后的变异分支依据所属的路径,进行分组,将弱变异测试问题转化为路径覆盖问题,这样一来,不仅能够减少了生成的测试数据,而且这些测试数据,具有较强的检错能力。
(2)基于变异分支相关度和变异分支覆盖难度,生成比较容易覆盖的可执行路径。变异分支覆盖难度直接影响路径的覆盖难度,在路径生成时,有必要优先选择覆盖难度高的变异分支,且只选择1次,这样可以降低覆盖难度高的变异分支在路径集合中出现的频率;再者,相关度比较高的一些变异分支结合,生成的可执行路径的执行概率就比较高,也容易覆盖。
(3)多种群并行遗传算法生成测试数据时,对于某个子中群而言,每迭代一次,除了判定该子中群的进化个体是否为求解子优化问题的最优解之外,还要判定该个体是否为其他子优化问题的最优解;这样做好处,不同种群之间的个体共享,扩大了每个种群的搜索范围,从而提高了求解效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提出的一种用于弱变异测试的路径覆盖测试数据生成方法总流程图;
图2为本发明提出的一种用于弱变异测试的路径覆盖测试数据生成方法中采用遗传算法生成测试数据的流程图;
图3为本发明实施例中的示例程序;
图4为本发明实施例中的插装了变异分支的示例程序;
图5为本发明实施例中生成的变异分支相关图;
图6为本发明实施例中随机法生成的可执行路径集合。
具体实施方式
下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清除、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护范围。
如图1所示,为本发明提出的一种用于弱变异测试的路径覆盖测试数据生成方法总流程图。该方法包括:
步骤1将弱变异测试转化为路径覆盖测试
1.1基本概念
变异分支的构建方法参考了Papadakis等人在2011年《SoftwareQualityJournal》第19期发表的文章“Automaticallyperformingweakmutationwiththeaidofsymbolicexecution,concolictestingandsearch-basedtesting”中的方法。
在并行程序中,对原语句s实施某一变异算子,生成变异语句s',由原语句和变异语句构建的变异条件语句为“ifs!=s'”,其真分支简称变异分支。将这些变异分支插装到原程序相应位置,形成新的并行程序,记为S,若S由m(m>1)个进程组成,第i(i=0,1,2,...,m-1)个进程,记为Si。在进程Si中,一个变异分支记为一个节点,所有变异分支节点组成集合 H = { e 1 0 , e 2 0 , ... e | S 0 | 0 , ... , e 1 i , e 2 i , ... , e | S i | i , ... , e 1 m - 1 , e 2 m - 1 , ... , e | S m - 1 | m - 1 } .
并行程序路径在S中,只选择变异分支作为节点,其他语句不考虑;设并行程序S的输入域为X,则以某一输入x∈X穿越进程Si内节点的某个序列定义该序列为并行程序的子路径|gi|为gi中变异分支的个数;那么x∈X穿越所有进程的并行程序路径,记为g=g0||g1||...||gi||...||gm-1
一个变异分支执行时,其他变异分支可能执行,也可能不执行。因此,通过考察变异分支之间的执行概率,衡量变异分支之间的相关度。
变异分支相关度设变异分支当变异分支一定执行时,变异分支执行的概率,记为的相关度
变异分支相关图变异分支相关图由顶点集合和边集合组成的数据结构,记为G(V,E),其中,顶点集合记为边的集合记为E(G)中的每个元素为顶点的有向边,其中为有向边的起始顶点,为有向边的终止顶点,设顶点的有向边具有权值,权值为的相关度
1.2变异分支的相关度
如果将相关度比较高的一些变异分支结合生成可执行路径,这些路径的执行概率就比较高;反之亦然。因此,变异分支之间的相关度直接影响所属路径的覆盖难度。
为了反映进程Si中变异分支被执行的可能性,定义如下随机变量:
显然变量服从(0,1)分布。
为此,在程序的输入域中采样R次,采样值分别为x1,x2,...,xR。对于每一采样值,根据变异分支是否被穿越,计算随机变量的值;如果变异分支的执行具有相关性,那么,随机变量的值也存在某种联系;反之亦然。因此,可以利用的条件分布率考察的之间的相关度计算公式如下:
α ( e j i , e j ′ i ′ ) = P ( λ j ′ i ′ | λ j i ) = Σ x ∈ { x 1 , x 2 , ... , x R | λ j i = 1 } λ j ′ i ′ Σ x ∈ { x 1 , x 2 , ... , x R } λ j i
由上式可知,若且i≠i'时,表示执行时,一定执行,因此,可以从插装程序中,约简变异分支减少变异分支的数目,从而减少了计算的复杂度性。
对于未约简的变异分支,可以构建变异分支相关矩阵:
1.3变异分支覆盖的难度
本发明的并行程序路径由变异分支组成,很显然,这些变异分支的覆盖难度直接影响所属路径的覆盖难度。变异分支的覆盖难度,可以通过覆盖变异分支的测试数据进行考察,覆盖某一变异分支测试数据越少,该变异分支的执行概率就越小,说明该变异分支越难覆盖。因此,可以采用变异分支的执行概率衡量变异分支的覆盖难度。
变异分支的覆盖难度直接影响所属路径的覆盖难度。可以采用变异分支的执行概率衡量变异分支的覆盖难度。为此,在程序的输入域X中采样R次,采样值分别为x1,x2,...,xR,通过随机变量的分布律,计算变异分支执行概率的公式为:
p ( e j i ) = Σ x ∈ { x 1 , x 2 , ... , x R } λ j i ( x ) R
很显然,某一变异分支的执行概率越小,说明该变异分支的越难覆盖。因此,由变异分支执行概率可以确定变异分支的覆盖难度。
路径的覆盖难度直接受变异分支覆盖难度的影响,因此,基于变异分支的覆盖难度,从高到底的顺序,对将变异分支进行排序,形成一个有序的集合,不引起混淆情况下,仍记为H。
1.4生成可执行路径集合
为了生成可执行路径,首先,在有序的变异分支集合H中,选取覆盖难度最大的变异分支为基准变异分支;并根据变异分支相关矩阵,按照一定的策略,生成变异分支相关图;然后,由变异分支相关图,生成比较容易覆盖的可执行路径。
(1)生成变异分支相关图
基于H和Λ构建变异分支相关图,首先,从集合H中,选取最难覆盖的变异分支为基准变异分支,将放入顶点集合中,并设置合适的阈值Tα
然后,基于矩阵Λ中所属的行,考察与其他变异分支 e j k 1 i k 1 , ( i k 1 = 0 , 1 , ... , m - 1 ; j k 1 = 1 , 2 , ... ; j k 1 ≠ j ) 的相关度如果大于Tα,将放入 V e j i = { e j i , e j k 1 i k 1 } 中;以此类推,继续考察和其他变异分支相关度与阈值Tα的关系;直到与(或)相关的所有变异分支都考察完毕,那么结束生成
最后,考察集合中,任意两个顶点之间相关度是否大于0,如果大于0,添加到边集合直到所有顶点之间都考察完毕;生成变异分支相关图,记为
容易理解,对于同一个程序,不同的阈值Tα,选择生成的变异分支相关图可能不同。本发明仅根据经验,给出Tα一个可能的值,但是,所给的阈值Tα并非最优的。事实上,确定各阈值Tα的最优权值,已经超出了本发明研究的范围。
(2)生成可执行路径集合
考察发现,一个变异分支相关图可以生成一或多条路径,对于这些路径,需要采用一定的策略,选择一条比较容易覆盖的可执行路径。对于所有的变异分支相关图,可以采用类似的方法生成对应的可执行路径,组成可执行路径集合,记为Q。
具体的步骤如下:
[1]首先考察中任意两个顶点之间是否存在边(入度边或出度边),如果两或多个顶点之间,不存在边,则将这些顶点分为n组;针对每个组,分别考察组内顶点与中其他顶点是否存在边,如果存在边,将中这些顶点放入对应的组内;直到中所有的顶点都被考察完毕;
[2]针对n个组的变异分支,根据组内变异分支所属并行程序的进程,及进程内这些变异分支从前往后的顺序,输出多条并行程序的路径,删除这些路径中的不可执行的路径,从剩下的一或多条可执行路径中,选择一条包含节点最少的可执行路径,作为变异分支相关图对应的路径,记为
[3]将路径放入可执行路径集合Q中;
[4]从变异分支集合H中,约简路径包含的变异分支;
[5]若继续从约简后的H中,选取最难覆盖的变异分支为基准节点,生成变异分支相关图,转[1];若输出可执行路径集合Q={g1,g2,...,gk,...,g|Q|},|Q|为集合Q中可执行路径个数。
步骤2多路径覆盖测试数据生成问题的数学模型
路径覆盖测试数据生成问题的数学模型参考了田甜等人在2013年《计算机学报》第11期发表的文章“消息传递并行程序路径覆盖测试数据生成问题的模型及其进化求解方法”中的方法,但本发明是多个目标路径组成的一个路径集合,因此,需要对其进行了改进。
为了建立本发明的数学模型,需要将覆盖多路径测试数据生成问题,转化为多目标优化求解问题。针对可执行路径集合Q的|Q|条路径,可以构造|Q|个函数f1(X),f2(X),...,fk(X)...,f|Q|(X)。
当某一输入变量x∈X穿越并行程序S,穿越的路径记为若从可执行路径集合Q中,取路径为目标路径;那么路径gk与g*的相似度计算公式为:
ρ ( g * , g k ) = Σ i = 0 m - 1 | g * i ∩ g k i | max ( | g * i | , | g k i | ) m
其中表示从前到后连续相同的节点数,m为并行程序进程的个数。很显然,ρ(g*,gk)值越大,说明穿越路径g*越接近于目标路径gk
设函数fk(X)=ρ(g*,gk),则覆盖路径gk的测试数据生成问题,可以转化为函数fk(X)最大化问题;由此,覆盖路径g1,g2,...,gk,...,g|Q|的测试数据生成问题就转化为函数f1(X),f2(X),...,fk(X)...,f|Q|(X)的最大化问题,则本发明建立的数学模型如下:
maxf 1 ( X ) s . t . X ∈ D maxf 2 ( X ) s . t . X ∈ D ... maxf | Q | ( X ) s . t . X ∈ D
步骤3多种群并行遗传算法生成测试数据
3.1优化方法设计
本发明采用多种群并行遗传算法求解上述多目标优化问题,对于|Q|个子优化问题,可以采用遗传算法的|Q|个子种群并行方式进化求解。对于第k个子优化问题 maxf k ( X ) s . t . X ∈ D , 对应第k个子中群,设子中群的规模为ν,设表示第k个子中群的第j个进化个体,则第k个子中群的ν个进化个体表示为
因为,对于某个子中群而言,每迭代一次,除了判定该子中群的进化个体是否为求解的子优化问题的最优解之外,还要判定该个体是否为其他子优化问题的最优解。比如,对于目标路径gk,在进化过程中,进化个体不仅需要判断,是否为子优化问题 max f k ( X ) s . t . x ∈ D 的最优解之外,还要判定其是否为子优化问题 maxf k ′ ( X ) s . t . X ∈ D , ( k ′ = 1 , ... , k ≠ k ′ ) 的最优解。这样做的好处,对于每个子优化问题,采用多种群同时进化,不同种群之间的个体共享,扩大每个种群的搜索范围,从而达到提高求解效率。
3.2遗传参数的设置及终止运行条件
本发明需要设定遗传参数。本发明采用轮盘赌方式选择,单点交叉,单点变异,交叉概率和变异概率分别为0.9和0.3,根据具体被测程序输入数据的类型选择实数编码或是二进制编码。
若存在个体使得就是第k个子中群的最优解,即覆盖路径gk,把路径gk从目标路径集中删除,并终止第k个子中群的进化;若使得然后,判定是否其他子优化问题的最优解,若使得即覆盖路径gk',把路径gk'从目标路径集中删除,并终止第k个子中群的进化,类似的,计算剩下的子优化问题的最优解;最终,使得目标路径的个数为0,或种群超过设定的代数,也结束算法的运行。
3.3多种群遗传算法具体步骤
如图2所示,遗传算法生成测试数据的具体步骤描述如下:
[1]确定目标路径集合、参数设置;
[2]初始化种群;
[3]解码进化个体,执行插装后新程序程序,根据式(3)计算进化个体适应值;
[4]满足算法终止条件,若满足,转[6];
[5]实施选择、交叉和变异等遗传操作,生成子代种群,转[3];
[6]终止算法运行,输出测试数据、穿越的路径。
3.4测试实例
如图3所示为MaxTriangle并行程序的源代码。该程序是在串行三角形分类基准程序基础上改造的并行程序,包含4个子进程,分别为S0,S1,S2,S3;4个输入变量,取值范围为[0,64]。
对MaxTriangle程序的被测语句实施不同的变异算子,生成55个非等价变异体,并转化为变异分支。取样本容量R=3000时,采用步骤1.2方法,计算变异分支的相关度,约简相关度为1的那些变异分支,将未约简的21个变异分支插入到原语句前面,形成新的程序,如图4所示,其中框图部分为被插装的21个变异分支。
采用步骤1.3方法,计算21个变异分支的覆盖难度,并根据这些变异分支的覆盖难度,由高到低,对变异分支进行排序,得到变异分支有序集合 H = { e 14 0 , e 13 0 , e 15 0 , e 1 3 , e 3 0 , e 5 0 , e 2 1 , e 1 1 , e 2 2 , e 2 3 , e 1 2 , e 10 0 , e 12 0 , e 8 0 , e 4 0 , e 1 0 , e 2 0 , e 9 0 , e 6 0 , e 11 0 , e 7 0 } .
表1本发明变异分支覆盖难度由高到低的排列情况。
下面以基准变异分支为例,说明采用步骤1.4的方法,生成可执行路径集合的过程。为了生成可执行路径集合,先构建变异分支相关图。首先,从集合H中,选择此时最难覆盖的变异分支为基准节点,设阈值Tα=0.45,根据变异分支相关矩阵Λ,考察所属行,与其他变异分支相关度的值,其中大于Tα;接着,继续分别考察所属行,与其他变异分支相关度值,其中大于Tα;进一步考察,得到大于Tα,则生成顶点集合然后,在中,考察任意两个变异分支相关度的值是否大于0,因为它们之间不能生成边;最终生成的边集合为: E e 3 0 = { < e 3 0 , e 1 0 > , < e 3 0 , e 6 0 > , < e 1 0 , e 4 0 > , < e 1 0 , e 6 0 > , < e 1 0 , e 7 0 > , < e 6 0 , e 2 0 > , < e 2 0 , e 7 0 > , < e 2 0 , e 4 0 > , < e 8 0 , e 7 0 > , < e 4 0 , e 7 0 > , < e 3 0 , e 7 0 > , < e 3 0 , e 8 0 > , < e 3 0 , e 2 0 > , < e 2 0 , e 8 0 > , < e 4 0 , e 8 0 > , < e 1 0 , e 8 0 > , < e 4 0 , e 6 0 > } ; 最后,基于生成变异分支相关图如图5所示,图中实线为变异分支相关度值大于等于Tα的有向边,虚线为变异分支相关度值小于Tα且大于0的有向边。虽然虚线边的变异分支之间相关度值没有满足大于等于Tα,但是,这些变异分支与其他相关的变异分支结合才能生成路径。
下面分析基于变异分支相关图生成可执行路径集合。首先,考察中任意两个变异分支顶点之间是否存在边(入度边或出度边),分成4组变异分支集合,分别为然后,由这些集合,生成了一系列路径,删除不可执行路径,最终生成2条可执行路径,分别为从中选择包含节点比较少的路径接着,从集合H中,约简中包含的变异分支最后,从约简后的集合H中,选择下一个基准变异分支,生成一条比较容易覆盖的可执行路径,最终生成包含所有变异分支的可执行路径集合 Q = { g e 14 0 , g e 13 0 , g e 15 0 , g e 3 0 , g e 5 0 , g e 2 1 , g e 2 2 , g e 2 3 , g e 1 2 , g e 10 0 , g e 12 0 } , |Q|=11,如下表所列。
为了验证本发明生成的可执行路径集合比较容易覆盖,与随机法生成的路径集合进行比较。为了减少随机因素对实验结果的影响,随机生成50条不同的可执行路径,从中分别选出3个路径集合,记为Q1',Q'2,Q'3,如图6所示,其中|Q1'|<|Q|,|Q'2|=|Q|,|Q3'|>|Q|,且对于每个路径集合必须包含所有的21个变异分支。
针对每个路径集合中的每条路径,采用遗传算法生成测试数据独立运行50次,计算每条路径生成测试数据的平均耗时、进化个体平均评价次数;基于此,计算每个路径集合中,所有路径的测试数据生成耗时的最小值、最大值、总耗时、均值以及方差,和进化个体评价次数的最小值、最大值、总评价次数、均值以及方差。为了验证本发明方法的实验结果与随机方法的差异是否显著,对测试数据生成耗时和进化个体评价次数采用t检验方法,如果t的值大于临界值,则表示本文方法优于对比方法。
多种群遗传算法主要操作及其控制参数设置为:轮盘赌选择、单点交叉、以及单点变异、且交叉概率分别为0.9和0.3,种群规模设为20。
本发明与随机法的不同路径集合生成测试数据的耗时比较,如下表所列。
本发明与随机法的不同路径集合生成测试数据的评价次数比较,如下表所列。
从表2和表3可以看出,(1)本发明生成的路径集合Q,与随机法生成的集合Q1',Q'2,Q'3比较,Q中的路径所生成测试数据总耗时、总评价次数最少。路径集合Q对比Q1',Q'2,Q'3,生成覆盖路径测试数据总耗时缩短了42%、69%、53%,评价次数减少了53%、65%、55%;(2)由第9,10列可知,t检验的值都大于临界值,说明,采用本发明方法生成的路径集合显著优于对比方法。
通过上述实验结果表明,本发明方法生成的可执行路径集合比较容易覆盖,从而提高了路径覆盖测试数据生成的效率。

Claims (3)

1.一种用于弱变异测试的路径覆盖测试数据生成方法,其特征在于,该方法包括:
步骤1.1:给出变异分支相关度的计算方法,保障相关度比较高的一些变异分支进行结合,生成的可执行路径,比较容易覆盖;
步骤1.2:给出变异分支覆盖难度的计算方法,保障在路径生成时,优先选择覆盖难度高的变异分支,且只选择1次,从而降低覆盖难度高的变异分支在路径集合中出现的频率;
步骤1.3:给出基于变异分支相关图的可执行路径集合生成方法;依次选择覆盖难度最大的变异分支,并结合与其相关度大的一些变异分支,生成变异分支相关图,再基于该图生成比较容易覆盖的可执行路径集合;
基于变异分支的覆盖难度,从高到底的顺序,对将变异分支进行排序,形成一个有序的集合,记为H;
为了生成可执行路径,先基于H和Λ构建变异分支相关图;首先,从集合H中,选取最难覆盖的变异分支为基准变异分支,将放入顶点集合中,并设置合适的阈值Tα
然后,基于矩阵Λ中所属的行,考察与其他变异分支 e j k 1 i k 1 ( i k 1 = 0 , 1 , ... , m - 1 ; j k 1 = 1 , 2 , ... ; j k 1 &NotEqual; j ) 的相关度如果大于Tα,将放入 V e j i = { e j i , e j k 1 i k 1 } 中;以此类推,继续考察和其他变异分支相关度与阈值Tα的关系;直到与(或)相关的所有变异分支都考察完毕,那么结束生成
最后,考察集合 V e j i = { e j i , e j k 1 i k 1 , ... } 中,任意两个顶点之间相关度是否大于0,如果大于0,添加到边集合直到所有顶点之间都考察完毕;生成变异分支相关图,记为
下面由变异分支相关图生成可执行路径集合,首先,考察中任意两个顶点之间是否存在边(入度边或出度边),如果两或多个顶点之间,不存在边,则将这些顶点分为n(n=1,2,...)个组;
然后,分别考察每个组内顶点与中其他顶点是否存在边,如果存在边,将中这些顶点放入对应的组内;直到中所有的顶点都被考察完毕;并根据每个组内变异分支所属并行程序的进程,及进程内这些变异分支从前往后的顺序,输出一系列并行程序的路径;删除这些路径中的不可执行的路径,从剩下的一或多条可执行路径中,选择一条包含节点最少的可执行路径,作为对应的路径
最后,将路径放入可执行路径集合Q中,并从变异分支集合H中,约简路径包含的变异分支;若继续从约简后的H中,选取最难覆盖的变异分支为基准节点,生成对应的可执行路径;若输出可执行路径集合Q={g1,g2,...,gk,...,g|Q|},|Q|为集合Q中可执行路径个数。
2.权利要求1中所述步骤1.1变异分支相关度的计算方法,保障相关度比较高的一些变异分支进行结合,生成的可执行路径的比较容易覆盖,其特征在于,以变异分支之间的执行概率,衡量变异分支之间的相关度;
设并行程序S的输入域为X,为了变异分支被执行的可能性,定义如下随机变量:
显然变量服从(0,1)分布;
为此,在程序的输入域中采样R次,采样值分别为x1,x2,...,xR。对于每一采样值,根据变异分支是否被穿越,计算随机变量的值;如果变异分支的执行具有相关性,那么,随机变量的值也存在某种联系;反之亦然。因此,可以利用的条件分布率考察的之间的相关度计算公式如下:
&alpha; ( e j i , e j &prime; i &prime; ) = P ( &lambda; j &prime; i &prime; | &lambda; j i ) = &Sigma; x &Element; { x 1 , x 2 , ... , x R | &lambda; j i = 1 } &lambda; j &prime; i &prime; &Sigma; x &Element; { x 1 , x 2 , ... , x R } &lambda; j i
由上式可知,若且i≠i'时,表示执行时,一定执行,因此,可以从插装程序中,约简变异分支减少变异分支的数目,从而减少了计算的复杂度性。
对于未约简的变异分支,可以构建变异分支相关矩阵:
3.权利要求1中所述步骤1.2中变异分支覆盖难度的计算方法,保障在路径生成时,优先选择覆盖难度高的变异分支,且只选择1次,从而降低覆盖难度高的变异分支在路径集合中出现的频率,其特征在于,变异分支的覆盖难度直接影响所属路径的覆盖难度,可以采用变异分支的执行概率衡量变异分支的覆盖难度方法,具体步骤包括:
在程序的输入域X中采样R次,采样值分别为x1,x2,...,xR,通过随机变量的分布律,计算变异分支执行概率的公式为:
p ( e j i ) = &Sigma; x &Element; { x 1 , x 2 , ... , x R } &lambda; j i ( x ) R
类似的,可以估计所有变异分支的执行概率,从而得到所有变异分支的覆盖难度;很显然,执行概率越小,则变异分支覆盖难度越高,反之亦然。
CN201610108003.6A 2016-02-28 2016-02-28 一种用于弱变异测试的路径覆盖测试数据生成方法 Expired - Fee Related CN105808426B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610108003.6A CN105808426B (zh) 2016-02-28 2016-02-28 一种用于弱变异测试的路径覆盖测试数据生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610108003.6A CN105808426B (zh) 2016-02-28 2016-02-28 一种用于弱变异测试的路径覆盖测试数据生成方法

Publications (2)

Publication Number Publication Date
CN105808426A true CN105808426A (zh) 2016-07-27
CN105808426B CN105808426B (zh) 2018-10-16

Family

ID=56465792

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610108003.6A Expired - Fee Related CN105808426B (zh) 2016-02-28 2016-02-28 一种用于弱变异测试的路径覆盖测试数据生成方法

Country Status (1)

Country Link
CN (1) CN105808426B (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106502908A (zh) * 2016-11-07 2017-03-15 牡丹江师范学院 基于统计分析的可执行基础路径进化生成方法
CN107729241A (zh) * 2017-10-12 2018-02-23 中国矿业大学 一种基于变异体分组的软件变异测试数据进化生成方法
CN109032927A (zh) * 2018-06-26 2018-12-18 腾讯科技(深圳)有限公司 一种漏洞挖掘方法及装置
CN109739746A (zh) * 2018-12-12 2019-05-10 江苏师范大学 一种基于原语句占优分析的变异测试方法
CN110334020A (zh) * 2019-06-24 2019-10-15 北京科技大学 一种冗余变异体识别方法及识别装置
CN111274119A (zh) * 2018-12-05 2020-06-12 徐州工程学院 一种基于多种群协同进化的变异测试数据生成方法
CN111338957A (zh) * 2020-02-28 2020-06-26 牡丹江师范学院 一种基于概率统计的软件测试基本路径进化生成方法
CN112699054A (zh) * 2020-08-03 2021-04-23 徐州工程学院 一种软件测试用例有序生成方法
US11119902B2 (en) 2019-11-11 2021-09-14 International Business Machines Corporation Creating a higher order mutant for mutation testing software
CN114091622A (zh) * 2021-12-07 2022-02-25 西安邮电大学 一种基于自组织映射神经网络的变异体约简方法
CN114117426A (zh) * 2021-11-16 2022-03-01 中国人民解放军国防科技大学 一种web应用漏洞检测方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130139003A1 (en) * 2011-11-28 2013-05-30 Tata Consultancy Services Limited Test Data Generation
CN103902457A (zh) * 2014-04-17 2014-07-02 中国矿业大学 基于协同进化的并行程序路径覆盖测试数据生成方法
CN104281522A (zh) * 2014-10-14 2015-01-14 中国矿业大学 基于语句覆盖和缺陷检测的多目标测试数据缩减方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130139003A1 (en) * 2011-11-28 2013-05-30 Tata Consultancy Services Limited Test Data Generation
CN103902457A (zh) * 2014-04-17 2014-07-02 中国矿业大学 基于协同进化的并行程序路径覆盖测试数据生成方法
CN104281522A (zh) * 2014-10-14 2015-01-14 中国矿业大学 基于语句覆盖和缺陷检测的多目标测试数据缩减方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
吴川 等: "基于路径相关性的回归测试数据进化生成", 《计算机学报》 *
张功杰 等: "基于变异分析和集合金华的测试用例生成方法", 《计算机学报》 *

Cited By (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106502908A (zh) * 2016-11-07 2017-03-15 牡丹江师范学院 基于统计分析的可执行基础路径进化生成方法
CN107729241A (zh) * 2017-10-12 2018-02-23 中国矿业大学 一种基于变异体分组的软件变异测试数据进化生成方法
CN107729241B (zh) * 2017-10-12 2020-11-03 中国矿业大学 一种基于变异体分组的软件变异测试数据进化生成方法
CN109032927A (zh) * 2018-06-26 2018-12-18 腾讯科技(深圳)有限公司 一种漏洞挖掘方法及装置
CN111274119A (zh) * 2018-12-05 2020-06-12 徐州工程学院 一种基于多种群协同进化的变异测试数据生成方法
CN111274119B (zh) * 2018-12-05 2022-05-17 徐州工程学院 一种基于多种群协同进化的变异测试数据生成方法
CN109739746A (zh) * 2018-12-12 2019-05-10 江苏师范大学 一种基于原语句占优分析的变异测试方法
CN110334020A (zh) * 2019-06-24 2019-10-15 北京科技大学 一种冗余变异体识别方法及识别装置
US11119902B2 (en) 2019-11-11 2021-09-14 International Business Machines Corporation Creating a higher order mutant for mutation testing software
CN111338957A (zh) * 2020-02-28 2020-06-26 牡丹江师范学院 一种基于概率统计的软件测试基本路径进化生成方法
CN111338957B (zh) * 2020-02-28 2023-03-31 牡丹江师范学院 一种基于概率统计的软件测试基本路径进化生成方法
CN112699052A (zh) * 2020-08-03 2021-04-23 徐州工程学院 一种基于相关输入变量的软件测试用例进化生成方法
CN112732577A (zh) * 2020-08-03 2021-04-30 徐州工程学院 一种多任务软件测试用例进化生成方法
CN112699054B (zh) * 2020-08-03 2022-02-18 徐州工程学院 一种软件测试用例有序生成方法
CN112699053B (zh) * 2020-08-03 2022-02-22 徐州工程学院 一种融入模糊聚类的软件测试方法
CN112699053A (zh) * 2020-08-03 2021-04-23 徐州工程学院 一种融入模糊聚类的软件测试方法
CN112699054A (zh) * 2020-08-03 2021-04-23 徐州工程学院 一种软件测试用例有序生成方法
CN114117426A (zh) * 2021-11-16 2022-03-01 中国人民解放军国防科技大学 一种web应用漏洞检测方法及系统
CN114117426B (zh) * 2021-11-16 2023-03-24 中国人民解放军国防科技大学 一种web应用漏洞检测方法及系统
CN114091622A (zh) * 2021-12-07 2022-02-25 西安邮电大学 一种基于自组织映射神经网络的变异体约简方法

Also Published As

Publication number Publication date
CN105808426B (zh) 2018-10-16

Similar Documents

Publication Publication Date Title
CN105808426A (zh) 一种用于弱变异测试的路径覆盖测试数据生成方法
CN109931678B (zh) 基于深度学习lstm的空调故障诊断方法
CN104200087B (zh) 用于机器学习的参数寻优及特征调优的方法及系统
CN111985796B (zh) 基于随机森林和智能算法预测混凝土结构耐久性的方法
CN104914835A (zh) 一种柔性作业车间调度多目标的方法
CN106548230A (zh) 基于改进粒子群优化神经网络的变压器故障诊断方法
CN108038538A (zh) 基于强化学习的多目标进化算法
CN103559129B (zh) 基于遗传算法的统计回归测试数据生成方法
CN110059015A (zh) 种群进化多目标测试用例优先级排序方法
CN108563555A (zh) 基于四目标优化的故障更改代码预测方法
CN103699812B (zh) 基于遗传算法的植物品种真实性鉴定位点筛选方法
Liu et al. A sphere-dominance based preference immune-inspired algorithm for dynamic multi-objective optimization
CN106649479A (zh) 一种基于概率图的变压器状态关联规则挖掘方法
CN116204445B (zh) 测试用例生成方法、装置、代码测试方法、设备及介质
CN104765683A (zh) 基于moea/d算法的回归测试用例多目标优化方法
Zhang et al. On test case prioritization using ant colony optimization algorithm
CN103605605A (zh) 基于语句占优关系和两阶段遗传算法的高阶变异测试方法
CN104281522A (zh) 基于语句覆盖和缺陷检测的多目标测试数据缩减方法
CN115329908A (zh) 一种基于深度学习的电力变压器故障诊断方法
CN101853202B (zh) 一种基于遗传算法和带权匹配算法的测试案例自动生成方法
CN105843744B (zh) 用于并行程序蜕变测试的蜕变关系优先级排序方法
CN109710514B (zh) 测试用例优先级排序中的tie-breaking的解决方法及系统
CN110377496A (zh) 一种软件回归测试过程中基于智能水滴的测试用例优先级确定方法
CN109767034A (zh) 继电保护的定值优化方法、装置、计算机设备和存储介质
CN106919504A (zh) 一种基于impe‑ga算法的测试数据进化生成方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20181016

Termination date: 20190228