首页 / 专利库 / 软件 / 软件 / 一种基于遗传算法的软件修复方法

一种基于遗传算法软件修复方法

阅读:675发布:2023-02-23

专利汇可以提供一种基于遗传算法软件修复方法专利检索,专利查询,专利分析的服务。并且一种基于遗传 算法 的 软件 修复方法,其包括,A.将待修复程序表示为抽象语法树结构,并生成测试 用例 集,所述测试用例集中包含正测试用例和负测试用例,所述正测试用例为在程序中正确执行的测试用例,所述负测试用例为程序执行异常终止或者得出错误结果的测试用例;B.复制原始程序得到M个程序副本,对M个个体进行变异操作,设置程序进化的最大进化代数;C.确定适应度函数,将所述不变量作为计算适应度的不变量约束,对每个个体执行所有测试用例,计算通过的测试用例个数和不变量约束保持数目,通过计算得到每个个体的适应度值;D.遗传操作:对每一代种群中个体进行的遗传操作包括:变异、交叉和选择;E.终止条件判断。,下面是一种基于遗传算法软件修复方法专利的具体信息内容。

1.一种基于遗传算法软件修复方法,其特征在于:其包括以下步骤,
A.将待修复程序表示为抽象语法树结构,并生成测试用例集,所述测试用例集中包含正测试用例和负测试用例,所述正测试用例为在程序中正确执行的测试用例,所述负测试用例为程序执行异常终止或者得出错误结果的测试用例,并对原始程序执行正测试用例,通过不变量生成工具生成所述程序中的不变量,所述抽象语法树的每个状态节点对应一个序对表,s指节点的序号,ws指该节点对应的权值,且对抽象语法树中每个节点设置权值,其权值设置依据为:
若只有正测试用例访问到,权值ws=1.0;
若只有负测试用例访问到,权值ws=0.0;
若正、负测试用例都访问到,权值ws=vp/(vp+vn);
其中vp表示该节点被正测试用例访问到的次数,vn表示该节点被负测试用例访问到的次数;
B.复制原始程序得到M个程序副本,对M个个体进行变异操作,原始程序和所述M个程序副本作为遗传算法中的初始种群;设置程序进化的最大进化代数;
C.确定适应度函数,将所述不变量作为计算适应度的不变量约束,对每个个体执行所有测试用例,计算通过的测试用例个数和保持的不变量约束数,通过计算得到每个个体的适应度值;
D.遗传操作:
对每一代种群中个体进行的遗传操作包括:变异、交叉和选择;其包括,对种群中个体进行变异操作和交叉操作,然后根据步骤C的方法计算所述种群中个体的适应度,选择M个个体得到下一代种群;
E.终止条件判断:
根据新一代种群中M个个体的适应度值,若有个体的适应度值为1,即通过所有测试用例,且保持了全部的不变量约束,则达到成功修复,终止计算;
判断是否达到最大进化代数,若达到,终止计算;
否则,重复D-E步骤。
2.根据权利要求1所述的一种基于遗传算法的软件修复方法,其特征在于:所述抽象语法树的每一个节点对应程序中一个可执行的状态或控制流结构。
3.根据权利要求1所述的一种基于遗传算法的软件修复方法,其特征在于:程序在计算适应度时使用程序代码,执行程序计算通过的测试用例数和保持的不变量约束数。
4.根据权利要求1所述的一种基于遗传算法的软件修复方法,其特征在于:所述适应度函数由两部分组成:首先计算个体通过的测试用例个数占所有测试用例的比例,通过的测试用例越多适应度值越大;另外,计算个体不变量约束保持的个数,
适应度函数为:
其中,f(xi)表示个体xi的适应度;
T表示测试用例集,t指其中的测试用例;
(xi)Pass(t)表示个体xi通过测试用例t,|T|表示测试用例的个数;
cp表示原始个体在执行正测试用例时的不变量约束数;
ci表示个体xi在执行正测试用例时与cp一致的不变量约束数。
5.根据权利要求1所述的一种基于遗传算法的软件修复方法,其特征在于:所述变异包括作用在负测试用例访问到而正测试用例没有访问到的路径的节点上,根据变异概率对选取到的个体,对其权值最低的节点进行变异操作,变异操作包括对该节点的删除,插入新的节点或用新的节点与之交换,且所述新的节点取自个体中其它节点。
6.根据权利要求1所述的一种基于遗传算法的软件修复方法,其特征在于:所述交叉包括通过随机算法生成两个交叉点,交换两个交叉点之间的节点。
7.根据权利要求6所述的一种基于遗传算法的软件修复方法,其特征在于:所述交叉包括两交叉方法,所述两交叉方法包括每个个体都要与原始个体进行交叉,和每个个体任选一个其他个体进行交叉。
8.根据权利要求1所述的一种基于遗传算法的软件修复方法,其特征在于:所述选择包括对交叉后的个体进行适应度计算,选择适应度值高的M个个体和原始个体进入下一代。

