一种面向版本缺陷的基于修复模式的修复推荐方法与流程

文档序号:17988154发布日期:2019-06-22 00:34阅读:605来源:国知局
一种面向版本缺陷的基于修复模式的修复推荐方法与流程

本发明属于软件缺陷修复领域,特别是一种面向版本缺陷的基于修复模式的修复推荐方法。



背景技术:

随着科技的逐步发展,手机,电脑成为人们生活中必不可少的通讯与工作工具。目前,人们的需求不断地增多,存在于手机、电脑上的软件的规模也变得越来越大,软件的产品结构也随之变得越来越复杂,软件故障也变得越来越普遍和复杂。作为计算机的灵魂,高可靠和复杂的系统依赖于软件的可靠性,软件故障难以修复,软件的可靠性就得不到保证。一个未能及时修复的软件故障可能导致整个系统的失效、瘫痪,甚至导致灾难性后果。比如,2005年4月软件失灵、继而导航失误,导致耗资1.1亿美元的nasa自主交会任务dart实验失败。美国国家标准与技术研究所的一项研究表明“软件故障如此普遍并且危害巨大,每年损失美国经济的595亿美元或国民生产总值的0.6%”。最近的一项研究表明,软件调试的全球成本是每年3,120亿美元,软件开发人员将50%的时间花在修复上。软件版本bug是在软件不断的更新换代中产生的,目前很多软件不断开发新版本,很多服务器都是在以前的接口逻辑上进行修改,版本升级后会产生不兼容旧版本的问题,以及很多不同的应用需要用到不同的软件版本,比如空间数据处理和算法应用需要用到不同的python版本:python2和python3,此时多个版本共存时会产生不兼容的问题。版本bug的直接影响是软件不能及时的升级和更新,软件不能在所有设备上运行,导致用户无法体验新的功能,且体验效果差等。近年来,自动程序修复已经获得了先进性,因为它可以通过自动建议针对给定缺陷的补丁来减少手工调试工作。事实上,最先进的程序修复系统已经被证明能够解决现实软件中的缺陷。

自动程序修复的主要目标是修复有bug的软件,生成的修复通常是对展示缺陷的软件系统进行增量修改,以便以自动方式修复错误,并减少手工修复bug所需的人工劳动。然而,自动生成的补丁的低质量仍然是软件开发人员在实践中采用该技术的一个巨大障碍。自动生成的补丁质量低的主要原因是缺少预期行为的规范。大多数程序修复系统将测试作为正确标准,但是测试是一个不完整的规范,生成的补丁通常与开发人员的意图不符。为了增加自动生成补丁的质量,研究者提出补丁优先级,反模式等技术。虽然这些技术增加了正确补丁的概率,但是,这些技术没有针对版本缺陷进行修复,并且版本缺陷有自己的错误类型的同时也有特定的修复模式。对于版本缺陷,它们并不提供任何正确性保证。



技术实现要素:

本发明所要解决的技术问题在于提供一种针对软件开发过程中的与版本相关的bug进行修复推荐的方法,从而减少版本缺陷修复所需的时间和精力。

实现本发明目的的技术解决方案为:一种面向版本缺陷的基于修复模式的修复推荐方法,包括以下步骤:

步骤1、从bug存储库中提取与版本相关的已修复的bug,分析对比bug修复前后的代码片段,确定bug的错误类型和修复模式;

步骤2、针对待推荐修复的版本bug对应的候选代码,提取所述候选代码的变量信息,并将变量信息与错误类型进行匹配,确定待推荐修复的版本bug的错误类型;

步骤3、求取待推荐修复的版本bug报告与历史每个bug报告的相似度,之后对相似度进行降序排列,并依次提取前n个相似度对应的历史bug对应的修复模式;

步骤4、根据错误类型与修复模式的对应关系,将步骤3提取的修复模式中属于同一错误类型的若干修复模式根据其对应的相似度进行降序排列,并提取所述若干修复模式各自所需的变量;

步骤5、将所述候选代码预处理为独立的变量,并在源文件中进行搜索,提取候选代码在源文件中同等类型的变量;

步骤6、将待推荐修复的版本bug报告预处理为变量,并在源文件中进行搜索,判断该变量是否为源文件中的变量,若是,则提取该变量;

