一种基于多候选程序的软件缺陷修复方法及装置制造方法及图纸

技术编号:28148154 阅读:24 留言:0更新日期:2021-04-21 19:36
本发明专利技术公开了一种基于多候选程序的软件缺陷修复方法及装置,方法具体包括:S1:在待修复程序中定位缺陷单元,将缺陷单元存放至缺陷集合中,对缺陷单元生成对应的补丁单元,同时将补丁单元存放至补丁集合;S2:将补丁集合添加到待修复程序中,生成对应的修复程序集合;S3:构造适应度函数,利用适应度函数对修复程序集合进行评估得到对应的适应度值,将适应度值进行排序,选取其中排名前k的修复程序作为候选修复程序集合;S4:对候选修复程序集合进行多数决机制投票,输出多数决投票得分最高的候选修复程序运行结果,并将候选修复程序和多数决机制封装成一个整体程序;本发明专利技术通过并行运行多个版本的程序提高容错性。运行多个版本的程序提高容错性。运行多个版本的程序提高容错性。

【技术实现步骤摘要】
一种基于多候选程序的软件缺陷修复方法及装置


[0001]本专利技术涉及软件工程
,更具体的说是涉及一种基于多候选程序的软件缺陷修复方法及装置。

技术介绍

[0002]目前,随着科技的快速发展,人们对软件的要求逐渐提高,软件的功能越来越丰富,规模越来越庞大,但由于当前开发人员的自身局限性或软件本身因素,软件中表现出来的错误也越来越多,而且软件缺陷种类也更加繁杂,由软件缺陷造成的经济损失也越来越大。
[0003]但是,在当前的软件开发工作中,大部分软件缺陷都是通过开发人员手动修复的,具体首先由程序员通过反馈的错误报告来查找到程序中发生错误的代码,并尝试复现故障过程,分析代码产生缺陷的原因。通常程序员会采用断点测试的方法,通过执行程序并观察程序中变量的数据是否符合预期情况,通过发现差异来定位到错误代码所在的范围。然后,程序员根据错误报告和预期的正确结果对代码进行修复,从而得到正确运行的程序。但是,通常这个过程需要程序员反复尝试调试、编译、修改,并且需要通过回归测试检测修复版程序中是否有新增错误。以上步骤十分繁琐,导致缺陷修复的成本很高。数据表明,45%的现代软件开发成本消耗在定位和修复程序错误过程中,因此自动程序修复(automatic program repair)方法受到了学术界和工业界的广泛关注。
[0004]自动程序修复技术的目标是自动修复程序中的缺陷或漏洞,根据检测到的程序错误,自动生成补丁(patch)并添加到修复版的程序当中。随着软件分析和代码缺陷定位等技术的不断发展,自动程序修复技术也获得了很大的突破和进展,有效性和实用性有了大幅的提高。在近十年以来,自动程序修复领域也产生了很多经典方法,例如基于遗传编程的方法GenProg、基于符号分析方法SemFix、基于深度学习的方法DeepFix、基于模板的方法TBar、基于静态分析的方法MemFix等。这些方法通过不同方式完成了程序修复,但是均无法保证对所有缺陷进行修复,即使在所有现有测试数据下能正常工作,也无法保证修复版程序在其他输入运行时也能正常工作,而且更糟的情况是可能会引入新的缺陷。
[0005]因此,如何提供一种能够解决上述问题的软件缺陷修复方法及装置是本领域技术人员亟需解决的问题。

技术实现思路

[0006]有鉴于此,本专利技术提供了一种基于多候选程序的软件缺陷修复方法及装置,既能根据多个候选程序的运行结果进行多数决投票来提高运行结果的成功率,还能通过并行运行多个版本的程序提高容错性。
[0007]为了实现上述目的,本专利技术采用如下技术方案:
[0008]一种基于多候选程序的软件缺陷修复方法,包括:
[0009]S1:在待修复程序中定位缺陷单元,将所述缺陷单元存放至缺陷集合中,对所述缺
陷单元生成对应的补丁单元,同时将所述补丁单元存放至补丁集合;
[0010]S2:将所述补丁集合添加到待修复程序中,生成对应的修复程序集合;
[0011]S3:构造适应度函数,利用所述适应度函数对所述修复程序集合进行评估得到对应的适应度值,将所述适应度值进行排序,选取其中排名前k的修复程序作为候选修复程序集合;
[0012]S4:对所述候选修复程序集合进行多数决机制投票,输出多数决投票得分最高的所述候选修复程序运行结果,并将所述候选修复程序和多数决机制封装成一个整体程序。
[0013]优选的,所述步骤S3还包括:
[0014]S31:构造适应度函数,其中适应度函数的表达式为:
[0015][0016]式中,s
j
表示为第j个修复版程序通过的测试程序数量,|T|代表测试程序集T中的元素个数;
[0017]S32:利用适应度函数对所述修复程序进行适应度值计算,得到对应的适应度值集合。
[0018]优选的,所述步骤S4还包括:
[0019]S41:引入测试用例集,对所述测试用例集中每个测试程序进行权重赋值,对应的表达式为:
[0020][0021]式中,failCount(t
n
)表示为未通过测试程序t
n
的候选版修复程序数,k为候选版修复程序的个数;
[0022]S42:将候选修复程序集合输入多数决机制中,生成对应的执行结果集合,同时对候选修复程序集合中的每个元素进行投票权赋值,对应的表达式为:
[0023][0024]式中,weight(t
n
)为第n个测试程序的权重,r
nj