说明书全文

一种基于遗传算法软件修复方法

技术领域

[0001] 本发明属于软件工程领域,提出了一种可用于软件错误修复的自动修复方法。

背景技术

[0002] 近几年来,随着现代软件的不断发展,软件对于企业、个人越来越重要,软件的数量越来越多,功能越来越丰富,规模也越来越庞大。任何一个团队在软件的设计开发中都不可能把软件做得完美,甚至还会出现较多的故障,这就需要软件开发者对这些故障进行修复。现有的软件故障修复方法有:
[0003] 恢复方法:
[0004] 故障的恢复策略一般有两种:前向恢复和后向恢复。恢复块方法采用后向恢复策略。它提供具有相同功能的主块和几个后备块,一个块就是一个执行完整的程序段,主块首先投入运行,结束后进行验收测试,如果没有通过验收测试,系统经现场恢复后由一个后备块运行。这一过程可以重复到耗尽所有的后备块,或者某个程序故障行为超出了预料,从而导致不可恢复的后果。设计时应保证实现主块和后备块之间的独立性,避免相关错误的产生,使主块和后备块之间的共性错误降到最低限度。验收测试程序完成故障检测功能,它本身的故障对恢复块方法而言是共性,因此,必须保证它的正确性。
[0005] N版本程序设计方法:
[0006] N版本程序设计,是一种静态的故障屏蔽技术,采用前向恢复的策略,其设计思想是用N个具有相同功能的程序同时执行一项计算,结果通过多数表决来选择。其中N份程序必须由不同的人独立设计,使用不同的方法,不同的设计语言,不同的开发环境和工具来实现。目的是减少N版本软件在表决点上相关错误的概率。另外,由于各种不同版本并行执行,有时甚至在不同的计算机中执行,必须解决彼此之间的同步问题。
[0007] 前面几种方法都是基于冗余原则,这样大大增加了程序员的工作量,除此之外其他的方法就是通过人工调试,先输入测试信息逐步检测错误位置,再分析错误原因找出修复方案,这种手动的软件修复方法既耗时又费
[0008] 另一方面,随着遗传算法技术的进步与发展,遗传算法已广泛应用到很多领域。
[0009] 由于遗传算法的整体搜索策略和优化搜索方法在计算时不依赖于梯度信息或其它辅助知识,而只需要影响搜索方向的目标函数和相应的适应度函数,所以遗传算法提供了一种求解复杂系统问题的通用框架,它不依赖于问题的具体领域,对问题的种类有很强的鲁棒性,所以广泛应用于许多科学。目前,遗传算法的一些主要应用领域有:
[0010] 函数优化:函数优化是遗传算法的经典应用领域,也是遗传算法进行性能评价的常用案例,研究人员构造出了各种各样复杂形式的测试函数:连续函数和离散函数、凸函数和凹函数、低维函数和高维函数以及单峰函数和多峰函数等。对于一些非线性、多模型、多目标的函数优化问题,用其它优化方法较难求解,而遗传算法可以方便的得到较好的结果。
[0011] 组合优化:随着问题规模的增大,组合优化问题的搜索空间也急剧增大,有时在目前的计算上用枚举法很难求出最优解。对这类复杂的问题,人们已经意识到应把主要精力放在寻求满意解上,而遗传算法是寻求这种满意解的最佳工具之一。实践证明,遗传算法对于组合优化中的NP问题非常有效。例如遗传算法已经在求解旅行商问题、背包问题、装箱问题、图形划分问题等方面得到成功应用。
[0012] 此外,遗传算法也在生产调度问题、自动控制、机器人学、图象处理、人工生命、遗传编码和机器学习等方面获得了广泛的运用。