步骤7、从历史修复记录中修改过的代码中提取修改过的变量;

步骤8、根据变量出现频率的高低对步骤5、6、7中提取的变量进行降序排列,筛选出前m个变量;针对每个变量,分别与步骤4中提取的每个修复模式所需的变量进行匹配,将变量相匹配的修复模式推荐给开发人员。

本发明与现有技术相比,其显著优点为:1)本发明中通过分析版本bug的错误类型和修复模式,将bug的错误类型和修复模式进行对应,减少了修复的时间和成本;2)本发明能够向开发人员推荐修复模式,提高了开发人员缺陷修复的效率;3)本发明能够解决大量的关于版本缺陷的软件问题,扩展了缺陷自动修复的范围;4)本发明的方法在实际应用中不受程序语言约束,可以应用于各种编程语言的软件中,普适性强。

下面结合附图对本发明作进一步详细描述。

附图说明

图1为本发明面向版本缺陷的基于修复模式的修复推荐方法的流程图。

图2为本发明中确定错误类型和修复模式的流程图。

具体实施方式

结合图1,本发明一种面向版本缺陷的基于修复模式的修复推荐方法,包括以下步骤:

步骤1、结合图2,从bug存储库中提取与版本相关的已修复的bug,分析对比bug修复前后的代码片段,确定bug的错误类型和修复模式;

步骤2、针对待推荐修复的版本bug对应的候选代码,提取所述候选代码的变量信息,并将变量信息与错误类型进行匹配,确定待推荐修复的版本bug的错误类型;

步骤3、求取待推荐修复的版本bug报告与历史每个bug报告的相似度,之后对相似度进行降序排列,并依次提取前n个相似度对应的历史bug对应的修复模式;

步骤4、根据错误类型与修复模式的对应关系,将步骤3提取的修复模式中属于同一错误类型的若干修复模式根据其对应的相似度进行降序排列,并提取所述若干修复模式各自所需的变量;

步骤5、将所述候选代码预处理为独立的变量,并在源文件中进行搜索,提取候选代码在源文件中同等类型的变量;

步骤6、将待推荐修复的版本bug报告预处理为变量,并在源文件中进行搜索,判断该变量是否为源文件中的变量,若是,则提取该变量;

步骤7、从历史修复记录中修改过的代码中提取修改过的变量;

步骤8、根据变量出现频率的高低对步骤5、6、7中提取的变量进行降序排列,筛选出前m个变量;针对每个变量,分别与步骤4中提取的每个修复模式所需的变量进行匹配,将变量相匹配的修复模式推荐给开发人员。

进一步地,步骤1中从bug存储库中提取与版本相关的已修复的bug,具体为:在bug存储库中,以“version”作为查询关键字、将状态限定为“fixed”进行搜索,提取与版本相关的已修复的bug。

优选地,步骤1中错误类型包括版本号出错、参数出错、方法名出错、路径出错、版本类型出错、正则表达式出错;修复模式包括修改版本号、修改参数、修改方法名、修改路径、修改版本类型、修改正则表达式。

优选地,步骤2中候选代码的变量信息包括版本号、方法名、参数、路径。

优选地,步骤4中错误类型与修复模式的对应关系如下表1所示:

表1错误类型和修复模式的对应关系

优选地,步骤4中修复模式所需的变量具体为:修改版本号、修改参数、修改方法名、修改路径、修改版本类型、修改正则表达式分别所需的变量为版本号、参数、方法名、路径、版本类型、正则表达式。

优选地,步骤3中求取待推荐修复的版本bug报告与历史每个bug报告的相似度具体采用余弦相似度算法求取相似度。

优选地,步骤5中预处理具体为:采用斯坦福分词工具对候选代码进行预处理。

优选地,步骤5中同等类型的变量包括:同义词、同根词、结构相同的词。

优选地,步骤6中在源文件中进行搜索,判断该变量是否为源文件中的变量,具体为:若在源文件中搜索到相同的变量,则该变量为源文件中的变量;若搜索不到相同的变量,则该变量不是源文件中的变量。

优选地,步骤8中针对每个变量,分别与步骤4中提取的每个修复模式所需的变量进行匹配,将变量相匹配的修复模式推荐给开发人员,具体为:

