CN103605605A - 基于语句占优关系和两阶段遗传算法的高阶变异测试方法 - Google Patents

基于语句占优关系和两阶段遗传算法的高阶变异测试方法 Download PDF

Info

Publication number
CN103605605A
CN103605605A CN201310595506.7A CN201310595506A CN103605605A CN 103605605 A CN103605605 A CN 103605605A CN 201310595506 A CN201310595506 A CN 201310595506A CN 103605605 A CN103605605 A CN 103605605A
Authority
CN
China
Prior art keywords
variation
statement
individual
variant
order
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
CN201310595506.7A
Other languages
English (en)
Other versions
CN103605605B (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.)
China University of Mining and Technology CUMT
Original Assignee
China University of Mining and Technology CUMT
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 China University of Mining and Technology CUMT filed Critical China University of Mining and Technology CUMT
Priority to CN201310595506.7A priority Critical patent/CN103605605B/zh
Publication of CN103605605A publication Critical patent/CN103605605A/zh
Application granted granted Critical
Publication of CN103605605B publication Critical patent/CN103605605B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Measuring Or Testing Involving Enzymes Or Micro-Organisms (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明公布了一种基于语句占优关系和两阶段遗传算法的高阶变异测试方法,目的是提高高阶变异测试的有效性和质量。首先,基于程序的占优关系树,来确定高阶变异的语句选择问题,从而保障位于同一个高阶变异体中的所有变异语句都被执行;然后,建立所需的目标函数,对高阶变异体的优劣进行度量;最后,设计了一种包含两个交替进化过程的遗传算法来生成高质量的高阶变异体,从而揭示程序所包含的复杂缺陷。该方法不但可以减少高阶变异体的数量,还可以保证高阶变体具有好的性能,对提高高阶变异测试的有效性和可行性具有重要意义。

Description

基于语句占优关系和两阶段遗传算法的高阶变异测试方法
技术领域
本发明涉及计算机软件测试领域,设计了一种基于语句占优关系和两阶段遗传算法的高阶变异测试方法。该方法区别于已有方法的特色在于,基于语句之间的占优关系选择语句进行变异,从而保证所有变异语句可以被同时执行;另外,给出一种新的高阶变异体评价方法,对高阶变异体的优劣进行度量;最后,设计了一种包含两个交替进化过程的遗传算法来生成高质量的高阶变异体,从而揭示程序所包含的复杂缺陷。该方法不但可以减少高阶变异体的数量,还可以保证高阶变体具有好的性能,对提高高阶变异测试的有效性和可行性具有重要意义。 
背景技术
对软件进行测试的目的是为了发现尽可能多的缺陷或错误。变变异测试是一种面向缺陷的软件测试方法,基本原理是:首先,采用变异算子对被测程序做微小的合乎语法的变动,例如,将关系运算符“>”替换为“<”,从而产生大量新程序,每个新程序称为一个变异体;然后,基于相同的测试数据运行源程序和变异体,并比较二者输出的异同。如果不同,就认为测试数据将该变异体杀死。 
需要说明的是,并不是所有的变异体都能被杀死。总体来讲,导致变异体不能被杀死的原因有如下两个:(1)测试数据集不充分;(2)变异体在功能上等价于源程序,称这类变异体为等价变异体。只有当所有非等价变异体都被杀死,或者变异充分度已经达到预期要求,变异测试才结束。所谓测试数据集的变异充分度,是指被杀死的变异体数目与所有非等价变异体数目的比值。 
变异测试具有排错能力强、方便灵活,以及自动化程度高等优点,既可用于生成测试数据,又可衡量测试数据集的检错能力。但是,已有变异测试方法需要消耗大量的计算资源;此外,一个活的变异体是否等价于源程序,属于不可判定问题。这些问题在一定程度上限制了变异测试的应用范围。 
为减少变异测试的开销,Howden提出弱变异测试,通过观察程序执行变异节点后变量状态是否变化,决定变异体是否被杀死。尽管弱变异测试在一定程度上降低了变异体被杀死的难度,但变量状态的检测同样需要花费很大的代价。 
另外,在传统的变异测试中,变异体都是通过对源程序的某一条语句进行修改得到的。Jia等认为,实际程序中存在的错误往往要复杂的多,只对程序作一处修改并不能真正模拟真实的错误或缺陷,因此,他们提出对程序作两处或更多处修改的高阶变异测试方法,但是,相应的变异体个数会成倍增加。鉴于此,Langdon等提出一种高阶变异体选择方法,该方法 把变异体的选择问题看成含有两个目标的优化问题,这两个目标分别是:变异体被杀死的难度尽可能的大和对源程序的改动尽可能的小。 
Belli等人通过两种基本变异算子对低阶变异体和高阶变异体的性能进行分析。他们通过比较低阶变异体和高阶变异体的检错能力,肯定了缺陷之间存在交互作用。Harman等人通过实验证明,高阶变异体比低阶变异体更能逼近真实的程序错误。他们进一步指出,基于搜索的软件工程可以为生成高质量的高阶变异体提供有效途径。 
虽然高阶变异体能够模拟更为复杂的程序缺陷,但是,高阶变异体的个数往往会成倍,甚至成指数增加,从而导致高阶变异的效率低下。另外,有些高阶变异容易被杀死,这样的高阶变异体并不会对提高变异测试的质量起到任何作用。如何提高高阶变异测试的效率和质量,需要进一步深入研究。 
如果高阶变异体中的变异语句不能被同时执行,则不被执行的变异语句就不能发挥作用,从而不能真正体现高阶变异的效力。因此,本发明借助语句之间的占优关系来选择变异语句,从而确保所有变异语句能够被同时执行。另外,为了保证生成的高阶变异体具有好的性能,本发明给出了一种新的高阶变异体评价函数,以便生成比一阶变异体比更难杀死的高阶变异体,从而揭示程序所包含的复杂缺陷。最后,本发明设计了一种包含两个进化过程的遗传算法,来生成所需的高阶变异体。 
发明内容
本发明提出一种基于语句占优关系和两阶段遗传算法的高阶变异测试方法。首先,基于语句之间的占优关系得到程序的占优关系树,并根据占优关系树来选择所要变异的语句,从而保证位于同一个高阶变异体中的所有变异语句都被执行。然后,给出高阶变异体的定量评价方法,从而把高阶变异体的生成问题转化为一个函数优化问题。最后,根据该优化问题的特点,提出一种两阶段进化遗传算法来生成比一阶变异体更难被杀死的高阶变异体。 
本发明所要解决的技术问题:利用语句之间的占优关系解决高阶变异体的语句选择问题,从而保证高阶变异体的有效性;基于遗传算法提出一种包含两个进化过程的优化方法,生成比低阶变异体更难杀死的高阶变异体,从而揭示程序所包含的复杂缺陷。 
本发明的技术解决方案:一种基于语句占优关系和两阶段遗传算法的高阶变异测试方法,其特征包含以下步骤: 
步骤1.基于语句占优关系的高阶变异语句选择方法 
首先,根据程序的控制流图确定语句之间的占优关系,然后,利用语句之间的占优关系,构造程序的占优关系树。 
我们在生成高阶变异体时,每次只选择位于同一条占优路上的语句进行变异。这样,变异语句之间就存在一种递进的占优关系。当某个测试数据能够覆盖对其他变异语句都存在占 优关系的变异语句时,就可以覆盖所有的变异语句。 
设P是一条占优路,我们选择P中的t个语句进行变异,分别设为n1,n2,…,nt。假如对语句ni实施变异算子mi后,得到的新的语句为n'i。用n'i代替原来的语句ni,就得到一个包含t个变异语句的高阶变异体M。 
采用本方法来生成高阶变异体,不仅可以保证所有变异语句可以被同时执行,从而使生成的高阶变异体具有较好的性能,而且可以大大减少高阶变异体的数量,从而提高高阶变异测试的效率。 
步骤2.高阶变异体的评价方法 
事实上,即使采用步骤1的方法来选择变异语句,高阶变异体的个数仍会很多。另一方面,我们所需要的是能够模拟复杂缺陷、难以被杀死的高阶变异体。因此,我们需要建立合理的方法对高阶变异体的质量进行评价,从而选择质量较高的高阶变异体。 
如果一个高阶变异体比其所包含的一阶变异体更难杀死,则该高阶变异体所包含的缺陷就可以看作比一阶变异体更为复杂的程序缺陷。这样的变异体对我们是有价值的。 
本发明给出了一种新的高阶变异体评价函数。该评价函数的形式为: 
fitness ( M k ) = | kill Z { M k } | | &cup; j = 1 k kill Z { M i j } |
其中,killZ{M}表示由集合Z中能够杀死变异体M的测试数据所构成的集合。 
该公示的含义为:一个高阶变异体的适应度为杀死该高阶变异体的测试数据的个数与杀死构成该高阶变异体的一阶变异体的个数的比值。由定义,一个高阶变异体的适应值落在区间[0,+∞)上。当适应值大于1时,该高阶变异体比一阶变异体更容易被杀死,因此,对我们的测试没有任何价值;当高阶变异体的适应值从1变化到0时,其性能逐步提高;如果高阶变异体的适应值为0,我们就将其看做等价变异体。 
和已有方法的区别在于,本方法只考虑能够覆盖所有变异语句的测试数据,而不是所有测试数据。一方面,可以大大减少测试数据的数量,从而有效降低运行源程序和变异体所需的工作量。另一方面,该评价函数比原来的方法更科学、更合理,这是因为,如果一个测试数据不能使变异语句得到执行,则其对变异语句所包含错误的揭示能力就无法评价。 
步骤3.使用遗传算法生成难以杀死的高阶变异体 
本发明采用步骤2所给出的方法对高阶变异体的性能进行评价,并借助遗传算法生成性能较高的高阶变异体,具体方法如下: 
首先,给出高阶变异体的编码方法。每个高阶变异体由两个向量构成的二元组进行表示, 两个向量分别代表变异语句和变异算子。对某条占优路径所包含的语句进行选择,并对其进行变异,从而生成若干高阶变异体,并对其进行编码构成初始种群。 
然后,执行以下操作:利用测试数据分别运行源程序和变异体,得到变异体被杀死的情况,从而得到每个变异体的适应度;如果没达到终止条件。则通过适应度函数评价进化个体的优劣,并采用遗传算子生成新的进化种群。因为个体编码包含两部分,因此,种群个体的进化包含两个不断交替的过程,分别实现对个体不同部位的遗传操作。上述过程不断反复,解码后的最优解就是我们所需要的高阶变异体。 
本发明解决的是高阶变异体的生成问题。首先,基于语句之间的占优关系选择合适的变异语句,在降低高阶变异体个数的同时保证其高效性;然后,给出高阶变异体的评价函数,从而把高阶变异体的生成问题转化为一个函数优化问题;最后,利用两阶段进化遗传算法得到高质量的高阶变异体。基于占优关系的语句选择方法可以保证所有变异语句能够被同时执行,从而充分发挥高阶变异体的效力;而高阶变异体评价方法则可以保证所生成的高阶变异体比一阶变异体更难被杀死,从而揭示程序所包含的复杂缺陷。 
附图说明
图1一个实例程序及其控制流图和占优关系树 
图2本发明算法流程图 
具体实施方式
下面结合具体附图和实例对本发明的实施方式进行详细说明。 
步骤1.基于语句占优关系的高阶变异语句选择方法 
1.1基本概念 
控制流图(Control flow graph,CFG)是程序控制结构的图形表示,是一种具有如下结构的有向图G=(N,E,s,e),其中,N的元素称作G的节点,对应程序的某一条语句不具有一般性;E的元素eij=(ni,nj)称为G的边,表示从语句ni到语句nj存在控制流。每个程序的控制流图还包含一个惟一的入口节点s和出口节点e。 
路径P是指一个节点序列n1,n2,…,nl,满足从节点ni到ni+1有边存在,i=1,2,…,l-1。当程序G以X为输入时,穿越的路径记为P(X)。 
设G是一个有向图,u是G的一个节点,以u为头的边的数目称为u的入度,以u为尾的边的数目称为u的出度。 
设程序G的控制流图为G=(N,E,s,e),我们称节点n1占优节点n2,如果G中每一条从入口节点s到节点n2的路径都经过节点n1。节点n1直接占优节点n2,如果占优n2的其他节点都 占优n1,记为v=idom(u)。 
在一个控制流图G中,除了出口节点s外,所有的节点都被另外一个唯一的节点直接占优。边集{e=(idom(v),v)|v∈N-{s}}的生成图就构成一颗以s为根节点的树,称为G的占优树,记为T(G)。在占优树中,入度为零(不被任何其他节点占优)的节点称为根,而出度为零(不占优任何其他节点)的节点称为叶子。一条从根节点到某个叶子节点l的有向路称为一条占优路,记为DP(l)。占优关系树可以利用已有算法得到。 
例如,图1(a)所示的程序,其控制流图如图1(b)所示。我们可以根据语句之间的占优关系得到该程序的占优树,如图1(c)所示。 
该占优关系树共有7个叶子节点,所以一共有7条占优路,即: 
DP(4)=s,1,2,3,4; 
DP(8)=s,1,5,6,7,8; 
DP(12)=s,1,5,9,10,11,12; 
DP(17)=s,1,5,9,13,14,15,16,17; 
DP(18)=s,1,5,9,13,14,15,16,18; 
DP(19)=s,1,5,9,13,19; 
DP(q)=s,1,5,9,13,q. 
1.2变异语句选择方法 
对程序的多个语句进行变异之后,就生成了一个高阶变异体。如果在程序的运行过程中,这几个变异语句不可能被同时执行,那么,不被执行的语句所包含的错误就不可能被激发。这样,高阶变异体的作用也就不能真正发挥。因此,我们在生成高阶变异体时,总是希望所有变异语句能够被同时执行。 
鉴于以上讨论,本发明在生成高阶变异体时,每次只选择位于同一条占优路上的语句进行变异。这样,变异语句之间就存在一种递进的占优关系。当某个测试数据能够覆盖对其他变异语句都存在占优关系的变异语句时,就可以覆盖所有的变异语句。 
设P是一条占优路,选择P中的t个语句进行变异,分别设为n1,n2,…,nt。假如对语句ni实施变异算子mi后,得到的新的语句为n'i。用n'i代替原来的语句ni,就得到一个包含t个变异语句的高阶变异体M。 
因为程序包含多条占优路径,我们可以任选一个占优路径来生成高阶变异体,然后再考察其他占优路径。 
该方法不但可以保证所有变异语句能够被同时执行,从而使得高阶变异体具有好的有效 性,还可以在一定程度上减少所生成高阶变异体的数量,从而提高变异测试的效率。 
步骤2.高阶变异体的评价方法 
步骤1给出了变异语句的选择方法,该方法可以大大降低高阶变异体的个数。但是,即使我们只对位于同一条占优路径上的语句进行变异,得到的变异体的个数也会很多。如果占优路径包含n个语句,我们需要对其t个语句进行变异,每个语句有b种变异算子,那么总共可以得到个不同的变异体。例如,假设n=10,t=3,b=6,那么变异体的数量将是25920个;如果t=4,变异体的数量是272160个;如果t=5,变异体的数量将会升至1959552个。所以,要生成所有高阶变异体,将会花费很大的计算代价。 
另一方面,很容易被杀死的高阶变异体对提高变异测试的质量并不会起到多大作用。本发明需要的是那些比低阶变异体更难杀死的高阶变异体,从而揭示程序所包含的复杂缺陷。因此,需要给出合理的方法对变异体能够被杀死的难易程度进行评价。 
设T是一个已有测试数据集,
Figure BDA0000419521980000062
是按照步骤1所选择的变异数据,那么令Ζ={t∈T|t可以覆则Z是T的一个子集,且Z所包含的测试数据能够覆盖所有的变异语句。我们将利用Z所包含的测试数据对高阶变异体的性能进行评价。 
Figure BDA0000419521980000064
是对语句
Figure BDA0000419521980000065
进行变异得到的一阶变异体,Mk
Figure BDA0000419521980000066
组合在一起得到的k阶变异体。令killZ{M}表示Z中能够杀死M的测试数据所构成的集合。定义Mk的适应度如下: 
fitness ( M k ) = | kill Z { M k } | | &cup; j = 1 k kill Z { M i j } |
该公示的含义为:高阶变异体的适应度为杀死该高阶变异体的测试数据的个数与杀死构成该高阶变异体的一阶变异体的个数的比值。由定义,一个高阶变异体的适应值落在区间[0,+∞)上。当适应值大于1时,该高阶变异体比一阶变异体更容易被杀死,因此,对我们的测试没有任何价值;当高阶变异体的适应值从1变化到0时,其性能逐步提高;如果高阶变异体的适应值为0,我们就将其看做等价变异体。 
和已有方法的区别在于,本方法利用能够覆盖所有变异语句的测试数据集Z来对变异体的性能进行评价,而不是原有的测试数据集T。一方面,可以大大减少测试数据的数量,从而有效降低运行源程序和变异体所需的工作量。另一方面,该评价函数比原来的方法更科学、更合理,这是因为,如果一个测试数据不能使变异语句得到执行,则其对变异语句所包含错误的揭示能力就无法评价。 
步骤3.使用遗传算法生成难以杀死的高阶变异体 
本发明采用步骤2所给出的方法对高阶变异体的性能进行评价,借助遗传算法生成难易被杀死的高阶变异体,具体步骤如下:首先,对某条占优路径所包含的语句进行选择,并对 其进行变异,从而生成若干高阶变异体,并对其进行编码作为初始种群。每个个体的代码包含两部分,分别代表变异语句和变异算子。然后执行以下操作:利用已有测试数据分别运行源程序和变异体,得到变异体被杀死的情况,从而得到变异体的适应度;如果没达到终止条件则通过适应度函数评价进化个体的优劣,并采用遗传算子生成新的进化种群。因为个体编码包含两部分,因此,个体的进化也包含两个交替的过程,分别实现对个体不同部位的进化。如此反复,解码后的最优解就是我们所需要的高阶变异体。 
3.1个体表示方法 
在遗传算法中,所求问题的一个可能解称为一个个体。在本发明中,一体是指高阶变异体。为了准确表示一个高阶变异体,需要确定变异语句和变异算子。 
(1)变异语句表示方法 
设变异路径为P,P包含m条语句,分别记为s1,s2,…,sm。我们从s1,s2,…,sm中选出k(k≥2)条语句进行变异,从而生成一个高阶变异体。定义 
一旦我们选定k条语句进行变异,则可得到一个(0,1)-字符串(λ1,…λm),使得 
Figure BDA0000419521980000072
另一方面,如果
Figure BDA0000419521980000073
并且则我们可以用字符串(λ1,…λm)来表示我们选择语句
Figure BDA0000419521980000075
来进行变异。 
(2)变异算子表示方法 
假设每个变异语句都有n个变异算子可供选择,定义: 
γi=j,如果第i个变异语句选择了第j个变异算子 
则可得到一个长为k的向量(γ1,…γk),代表k个变异语句分别使用第γ1,…γk个变异算子进行变异。 
如果不同语句使用的变异算子的个数不同,我们可以采用合理的方法进行转化。例如,假设有两个语句进行变异,记为s1和s2。假设s1有5个变异算子,s2有3个变异算子。我们使用向量(γ12)来代笔s1选择了第γ1个变异算子,s2选择了第(γ2mod3)个变异算子,这里1≤γ12≤5,mod表示求模运算。 
Figure BDA0000419521980000076
Γ=(γ1,…γk),则我们可以用
Figure BDA0000419521980000077
表示通过对语句
Figure BDA0000419521980000078
分别实施第δ1,…,δk个变异算子所生成的k阶变异体Mk。也记Mk=(λ1,…λm1,…,δk)。 
3.2进化算子 
遗传算法通过对个体实施进化操作,使得个体的性能不断提高,并最终找到问题的最优解。常用的进化算子主要包括三类,即选择、交叉和变异。每一代种群的个体经过选择、交叉和变异操作,生成新一代种群。如此不断反复,直到满足算法的终止条件。 
因为每个个体可以分为两个完全不同的部分,本发明设计了两个相互交替的进化过程,分别实现个体不同部分的进化。两个进化过程的区别主要体现在实施交叉和变异算子的部位和策略不同,而选择算子并没有本质区别。因此,我们将首先统一介绍选择算子,再分别介绍交叉算子和变异算子。 
(1)选择算子 
本发明采用轮盘赌方法进行个体选择,并使用贪心策略。首先,根据适应值选择5%的个体直接进入下一代种群;同时,把这部分个体投入交叉池。然后,采用轮盘赌策略再选择50%的个体进入交叉池。 
(2)交叉算子 
采用单点交叉算子对个体进行交叉。首先,随机选择交叉点;然后,让该点前或后的两个个体的部分结构进行互换,并生成两个新个体。 
第一个阶段:该阶段对个体第一部分进行交叉。设: 
in div idual ( 1 ) = ( &lambda; 1 ( 1 ) , &CenterDot; &CenterDot; &CenterDot; &lambda; m ( 1 ) | &delta; 1 ( 1 ) , &CenterDot; &CenterDot; &CenterDot; , &delta; k ( 1 ) )
in div idual ( 2 ) = ( &lambda; 1 ( 2 ) , &CenterDot; &CenterDot; &CenterDot; &lambda; m ( 2 ) | &delta; 1 ( 2 ) , &CenterDot; &CenterDot; &CenterDot; , &delta; k ( 2 ) )
为两个个体。随机选择一个交叉点,记为c1,其中1≤c1≤m-1。让个体individual(1)和individual(2)的第一部分在第c1个基因位后进行交叉,从而生成两个新的个体: 
in div idual ( 3 ) = ( &lambda; 1 ( 1 ) , &CenterDot; &CenterDot; &CenterDot; &lambda; c 1 ( 1 ) , &lambda; c 1 + 1 ( 2 ) , &CenterDot; &CenterDot; &CenterDot; , &lambda; m ( 2 ) | &delta; 1 ( 1 ) , &CenterDot; &CenterDot; &CenterDot; , &delta; k ( 1 ) )
in div idual ( 4 ) = ( &lambda; 1 ( 2 ) , &CenterDot; &CenterDot; &CenterDot; &lambda; c 1 ( 2 ) , &lambda; c 1 + 1 ( 1 ) , &CenterDot; &CenterDot; &CenterDot; , &lambda; m ( 1 ) | &delta; 1 ( 2 ) , &CenterDot; &CenterDot; &CenterDot; , &delta; k ( 2 ) )
需要说明的是,如果 &lambda; 1 ( 1 ) + &CenterDot; &CenterDot; &CenterDot; + &lambda; c 1 ( 1 ) + &lambda; c 1 + 1 ( 2 ) + &CenterDot; &CenterDot; &CenterDot; + &lambda; m ( 2 ) &NotEqual; k , 或者 &lambda; 1 ( 2 ) + &CenterDot; &CenterDot; &CenterDot; + &lambda; c 1 ( 2 ) + &lambda; c 1 + 1 ( 1 ) + &CenterDot; &CenterDot; &CenterDot; + &lambda; m ( 1 ) &NotEqual; k , 那么individual(3)或者individual(4)将不能表示k阶变异体。在这种情况下,我们需要对个体进行修正。假设(λ1,…λm,|δ1,…,δk)是一个个体。如果λ1+…+λm<k,那么我们将(λ1,…λm)中最前面的(λ1+…+λm)-k个字符1改为0;反之,如果λ1+…+λm>k,则将(λ1,…λm)中最前面的k-(λ1+…+λm)个字符0改为1。这样,则可以保证(λ1,…λm,|δ1,…,δk)是k阶变异体。 
第二个阶段:该阶段对个体第二部分进行交叉。设: 
in div idual ( 1 ) = ( &lambda; 1 ( 1 ) , &CenterDot; &CenterDot; &CenterDot; &lambda; m ( 1 ) | &delta; 1 ( 1 ) , &CenterDot; &CenterDot; &CenterDot; , &delta; k ( 1 ) )
in div idual ( 2 ) = ( &lambda; 1 ( 2 ) , &CenterDot; &CenterDot; &CenterDot; &lambda; m ( 2 ) | &delta; 1 ( 2 ) , &CenterDot; &CenterDot; &CenterDot; , &delta; k ( 2 ) )
为两个个体。随机选择一个交叉点,记为c2,其中1≤c2≤k-1。让个体individual(1)和individual(2)的第二部分在第c2个基因位后进行交叉,从而生成两个新的个体: 
in div idual ( 1 ) = ( &lambda; 1 ( 1 ) , &CenterDot; &CenterDot; &CenterDot; &lambda; m ( 1 ) | &delta; 1 ( 1 ) , &CenterDot; &CenterDot; &CenterDot; , &lambda; c 2 ( 1 ) , &delta; c 2 + 1 ( 2 ) &CenterDot; &CenterDot; &CenterDot; , &delta; k ( 2 ) )
in div idual ( 2 ) = ( &lambda; 1 ( 2 ) , &CenterDot; &CenterDot; &CenterDot; &lambda; m ( 2 ) | &delta; 1 ( 2 ) , &CenterDot; &CenterDot; &CenterDot; , &lambda; c 2 ( 2 ) , &delta; c 2 + 1 ( 1 ) &CenterDot; &CenterDot; &CenterDot; , &delta; k ( 1 ) )
(3)变异算子 
采用单点变异算子对个体进行变异。首先,随机选择一个变异点;然后,用一个新的值替换该变异点的值,从而得到一个新个体。 
第一个阶段:该阶段对个体第一部分进行变异。设: 
individual=(λ1,…λm1,…,δk
是一个个体。随机选择一个变异点,记为c1,其中1≤c1≤m。如果个体individual第一部分第c1个基因位的值是1,则变为0;如果是0,则变为1,从而生成一个新的个体。 
第二个阶段:该阶段对个体第二部分进行变异。设: 
individual=(λ1,…λm1,…,δk
为一个个体。随机选择一个交叉点,记为c2,其中1≤c2≤k。让个体individual第二部分第c2个基因位的值随机替换为中的某个值,从而生成一个新的个体 
3.3算法终止条件 
本算法的终止条件包含两方面内容:一是针对每条占优路径运行遗传算法的的终止条件,二是针对整个被测程序搜索过程的终止条件。本发明中,针对每条占优路径运行遗传算法的的终止条件当前进化达到一定代数。针对整个被测程序搜索过程的终止条件是所有占优路径都得到遍历。 
3.4算法步骤 
本算法的基本步骤如下: 
步骤1:对交叉算子、变异算子等控制参数赋值; 
步骤2:选择一条没有遍历的占优路径; 
步骤3:初始化种群; 
步骤4:计算个体适应值; 
步骤5:判断是否满足算法终止条件,若满足,转步骤8; 
步骤6:判断当前的所属的进化阶段; 
步骤7:对个体实施相应阶段的选择、交叉和变异遗传操作,生成子代种群,转步骤4; 
步骤8:终止当前遗传算法,输出满足要求的高阶变异体。 
步骤9:判断是否所有占优路径都得到遍历,若满足,停止;否则,转步骤2。 
算法流程图如图2所示。 

Claims (4)

1.基于语句占优关系和两阶段遗传算法的高阶变异测试方法,其特征在于如下步骤: 
步骤1.1:提出基于语句占优关系的变异语句选择方法,保障位于同一个高阶变异体中的所有变异语句都被执行; 
步骤1.2:给出一种新的高阶变异体评价的方法,保障生成的高阶变异体比起低价变异体具有更好的检错能力。 
步骤1.3:设计了一种包含两个交替进化过程的遗传算法,来生成高质量的高阶变异体,从而揭示程序所包含的复杂缺陷。 
2.权利要求1中步骤1.1所述的基于语句占优关系的变异语句选择方法,其特征在于本发明在生成高阶变异体时,每次只选择位于同一条占优路上的语句进行变异。这样,变异语句之间就存在一种递进的占优关系。当某个测试数据能够覆盖对其他变异语句都存在占优关系的变异语句时,就可以覆盖所有的变异语句。 
设P是一条占优路,选择P中的t个语句进行变异,分别设为n1,n2,…,nt。假如对语句ni实施变异算子mi后,得到的新的语句为n'i。用n'i代替原来的语句ni,就得到一个包含t个变异语句的高阶变异体M。 
3.权利要求1中步骤1.2所述的新的高阶变异体评价的方法,其特征在于给出了一种新的高阶变异体评价方法,从而保证可以生成质量较高的高阶变异体。 
设T是一个已有测试数据集,
Figure FDA0000419521970000011
是按照步骤1所选择的变异数据,那么令Ζ={t∈T|t可以覆
Figure FDA0000419521970000012
则Z是T的一个子集,且Z所包含的测试数据能够覆盖所有的变异语句。我们将利用Z所包含的测试数据对高阶变异体的性能进行评价。 
Figure FDA0000419521970000013
是对语句进行变异得到的一阶变异体,Mk
Figure FDA0000419521970000015
组合在一起得到的k阶变异体。令killZ{M}表示Z中能够杀死M的测试数据所构成的集合。定义Mk的适应度如下: 
Figure FDA0000419521970000016
该公示的含义为:高阶变异体的适应度为杀死该高阶变异体的测试数据的个数与杀死构成该高阶变异体的一阶变异体的个数的比值。由定义,一个高阶变异体的适应值落在区间[0,+∞)上。当适应值大于1时,该高阶变异体比一阶变异体更容易被杀死,因此,对我们的测试没有任何价值;当高阶变异体的适应值从1变化到0时,其性能逐步提高;如果高阶变异体的适应值为0,我们就将其看做等价变异体。 
和已有方法的区别在于,本方法利用能够覆盖所有变异语句的测试数据集Z来对变异体的性能进行评价,而不是原有的测试数据集T。一方面,可以大大减少测试数据的数量,从 而有效降低运行源程序和变异体所需的工作量。另一方面,该评价函数比原来的方法更科学、更合理,这是因为,如果一个测试数据不能使变异语句得到执行,则其对变异语句所包含错误的揭示能力就无法评价。 
4.权利要求1中步骤1.3所述包含两个交替进化过程的遗传算法,其特征在于以下步骤: 
步骤4.1:个体表示方法 
在遗传算法中,所求问题的一个可能解称为一个个体。在本发明中,一体是指高阶变异体。为了准确表示一个高阶变异体,需要确定变异语句和变异算子。 
(1)变异语句表示方法 
设变异路径为P,P包含m条语句,分别记为s1,s2,…,sm。我们从s1,s2,…,sm中选出k(k≥2)条语句进行变异,从而生成一个高阶变异体。定义 
Figure FDA0000419521970000021
一旦我们选定k条语句进行变异,则可得到一个(0,1)-字符串(λ1,…λm),使得 
Figure FDA0000419521970000022
另一方面,如果
Figure FDA0000419521970000023
并且
Figure FDA0000419521970000024
则我们可以用字符串(λ1,…λm)来表示我们选择语句
Figure FDA0000419521970000025
来进行变异。 
(2)变异算子表示方法 
假设每个变异语句都有n个变异算子可供选择,定义: 
γi=j,如果第i个变异语句选择了第j个变异算子 
则可得到一个长为k的向量(γ1,…γk),代表k个变异语句分别使用第γ1,…γk个变异算子进行变异。 
如果不同语句使用的变异算子的个数不同,我们可以采用合理的方法进行转化。例如,假设有两个语句进行变异,记为s1和s2。假设s1有5个变异算子,s2有3个变异算子。我们使用向量(γ12)来代笔s1选择了第γ1个变异算子,s2选择了第(γ2mod3)个变异算子,这里1≤γ12≤5,mod表示求模运算。 
Figure FDA0000419521970000026
Γ=(γ1,…γk),则我们可以用
Figure FDA0000419521970000027
表示通过对语句
Figure FDA0000419521970000028
分别实施第δ1,…,δk个变异算子所生成的k阶变异体Mk。也记Mk=(λ1,…λm1,…,δk)。 
步骤4.2:进化算子设计方法 
遗传算法通过对个体实施进化操作,使得个体的性能不断提高,并最终找到问题的最优解。常用的进化算子主要包括三类,即选择、交叉和变异。每一代种群的个体经过选择、交叉和变异操作,生成新一代种群。如此不断反复,直到满足算法的终止条件。 
因为每个个体可以分为两个完全不同的部分,本发明设计了两个相互交替的进化过程,分别实现个体不同部分的进化。两个进化过程的区别主要体现在实施交叉和变异算子的部位 和策略不同,而选择算子并没有本质区别。因此,我们将首先统一介绍选择算子,再分别介绍交叉算子和变异算子。 
(1)选择算子 
本发明采用轮盘赌方法进行个体选择,并使用贪心策略。首先,根据适应值选择5%的个体直接进入下一代种群;同时,把这部分个体投入交叉池。然后,采用轮盘赌策略再选择50%的个体进入交叉池。 
(2)交叉算子 
采用单点交叉算子对个体进行交叉。首先,随机选择交叉点;然后,让该点前或后的两个个体的部分结构进行互换,并生成两个新个体。 
第一个阶段:该阶段对个体第一部分进行交叉。设: 
Figure FDA0000419521970000031
Figure FDA0000419521970000032
为两个个体。随机选择一个交叉点,记为c1,其中1≤c1≤m-1。让个体individual(1)和individual(2)的第一部分在第c1个基因位后进行交叉,从而生成两个新的个体: 
Figure FDA0000419521970000033
Figure FDA0000419521970000034
需要说明的是,如果
Figure FDA0000419521970000035
或者
Figure FDA0000419521970000036
那么individual(3)或者individual(4)将不能表示k阶变异体。在这种情况下,我们需要对个体进行修正。假设(λ1,…λm,|δ1,…,δk)是一个个体。如果λ1+…+λm<k,那么我们将(λ1,…λm)中最前面的(λ1+…+λm)-k个字符1改为0;反之,如果λ1+…+λm>k,则将(λ1,…λm)中最前面的k-(λ1+…+λm)个字符0改为1。这样,则可以保证(λ1,…λm,|δ1,…,δk)是k阶变异体。 
第二个阶段:该阶段对个体第二部分进行交叉。设: 
Figure FDA0000419521970000038
为两个个体。随机选择一个交叉点,记为c2,其中1≤c2≤k-1。让个体individual(1)和individual(2)的第二部分在第c2个基因位后进行交叉,从而生成两个新的个体: 
Figure FDA00004195219700000310
(3)变异算子 
采用单点变异算子对个体进行变异。首先,随机选择一个变异点;然后,用一个新的值替换该变异点的值,从而得到一个新个体。 
第一个阶段:该阶段对个体第一部分进行变异。设: 
individual=(λ1,…λm1,…,δk
是一个个体。随机选择一个变异点,记为c1,其中1≤c1≤m。如果个体individual第一部分第c1个基因位的值是1,则变为0;如果是0,则变为1,从而生成一个新的个体。 
第二个阶段:该阶段对个体第二部分进行变异。设: 
individual=(λ1,…λm1,…,δk
为一个个体。随机选择一个交叉点,记为c2,其中1≤c2≤k。让个体individual第二部分第c2个基因位的值随机替换为
Figure FDA0000419521970000041
中的某个值,从而生成一个新的个体 
步骤4.3:算法终止条件 
本算法的终止条件包含两方面内容:一是针对每条占优路径运行遗传算法的的终止条件,二是针对整个被测程序搜索过程的终止条件。本发明中,针对每条占优路径运行遗传算法的的终止条件当前进化达到一定代数。针对整个被测程序搜索过程的终止条件是所有占优路径都得到遍历。 
CN201310595506.7A 2013-11-21 2013-11-21 基于语句占优关系和两阶段遗传算法的高阶变异测试方法 Expired - Fee Related CN103605605B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310595506.7A CN103605605B (zh) 2013-11-21 2013-11-21 基于语句占优关系和两阶段遗传算法的高阶变异测试方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310595506.7A CN103605605B (zh) 2013-11-21 2013-11-21 基于语句占优关系和两阶段遗传算法的高阶变异测试方法

Publications (2)

Publication Number Publication Date
CN103605605A true CN103605605A (zh) 2014-02-26
CN103605605B CN103605605B (zh) 2016-05-25

Family

ID=50123834

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310595506.7A Expired - Fee Related CN103605605B (zh) 2013-11-21 2013-11-21 基于语句占优关系和两阶段遗传算法的高阶变异测试方法

Country Status (1)

Country Link
CN (1) CN103605605B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104750610A (zh) * 2015-03-24 2015-07-01 中国矿业大学 基于占优度的消息传递并行程序变异体约简方法
CN105302719A (zh) * 2015-10-26 2016-02-03 北京科技大学 一种变异测试方法及装置
CN107729241A (zh) * 2017-10-12 2018-02-23 中国矿业大学 一种基于变异体分组的软件变异测试数据进化生成方法
CN109739746A (zh) * 2018-12-12 2019-05-10 江苏师范大学 一种基于原语句占优分析的变异测试方法
CN111352830A (zh) * 2020-01-06 2020-06-30 中国矿业大学 基于语句占优关系的变异测试数据进化生成方法
CN112699054A (zh) * 2020-08-03 2021-04-23 徐州工程学院 一种软件测试用例有序生成方法
CN113778876A (zh) * 2021-09-09 2021-12-10 南京大学 一种源代码层面的程序变异的生成方法和装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5754760A (en) * 1996-05-30 1998-05-19 Integrity Qa Software, Inc. Automatic software testing tool
CN102141958A (zh) * 2011-03-09 2011-08-03 中国矿业大学 面向缺陷的路径覆盖测试数据进化生成方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5754760A (en) * 1996-05-30 1998-05-19 Integrity Qa Software, Inc. Automatic software testing tool
CN102141958A (zh) * 2011-03-09 2011-08-03 中国矿业大学 面向缺陷的路径覆盖测试数据进化生成方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
姚香娟 等: "基于路径比较的变异测试方法", 《电子学报》 *

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104750610A (zh) * 2015-03-24 2015-07-01 中国矿业大学 基于占优度的消息传递并行程序变异体约简方法
CN104750610B (zh) * 2015-03-24 2018-01-09 中国矿业大学 基于占优度的消息传递并行程序变异体约简方法
CN105302719A (zh) * 2015-10-26 2016-02-03 北京科技大学 一种变异测试方法及装置
CN105302719B (zh) * 2015-10-26 2017-11-28 北京科技大学 一种变异测试方法及装置
CN107729241A (zh) * 2017-10-12 2018-02-23 中国矿业大学 一种基于变异体分组的软件变异测试数据进化生成方法
CN107729241B (zh) * 2017-10-12 2020-11-03 中国矿业大学 一种基于变异体分组的软件变异测试数据进化生成方法
CN109739746A (zh) * 2018-12-12 2019-05-10 江苏师范大学 一种基于原语句占优分析的变异测试方法
CN111352830A (zh) * 2020-01-06 2020-06-30 中国矿业大学 基于语句占优关系的变异测试数据进化生成方法
CN111352830B (zh) * 2020-01-06 2023-10-24 中国矿业大学 基于语句占优关系的变异测试数据进化生成方法
CN112699054A (zh) * 2020-08-03 2021-04-23 徐州工程学院 一种软件测试用例有序生成方法
CN113778876A (zh) * 2021-09-09 2021-12-10 南京大学 一种源代码层面的程序变异的生成方法和装置

Also Published As

Publication number Publication date
CN103605605B (zh) 2016-05-25

Similar Documents

Publication Publication Date Title
CN103605605A (zh) 基于语句占优关系和两阶段遗传算法的高阶变异测试方法
Lomuscio et al. An approach to reachability analysis for feed-forward relu neural networks
Ascia et al. Efficient design space exploration for application specific systems-on-a-chip
CN104200087B (zh) 用于机器学习的参数寻优及特征调优的方法及系统
CN103559129B (zh) 基于遗传算法的统计回归测试数据生成方法
Mao et al. Towards a trust prediction framework for cloud services based on PSO-driven neural network
CN107729241B (zh) 一种基于变异体分组的软件变异测试数据进化生成方法
CN105808426A (zh) 一种用于弱变异测试的路径覆盖测试数据生成方法
Jiang et al. Automatic test data generation based on reduced adaptive particle swarm optimization algorithm
CN103116540A (zh) 基于全局超级块支配图的动态符号执行方法及其装置
CN108804473A (zh) 数据查询的方法、装置和数据库系统
CN104281522B (zh) 基于语句覆盖和缺陷检测的多目标测试数据缩减方法
CN103440377A (zh) 基于改进并行de算法的飞行器气动外形优化设计方法
CN109918304A (zh) 一种快速高路径覆盖率测试用例生成方法
Deng et al. Establishment of attribute bitmaps for efficient XACML policy evaluation
Ghiduk et al. Using genetic algorithms and dominance concepts for generating reduced test data
Fang et al. A Dynamic Transformation Car-Following Model for the Prediction of the Traffic Flow Oscillation
Nesi et al. H2-SLAN: A hyper-heuristic based on stochastic learning automata network for obtaining, storing, and retrieving heuristic knowledge
Ioannides et al. Introducing xcs to coverage directed test generation
Guo et al. Automated framework for general-purpose genetic algorithms in FPGAs
Zhang et al. An optimization algorithm applied to the class integration and test order problem
Werth et al. Surrogate-assisted microscopic traffic simulation-based optimisation of routing parameters
CN113377651A (zh) 一种基于强化学习的类集成测试序列生成方法
Chang et al. E-mapp: Efficient multi-agent reinforcement learning with parallel program guidance
Sepúlveda et al. A multi-objective adaptive immune algorithm for NoC mapping

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: 20160525

Termination date: 20161121

CF01 Termination of patent right due to non-payment of annual fee