发明内容

[0013] 本发明的目的在于克服以上软件修复方法的缺陷,提供一种基于遗传算法的软件修复方法,将进化算法运用到软件故障修复中,以实现软件故障修复的自动化。
[0014] 实现本发明的技术方案是将遗传程序设计方法运用到软件故障修复中,并在计算适应度函数时添加不变量约束,从而在保持程序原有功能的前提下修复程序中存在的错误,一种基于遗传算法的软件修复方法,其包括以下步骤,
[0015] A.将待修复程序表示为抽象语法树结构,并生成测试用例集,所述测试用例集中包含正测试用例和负测试用例,所述正测试用例为在程序中正确执行的测试用例,所述负测试用例为程序执行异常终止或者得出错误结果的测试用例,并对原始程序执行正测试用例,通过不变量生成工具生成所述程序中的不变量;
[0016] B.复制原始程序得到M个程序副本,对M个个体进行变异操作,原始程序和所述M个程序副本作为遗传算法中的初始种群;设置程序进化的最大进化代数;
[0017] C.确定适应度函数,将所述不变量作为计算适应度的不变量约束,对每个个体执行所有测试用例,计算通过的测试用例个数和不变量约束保持数目,通过计算得到每个个体的适应度值;
[0018] D.遗传操作:
[0019] 对每一代种群中个体进行的遗传操作包括:变异、交叉和选择;其包括,对种群中个体进行变异操作和交叉操作,然后根据步骤C的方法计算所述种群中个体的适应度,选择M个个体得到下一代种群;
[0020] E.终止条件判断:
[0021] 根据新一代种群中M个个体的适应度值,若有个体的适应度值为1,即通过所有测试用例,且保持了全部的不变量约束,则达到成功修复,终止计算;
[0022] 判断是否达到最大进化代数,若达到,终止计算;
[0023] 否则,重复D-E步骤。
[0024] 在上述技术方案的基础上,所述抽象语法树的每一个节点对应程序中一个可执行的状态或控制流结构。
[0025] 在上述技术方案的基础上,所述抽象语法树的每个状态节点对应一个序对表,s指节点的序号,ws指该节点对应的权值,且对抽象语法树中每个节点设置权值,其权值设置依据为:
[0026] 若只有正测试用例访问到,权值ws=1.0;
[0027] 若只有负测试用例访问到,权值ws=0.0;
[0028] 若正、负测试用例都访问到,权值ws=vp/(vp+vn);
[0029] 其中vp表示该节点被正测试用例访问到的次数,vn表示该节点被负测试用例访问到的次数。
[0030] 在上述技术方案的基础上,程序在计算适应度时使用程序代码,执行程序计算通过的测试用例数和保持的不变量约束数。
[0031] 在上述技术方案的基础上,所述适应度函数由两部分组成:首先计算个体通过的测试用例个数占所有测试用例的比例,通过的测试用例越多适应度值越大;另外,计算个体不变量约束保持的个数,适应度函数为:
[0032]
[0033] 其中,f(xi)表示个体xi的适应度;
[0034] T表示测试用例集,t指其中的测试用例;
[0035] (xi)Pass(t)表示个体xi通过测试用例t,|T|表示测试用例的个数;
[0036] cp表示原始个体在执行正测试用例时的不变量约束数;
[0037] ci表示表示个体xi在执行正测试用例时与cp一致的不变量约束数。
[0038] 在上述技术方案的基础上,所述变异包括作用在负测试用例访问到而正测试用例没有访问到的路径的节点上,根据变异概率对选取到的个体,对其权值最低的节点进行变异操作,变异操作包括对该节点的删除,插入新的节点或用新的节点与之交换,且所述新的节点取自个体中其它节点。
[0039] 在上述技术方案的基础上,所述交叉包括通过随机算法生成两个交叉点,交换两个交叉点之间的节点。
[0040] 在上述技术方案的基础上,所述交叉包括两交叉方法,所述两交叉方法包括每个个体都要与原始个体进行交叉,和每个个体任选一个其他个体进行交叉。
[0041] 在上述技术方案的基础上,所述选择包括对交叉后的个体进行适应度计算,选择适应度值高的M个个体和原始个体进入下一代。
[0042] 由于程序的局部性原理,程序在某个位置的错误处理方式可以从程序其他位置节点组合得到。本发明利用了遗传算法的不确定性搜索和遗传算法的收敛性,将遗传算法用于软件故障的修复。这种方法大大减少了开发人员的在软件修复中的工作量,是一种有效的、自动化程度高的软件修复方法。附图说明
[0043] 图1是本发明提出的基于遗传算法的软件修复方法的流程图