针对每个变量,采用余弦相似度算法求取该变量与步骤4中提取的每个修复模式所需变量的相似度,将最大的相似度对应的修复模式即变量相匹配的修复模式作为该变量的修复模式,并推荐给开发人员。

下面结合实施例对本发明作进一步详细的说明。

实施例

一种面向版本缺陷的基于修复模式的修复推荐方法,包括如下步骤:

步骤1、在bug存储库中,以“version”作为查询关键字、将状态限定为“fixed”进行搜索,提取与版本相关的已修复的bug,分析对比bug修复前后的代码片段,确定bug的错误类型和修复模式。其中,错误类型包括版本号出错、参数出错、方法名出错、路径出错、版本类型出错、正则表达式出错;修复模式包括修改版本号、修改参数、修改方法名、修改路径、修改版本类型、修改正则表达式。

步骤2、针对待推荐修复的版本bug对应的候选代码,提取所述候选代码的变量信息,并将变量信息与错误类型进行匹配,确定待推荐修复的版本bug的错误类型。

本实施例中,bug1005723的候选代码为:

“platform_version=form_fields.multiplevaluefield(requires=false)”,提取的变量信息包括platform_version,form_fields.multiplevaluefield(),requires,该bug的错误类型为方法名出错。

步骤3、求取待推荐修复的版本bug报告与历史每个bug报告的相似度,之后对相似度进行降序排列,并依次提取前n个相似度对应的bug对应的修复模式。本实施例中,bug1005723提取前5个相似度对应的bug对应的修复模式包括修改方法名、修改参数。

步骤4、根据错误类型与修复模式的对应关系,将步骤3提取的修复模式中属于同一错误类型的若干修复模式根据其对应的相似度进行降序排列,并提取所述若干修复模式各自所需的变量。本实施例中属于方法名错误类型的修复模式是:修改方法名,修改方法名所需的变量为方法名。

步骤5、将候选代码预处理为独立的变量,并在源文件中进行搜索,提取候选代码在源文件中同等类型的变量。本实施例中,将候选代码预处理为platform_version,form_fields.multiplevaluefield,require,false,在源文件中提取到与它同类型的变量form_fields.stringfield。

步骤6、将待推荐修复的版本bug报告预处理为变量,并在源文件中进行搜索,判断该变量是否为源文件中的变量。本实施例中,bug1005723的报告描述是为:

“str1.

https://crash-stats.mozilla.com/search/?signature=~_fnncdestroy&_facet

s=platform_version&_columns=date&_columns=signature&_columns=prod

uct&_columns=version&_columns=build_id&_columns=platform

2.gotoplatformversionfacet

3.click"6.0.6000"-->thisworks

4.gobacktofacet

5.click"6.0.6001servicepack1"-->noresults

alsoiwouldliketobeabletogetdatalike"allcrashesonvista"i.e.

"platformversionbeginswith6.0"butthereisnooperatorforthat.”

将其预处理后的变量包括:platform,version,facet,click,6.0.6000,6.0.6001,service,pack,crash,vista,6.0,经搜索,其中platform、version均为源文件中的变量。

步骤7、从历史修复记录中修改过的代码中提取修改过的变量。本实施例中,bug1005723的历史修复记录中修改过的代码包含方法名“form_fields.stringfield”,提取的变量为form_fields.stringfield。

步骤8、根据变量出现频率的高低对步骤5、6、7中提取的变量进行降序排列,筛选出前m个变量;针对每个变量,分别与步骤4中提取的每个修复模式所需的变量进行匹配,将变量相匹配的修复模式推荐给开发人员。本实施例中bug1005723在步骤5、6、7中提取的变量是platform、version、form_fields.stringfield,出现的次数分别是1、1、2,根据出现的次数对这3个变量排序,分别是:form_fields.stringfield、platform、version。根据bug1005723在步骤4中提取的修复模式为修改方法名,因此结合表1,推荐相匹配的form_fields.stringfield对应的修复模式version=method2()给开发人员。

本发明通过分析版本bug的错误类型和修复模式,将bug的错误类型和修复模式进行对应,减少修复的时间和成本,且进一步向开发人员推荐修复模式,提高了开发人员缺陷修复的效率。此外,本发明的方法在实际应用中不受程序语言约束,可以应用于各种编程语言的软件中,普适性强。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1