一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于集合进化的软件测试路径生成方法及系统与流程

2021-12-04 02:52:00 来源:中国专利 TAG:

1.本发明涉及特定计算模型的计算机系统相关技术领域,具体的说,是涉及基于集合进化的软件测试路径生成方法及系统,可用于程序路径测试,提高测试效率。


背景技术:

2.本部分的陈述仅仅是提供了与本发明相关的背景技术信息,并不必然构成在先技术。
3.软件测试是发现软件错误,衡量软件质量的重要手段。许多测试问题可以转化为路径覆盖问题。因此,进行路径测试的关键,是采用有针对性的理论和方法,自动产生合理有效的路径集,从而以该路径集为准则,生成满足覆盖要求的测试数据或者进行其他测试工作。
4.发明人发现,现有的路径生成方法存在各种问题:

将有限状态转换为扩展有限状态树,基于此产生路径,但只能根据测试要求选择求解的路径,不能够生成全部路径;

采用遗传算法生成路径,基于该方法生成的路径不能覆盖全部控制流图的边。

在使用其他优化算法生成路径时,只考虑了路径合理性一个条件,忽略了覆盖难度和代价等问题。


技术实现要素:

5.本发明为了解决上述问题,提出了基于集合进化的软件测试路径生成方法及系统,能够直接生成完整的程序路径集合,提高测试效率。
6.为了实现上述目的,本发明采用如下技术方案:一个或多个实施例提供了基于集合进化的软件测试路径生成方法,包括如下过程:根据设置的约减规则约减待测试程序的控制流图,并获取控制流图中的节点信息;根据节点信息初始化集合进化种群:以一个路径集合作为一个进化个体,以一条路径表示一条染色体;以路径中相邻边数的占比构造集合进化适应度函数,针对路径的生成特点设置集合进化算子;根据设置的适应度函数计算进化个体的适应度,基于遗传算法,采用集合进化的方法输出适应度最大的进化个体,作为软件测试的路径集合。
7.一个或多个实施例提供了基于集合进化的软件测试路径生成系统,包括采集装置、通信网络和测试终端,采集装置和测试终端通过通信网络建立连接;采集装置:被配置为用于获取待测试软件的控制流图;测试终端:被配置为用于执行上述的基于集合进化的软件测试路径生成方法的步骤。
8.与现有技术相比,本发明的有益效果为:
本发明采用集合进化方法生成软件测试的路径集合,不仅可以生成完整的测试路径集合,而且通过智能优化方法和集合进化思想与软件测试的融合,大大提高测试效率。
9.本发明附加方面的优点将在下面的描述中给出,或者将从下面的描述中变得明显。
附图说明
10.构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的限定。
11.图1是本发明实施例1的路径生成方法流程图;图2是本发明实施例1的集合进化遗传算法流程图;图3是本发明实施例1的示例程序源代码;图4是本发明实施例1的示例程序约减前的控制流图;图5是本发明实施例1的示例程序约减后的控制流图。
具体实施方式
12.下面结合附图与实施例对本发明作进一步说明。
13.应该指出,以下详细说明都是示例性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
14.需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。需要说明的是,在不冲突的情况下,本发明中的各个实施例及实施例中的特征可以相互组合。下面将结合附图对实施例进行详细描述。
15.实施例1在一个或多个实施方式公开的技术方案中,如图1所示,基于集合进化的软件测试路径生成方法,包括如下步骤:步骤1、根据设置的约减规则约减待测试程序的控制流图,并获取控制流图中的节点信息;步骤2、根据节点信息初始化集合进化种群;步骤3、以路径中相邻边数的占比作为集合进化适应度函数,针对路径生成的特点设计特定的集合进化算子;步骤4、根据设置的适应度函数计算进化个体的适应度,基于遗传算法,采用集合进化的方法输出适应度最大的进化个体,作为软件测试的路径集合。
16.本实施例采用集合进化方法生成软件测试的路径集合,能够生成完整的测试路径集合,提高测试效率。
17.步骤1中,约减待测试程序的控制流图,并获取控制流图中的节点信息,包括如下步骤:
步骤1.1构建程序控制流图;控制流图是分析程序经常使用的一种抽象数据结构,能够很好地反映程序间的执行关系。
18.构建程序控制流图,具体的,针对程序源码进行分析,确定程序中包含的基本结构,依据三种基本结构构建程序控制流图。其中,所述程序的基本结构包括分支结构、顺序结构和循环结构。
19.步骤1.2约减控制流图;根据约减规则对构建的控制流图进行简化,本实施例中,约减规则可以具体为:约减顺序结构,将顺序结构中串行执行的节点约减为一个节点表示;约减分支结构,如果两个分支中只含有单独一个节点则保持不变,否则按照顺序结构和循环结构的约减规则进行约减;约减循环结构,对于循环结构只考虑循环一次的情况,循环内如果只含有单独一个节点则保持不变,否则按照顺序结构和分支结构约减规则进行约减。
20.步骤1.3获取控制流图中节点信息;其中,每个节点的节点信息包括对应的后续节点和兄弟节点的信息。根据约减后的控制流图,获取各个节点对应的后续节点和兄弟节点的信息,并存储在对应的集合当中,并确定控制流图的开始节点和结束节点信息。
21.步骤2中,根据节点信息初始化集合进化种群,具体的:每个进化种群中包含多个进化个体,每个进化个体中包含多条染色体,其中每个集合进化个体代表一个路径集合,进化个体中的多条染色体表示多条路径。
22.种群中每个进化个体初始化过程为:步骤2.1将一个路径集合作为一个进化个体,进化个体中的多条染色体表示多条路径;步骤2.2采用顺序执行的节点来表示路径,并对每条路径以整数进行编码,设置种群中进化个体的规模不同,为每条路径添加开始节点和结束节点。
23.种群中个体的规模不同,即每个集合中包含的路径条数也不相同,可以在集合进化算法过程中,使得进化个体能够通过集合交叉操作改变。另外设置路径长度的不同,每个进化个体包含的染色体长度也不相同,保证了路径的多样性。
24.本实施例中,在初始化过程中,为每条路径添加开始节点和结束节点,能保证进化过程沿着正确的方向执行,能够更好的生成正确的路径。
25.步骤3中,构造集合进化适应度函数,具体为:路径集合中一条染色体上相邻的边数在同一染色体上的总边数中的占比,即一条路径中相邻边的数量在该路径总边数的占比,通过染色体的节点编码和后续节点信息来确定路径中的相邻边,具体适应度函数公式如下:其中,是一条路径中包含的相邻边的个数,是一条路径中总共包含的边的个数。
26.集合进化每个进化个体的适应度函数值,为集合中该进化个体所有染色体适应度
函数值的平均值。
27.当一个集合中的多条路径存在一些路径适应度为1,而另一些路径适应度达不到1的情况,将适应度达不到1的路径进行置0处理,进而将整个进化个体的适应度拉低处理,防止整个集合的路径陷入局部最优。
28.步骤3中,还包括设计集合进化算子:根据路径生成的特点改进集合进化的遗传算子。
29.采用集合进化生成路径,生成的路径不是单独一条路径,而是包含多条路径的路径集合,设计进化算子中需要考虑路径的多样性和单条路径的完整性,针对该特性设计基于集合进化的遗传算子,包括集合交叉算子、集合变异算子和集合育种算子。
30.(一)集合交叉算子:考虑不同个体之间的交叉以及个体内部的交叉,设置集合进化的交叉算子;具体的,首先进行不同进化个体之间的交叉,然后对交叉后产生的新个体执行个体内部的交叉。
31.集合之间的交叉操作,在本方法中一个路径集合中的所有路径就代表的是要求的解,进行集合间的交叉,就是交换两个集合中包含的染色体,即交换两个集合中的路径,也就是交换不同集合的解。
32.进化个体之间的交叉策略具体如下:(1)对所有进化个体两两配对;(2)根据设置的交叉概率cp判断配对的两个进化个体是否需要执行交叉操作,如果是,执行下一步,否则,结束;(3)无论当前两个进化个体的规模是否相同,分别在两个个体上随机选择一个交叉点;(4)将两进化个体从各自交叉点到末尾进行互换,通过交换染色体产生新的进化个体。
33.对于新产生的两个个体分别采用集合内部的交叉操作:(1)在一个新进化个体(即新的路径集合)中,匹配两条染色体;(2)根据交叉概率cp判断配对的两条染色体是否需要执行交叉操作,如果需要执行下一步,否则结束;(3)随机选择一个交叉点,交换两条染色体交叉点后的基因,产生两条新的染色体。
34.(二)集合变异算子:识别需要变异的基因位置,将该位置上节点变异为其兄弟节点;集合变异操作策略具体如下:识别种群中的集合进化个体中每条染色体,如果染色体的适应度为1即为完整路径,不进行变异操作;否则,针对适应度不为1染色体执行下面的操作:首先,针对染色体的每个基因位置分别产生一个0