为执行结果;
[0025]S43:在多数决机制中将候选修复程序集合及测试用例集并行执行同一输入,并将输出结果存储在输出结果集合;
[0026]S44:对所述输出结果集合进行多数决投票,将得到分数最高的运行结果作为程序的输出。
[0027]优选的,所述步骤S1具体包括:
[0028]S11:对所述待修复程序定位缺陷单元,获取所述缺陷单元的怀疑度,并按照怀疑度从大到小的顺序对所述缺陷单元进行排序,同时存储至缺陷集合中;
[0029]S12:依据补丁生成规则对所述缺陷集合中的前θ个缺陷单元生成对应的补丁单元,同时将补丁单元存储到补丁集合中。
[0030]优选的,所述步骤S2具体包括:
[0031]S21:对所述补丁单元逐个生成对应的修复程序,并将所有修复程序存储到所述修复程序集合中;
[0032]S22:引入所述测试用例集对所有修复程序进行测试,将修复程序执行结果存储到结果集合中。
[0033]进一步,一种基于多候选程序的软件缺陷修复装置,包括:
[0034]获取模块,用于依次获取待修复程序的缺陷单元及对应的补丁单元;
[0035]添加模块,用于将所述补丁单元添加到待修复程序中,生成对应的修复程序集合;
[0036]处理模块,用于对修复程序集合进行适应度函数处理及多数决机制投票
[0037]处理,得到候选修复程序集合;
[0038]输出模块,用于输出多数决机制投票分数最高的运行结果。
[0039]经由上述的技术方案可知,与现有技术相比,本专利技术公开提供了一种基于多候选程序的软件缺陷修复方法及装置,具有如下有益效果:
[0040](1)能有效的根据多个候选版修复程序的运行结果进行多数决投票来提高运行结果的可靠性,还能针对缺陷下产生的不同修复版程序同时加入候选程序进行筛选,进而提高了修复版程序的多样性;
[0041](2)多数决机制,通过该机制对并行运算产生的结果进行投票,可以有效的提高软件可靠性和容错性,进而提高工具的修复成功率;
[0042](3)可以有效减少人工修复缺陷的时间,或对修复工作起到辅助作用,以降低开发和维护成本。
附图说明
[0043]为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的实施例,对于本领域普通本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于多候选程序的软件缺陷修复方法,其特征在于,包括:S1:在待修复程序中定位缺陷单元,将所述缺陷单元存放至缺陷集合中,对所述缺陷单元生成对应的补丁单元,同时将所述补丁单元存放至补丁集合;S2:将所述补丁集合添加到待修复程序中,生成对应的修复程序集合;S3:构造适应度函数,利用所述适应度函数对所述修复程序集合进行评估得到对应的适应度值,将所述适应度值进行排序,选取其中排名前k的修复程序作为候选修复程序集合;S4:对所述候选修复程序集合进行多数决机制投票,输出多数决投票得分最高的所述候选修复程序运行结果,并将所述候选修复程序和多数决机制封装成一个整体程序。2.根据权利要求1所述的一种基于多候选程序的软件缺陷修复方法,其特征在于,所述步骤S3还包括:S31:构造适应度函数,其中适应度函数的表达式为:式中,s
j
表示为第j个修复版程序通过的测试程序数量,|T|代表测试程序集T中的元素个数;S32:利用适应度函数对所述修复程序进行适应度值计算,得到对应的适应度值集合。3.根据权利要求2所述的一种基于多候选程序的软件缺陷修复方法,其特征在于,所述步骤S4还包括:S41:引入测试用例集,对所述测试用例集中每个测试程序进行权重赋值,对应的表达式为:式中,failCount(t
n
)表示为未通过测试程序t
n
的候选版修复程序数,k为候选版修复程序的个数;S42:将候选修复程序集合输入多数决机制中,生成对应的执行结果集合,同时对候选修复程序集合中的每个元素进行投票权赋值,对应的表达式为...

【专利技术属性】
技术研发人员:王浩仁崔展齐郑丽伟刘建宾刘秀磊
申请(专利权)人:北京信息科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1