具体实施方式

[0044] 参照图1本发明的实施步骤如下:
[0045] (1)程序表示:将程序表示为抽象语法树结构,其中所述抽象语法树中每个节点为一句可执行语句或一段控制流结构。进化操作被定位在错误测试用例执行路径的节点上。
[0046] 选取一组测试用例集T,使其尽量能测试程序的所有功能。测试用例集中包含正测试用例和负测试用例。所述正测试用例为在程序中正确执行的测试用例,所述负测试用例为程序执行异常终止或者得出错误结果的测试用例。
[0047] 通过不变量生成工具,对程序执行正测试用例,生成程序中的不变量,将生成的不变量作为不变量约束在计算适应度值时使用。
[0048] (2)初始化:设置进化代数计数器t=0,最大进化代数MAX,复制原始程序得到M个程序副本,对M个个体进行变异操作,原始程序和所述M个副本作为初始种群。所述变异操作包括对节点的删除、添加或交换。
[0049] (3)适应度计算:确定适应度函数,适应度函数的优劣决定了进化结果的好坏。所述适应度函数由两部分组成:首先计算个体通过的测试用例个数;然后,计算个体不变量约束保持的个数。
[0050] 适应度函数为:
[0051]
[0052] 其中,f(xi)表示个体xi的适应度;
[0053] T表示测试用例集,t指其中的测试用例;
[0054] (xi)Pass(t)表示个体xi通过测试用例t,|T|表示测试用例的个数;
[0055] cp表示原始个体在执行正测试用例时的不变量约束数;
[0056] ci表示表示个体xi在执行正测试用例时与cp一致的不变量约束数。
[0057] (4)变异:全局变异概率为pm,根据变异概率对选取到的个体中权值较低的节点进行变异操作,随机选择对其进行删除、添加新的节点或选择对应的节点与其交换。所述新的节点取自抽象语法树的其它节点。
[0058] (5)交叉:交叉概率为1.0,在每代中,每个生存的个体都要进行交叉操作,采用双点交叉,即对两个交叉点之间的节点进行交换,所述交叉点的选择采用随机生成。交叉操作采用两种不同的形式:
[0059] 每个个体总是先与原始个体进行交叉;
[0060] 每个个体任选一个其他个体与其进行交叉。
[0061] (6)选择:根据(3)中所述方法计算交叉后得到的个体的适应度值,选择适应度值较高的M个个体和原始个体,得到下一代种群;
[0062] (7)条件判断:根据新一代种群中M个个体的适应度值,首先判断是否有个体的适应度值为1,若有,即通过所有测试用例,且保持了全部的不变量约束,则达到成功修复,终止计算;否则,判断是否达到最大进化代数,若达到,终止计算,此时得到了完成部分修复的程序;否则,重复步骤(4)到(7)。
[0063] 对于本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及变形,而所有的这些改变以及变形都应该属于本发明权利要求的保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