1范围内的随机数,判断每个基因位置产生的随机数是否大于设置的变异概率mp,依据变异概率判断需要执行集合变异操作的基因位置;然后,对于需要变异的基因位置,将位置上的节点变异为其兄弟节点,如果需要变异的节点不存在兄弟节点,那么不执行集合变异操作。
35.其中,具有同一父节点的节点称为兄弟节点。
36.本实施例设置的变异算子首先能够适应集合进化,并且能够更好的覆盖分支结构,保证路径的多样性,进一步保证了生成的路径集合的完整。
37.(三)集合育种算子:确定染色体的育种点位置,将该位置上插入该染色体上的节点,增加染色体的长度。
38.集合育种算子为:设计新的集合进化算子来扩展集合中的染色体进而生成不同长度的完整路径。集合育种算子的主要作用是在染色体中插入新的节点,直到它们组成完整的路径。
39.集合育种操作策略,具体如下:(1)识别种群中的集合进化个体,对集合个体中的每条染色体进行识别,当集合中存在适应度为1的染色体,则为完整路径不进行育种操作;(2)针对集合进化个体中的非完整路径的染色体,识别该路径顺序执行的缺口处,作为育种点的位置;(3)识别育种点位置,确定该位置上的节点a,从节点a的后续节点中随机选择一个节点b;(4)在节点a后面的位置插入节点b,使染色体长度增加1。
40.本实施例设置的育种算子,首先能够适应集合进化,针对路径生成设计的算子,通过后续节点的添加,路径中每个节点都是顺序执行的,促进路径沿着正确方向生成。
41.步骤4中,基于遗传算法,采用集合进化的方法生成路径集合,如图2所示,具体方法如下:步骤4.1设定集合进化参数;设定集合进化的遗传参数,包括给出集合进化种群规模、交叉、变异概率及最大迭代数等参数值。
42.步骤4.2根据设置的参数初始化集合进化种群;根据步骤4.1中给出的种群规模,生成初代集合进化种群。
43.种群的初始化当中,采用了集合进化的思想,能够覆盖控制流图中的所有路径,能够使得生成的路径更加完整。
44.步骤4.3评估集合进化个体,并计算进化个体适应度函数值;具体的进化个体适应度函数,具体为:其中,n是进化个体中的染色体数量,为第i条染色体的适应度函数值。
45.步骤4.4根据得到的适应度函数值,判断是否找到最优解,若找到,则终止算法,输出路径集合;否则,对种群进行集合遗传操作生成子代集合进化种群,执行步骤4.3。
46.具体的,判断找到最优解的方法为将适应度数值与设定的适应度比较,设定的适应度可以为1或者小于1的任意数值,当适应度值达到设定的适应度即为找到最优解。
47.其中,集合遗传操作包括集合变异操作、集合交叉操作和集合育种操作。
48.具体的,根据前述的集合变异操作策略、集合交叉操作策略和集合育种操作策略
对应实施变异操作。
49.下面以一个具体的示例对上述的方法进行说明。
50.选择程序triangle作为被测程序,该程序的功能是,求3个输入变量能否构成三角形,如果能构成三角形则判断三角形类型并输出构成的三角形面积,程序的输入为。该程序首先获得输入的三角形的三条边,判断三条边能否构成三角形,如果不能构成三角形,则结束程序,输出不能构成三角形;如果能构成三角形则输出该三角形的面积并进一步判断构成三角形的类型,最后输出构成的三角形类型。程序triangle的代码如图3所示。
51.执行步骤1静态分析被测程序的源代码构建被测程序的控制流图,如图4所示。通过程序的控制流图,分析其中包含的程序的基本结构,按照控制流图的约减规则进行约减,而后获得约减后的控制流图,如图5所示。
52.基于新获得的控制流图获取各个节点的信息,得到各个节点的兄弟节点信息和后续节点信息并存储到对应的集合中去。以节点和节点为例,节点存在兄弟节点和后续节点;节点存在兄弟节点以及后续节点和。
53.根据步骤2,初始化集合进化种群以及路径集合,确定进化种群中包含的个体数,并且为每个进化个体分配合适规模,并为每个路径集合中的路径添加初始节点和结束节点。
54.在集合进化种群初始化的过程中为进化种群pop设置随机大小popsize,进化种群中含有popsize个进化个体,每个进化个体包含随机条染色体。假设种群包含3个个体,3个个体分别包含3、2和3条染色体,也就是3个集合分别包含3、2和3条路径。个体即路径集合存在3条路径,由图5得到开始节点和结束节点分别为和,那么初始化后的路径集合如下。
55.根据步骤3的集合进化的适应度函数计算路径集合中每条路径的适应值,最后获得路径集合的适应值。假设进化过程中,存在一个进化个体也就是一个路径集合含有三条路径:、和。那么按照公式计算每条路径的适应值分别为1、0.75和0.8,那么可以获得该路径集合的适应值为0.85。
56.根据步骤3,设计有针对性的集合交叉、集合变异和集合育种算子。首先进行集合交叉操作,选定的进行集合交叉的两个个体x1和x2,两个个体分别包含四条染色体,也就是四条路径,其中,。假设交叉点为2,那么交叉后的新个体为,。然后,执行集合内部的交叉操作,假设存在个体中进行交叉的路径分别为和,交叉点为3,那么交叉后的产生的两条新路径分别为和。然后进行集合变异操作,存在路径,此时为位置2和位置5上的基因发生变异,也就是节点和节点,由于节点不存在兄弟节点所以不进行变异,节点存在兄弟节点,那么可以变异为,这样变异完成后的路径为。最后进行集合育种操作,假设存在路径,进行育种操作为节点添加后续节点,从的后续节点中随机选择一个,假设选择的节点为,那么就在的位置后添加,这样就产生新的路径。
57.最终,设计合适的集合进化参数,根据集合进化适应度函数和集合进化算子,使用遗传算法生成路径集合{,,,,
}。
58.为了说明效果进行了仿真实验,将本实施例采用所提方法生成路径集合与非集合进化方法、随机法两种算法进行比较。具体的,将个体数量设置为30,交叉概率为0.8,变异概率为0.1,使用三种方法运行示例程序,通过迭代次数、成功率和方法运行次数来比较,每种方法进行10次实验。示例程序有5条路径。
59.迭代次数指标为运行方法能够生成所有完整路径的迭代次数的平均值。
60.如集合进化方法运行一次得到的路径数为5,即生成了完整路径,运行一次的迭代次数为12;同样的实验,第二次也生成完整路径,迭代次数是10,迭代次数指标取两次的平均值就是11,进行10次实验同样取平均值更新该指标。随机法第一次运行一次输出一条路径,迭代次数为11,需要至少运行5次才能输出5条路径,如果中间有重复的路径需要继续运行更多的次数,输出一次完整路径获得的迭代次数就是每次运行的迭代次数的和。这样进行10次运行实验,每次实验到能够输出完整路径截止,取10次的迭代次数平均值,作为迭代次数指标。
61.方法运行次数指标,运行方法能够生成所有完整路径的运行次数的平均值。
62.实验中,集合进化方法每次运行都能生成所有的路径,10次实验都是1次,方法运行次数指标就是1,非集合进化方法和随机方法每次运行只能生成一条路径,而且有可能输出重复的路径,如随机方法第一次实验运行了8次输出了完整的路径,第一次实验的运行次数就是8,第二次运行了6次输出了完整的路径,第二次实验的运行次数就是6,两次运行的平均值为7;运行10次,求平均值,即为随机法的方法运行次数指标。
63.可以将成功率定义为:每次实验生成的不同路径数量对路径总数量的覆盖率的平均值。即不同方法每次实验得到的路径数量不同,如集合进化方法第一次实验即运行一次得到的路径数为5,覆盖率就是100%,随机法第一次得到的路径数为1,覆盖率就是1/5,即20%。
64.非集合进化方法和随机方法每次运行只能生成一条路径,给出的示例程序含有5条路径,为使得成功率的比较结果更具有说服力,对于成功率这一指标,集合进化方法每次实验只运行1次程序,其他两种方法运行5次程序。
65.表1 实验运行结果从表中可以看出集合进化的方法与非集合进化方法和随机方法相比在迭代次数和运行次数优势明显,这是由于集合进化方法按照提出的控制流图约减规则,约减掉多余的节点,这样就减少了路径生成的迭代次数并且只需一次运行便能生成全部路径,不需要为生成其他路径进行额外的运行迭代;对于方法运行次数来说,非集合进化的方法每次只能生成一条路径,并且生成的路径具有随机性,这就需要更多的去运行,进而使运行次数增加,而集合进化的方法只需要一次运行程序即可生成全部的路径。对于成功率来说,非集合进化的方法和随机法每次只能生成一条路径,且生成的路径随机性很大,生成的路径重复率高,这样便会大大拉低成功率。对于随机法,多次实验中未能够成功生成全部路径,因此
迭代次数和方法运行次数没有数据。在方法的运行时间方面,集合进化方法运行时间较长,这是因为本方法的遗传操作是以集合的形式进行的,并且增加了集合进化特有的集合内部的交叉操作,相对于非集合进化的单条染色体进行交叉和变异操作,会消耗较多时间。
66.可见,上述示例中,生成的路径中包含了完整的每一条路径,能够覆盖全部流程图的边,路径完整;并且只需要运行一次程序即可获得全部路径,不再需要针对某条路径多次执行程序。
67.实施例2基于实施例1,本实施例提供基于集合进化的软件测试路径生成系统,包括采集装置、通信网络和测试终端,采集装置和测试终端通过通信网络建立连接;采集装置:被配置为用于获取待测试软件的控制流图;也可以采用静态分析源代码,手动绘制代码的控制流图通过软件代码采集装置输入至测试终端,软件代码采集装置可以具体为电脑。
68.测试终端:被配置为用于实施例1所述的基于集合进化的软件测试路径生成方法的步骤。
69.以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
70.上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献