CN109918100A - 一种面向版本缺陷的基于修复模式的修复推荐方法 - Google Patents

一种面向版本缺陷的基于修复模式的修复推荐方法 Download PDF

Info

Publication number
CN109918100A
CN109918100A CN201910071219.3A CN201910071219A CN109918100A CN 109918100 A CN109918100 A CN 109918100A CN 201910071219 A CN201910071219 A CN 201910071219A CN 109918100 A CN109918100 A CN 109918100A
Authority
CN
China
Prior art keywords
reparation
variable
mode
version
bug
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
CN201910071219.3A
Other languages
English (en)
Other versions
CN109918100B (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.)
Yangzhou University
Original Assignee
Yangzhou University
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 Yangzhou University filed Critical Yangzhou University
Priority to CN201910071219.3A priority Critical patent/CN109918100B/zh
Publication of CN109918100A publication Critical patent/CN109918100A/zh
Application granted granted Critical
Publication of CN109918100B publication Critical patent/CN109918100B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种面向版本缺陷的基于修复模式的修复推荐方法,包括步骤:首先提取与版本相关的已修复的bug,分析修复前后的代码片段,确定bug的错误类型和修复模式;其次确定待推荐修复的版本bug的错误类型;之后计算待推荐修复的版本bug报告与历史bug报告的相似度,提取历史bug报告的修复模式;然后根据相似度对修复模式进行排序,并提取修复模式所需的变量;之后结合源文件,分别从候选代码、待推荐修复的版本bug报告、历史修复记录中提取变量;最后通过匹配提取的变量与修复模式所需的变量,推荐修复模式推荐给开发人员。本发明的方法通过推荐修复模式,减少了修复的时间和成本,提高了开发人员缺陷修复的效率,且不受程序语言约束,普适性强。

Description

一种面向版本缺陷的基于修复模式的修复推荐方法
技术领域
本发明属于软件缺陷修复领域,特别是一种面向版本缺陷的基于修复模式的修复推荐方法。
背景技术
随着科技的逐步发展,手机,电脑成为人们生活中必不可少的通讯与工作工具。目前,人们的需求不断地增多,存在于手机、电脑上的软件的规模也变得越来越大,软件的产品结构也随之变得越来越复杂,软件故障也变得越来越普遍和复杂。作为计算机的灵魂,高可靠和复杂的系统依赖于软件的可靠性,软件故障难以修复,软件的可靠性就得不到保证。一个未能及时修复的软件故障可能导致整个系统的失效、瘫痪,甚至导致灾难性后果。比如,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.Go to platform version facet
3.Click"6.0.6000"-->This works
4.Go back to facet
5.Click"6.0.6001Service Pack 1"-->No results
Also I would like to be able to get data like"all crashes on Vista"i.e.
"platform version begins with 6.0"but there is no operator for that.”
将其预处理后的变量包括: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.Stri ngField,出现的次数分别是1、1、2,根据出现的次数对这3个变量排序,分别是:form_fields.StringField、platform、version。根据Bug1005723在步骤4中提取的修复模式为修改方法名,因此结合表1,推荐相匹配的form_fields.StringFie ld对应的修复模式version=method2()给开发人员。
本发明通过分析版本bug的错误类型和修复模式,将bug的错误类型和修复模式进行对应,减少修复的时间和成本,且进一步向开发人员推荐修复模式,提高了开发人员缺陷修复的效率。此外,本发明的方法在实际应用中不受程序语言约束,可以应用于各种编程语言的软件中,普适性强。

Claims (10)

1.一种面向版本缺陷的基于修复模式的修复推荐方法,其特征在于,包括以下步骤:
步骤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中提取的每个修复模式所需的变量进行匹配,将变量相匹配的修复模式推荐给开发人员。
2.根据权利要求1所述的面向版本缺陷的基于修复模式的修复推荐方法,其特征在于,步骤1所述从bug存储库中提取与版本相关的已修复的bug,具体为:在bug存储库中,以“version”作为查询关键字、将状态限定为“fixed”进行搜索,提取与版本相关的已修复的bug。
3.根据权利要求2所述的面向版本缺陷的基于修复模式的修复推荐方法,其特征在于,步骤1所述错误类型包括版本号出错、参数出错、方法名出错、路径出错、版本类型出错、正则表达式出错;修复模式包括修改版本号、修改参数、修改方法名、修改路径、修改版本类型、修改正则表达式。
4.根据权利要求3所述的面向版本缺陷的基于修复模式的修复推荐方法,其特征在于,步骤2所述候选代码的变量信息包括版本号、方法名、参数、路径。
5.根据权利要求4所述的面向版本缺陷的基于修复模式的修复推荐方法,其特征在于,步骤4所述错误类型与修复模式的对应关系如下表1所示:
表1 错误类型和修复模式的对应关系
6.根据权利要求5所述的面向版本缺陷的基于修复模式的修复推荐方法,其特征在于,步骤4中所述修复模式所需的变量具体为:修改版本号、修改参数、修改方法名、修改路径、修改版本类型、修改正则表达式分别所需的变量为版本号、参数、方法名、路径、版本类型、正则表达式。
7.根据权利要求1所述的面向版本缺陷的基于修复模式的修复推荐方法,其特征在于,步骤3所述求取待推荐修复的版本bug报告与历史每个bug报告的相似度具体采用余弦相似度算法求取相似度。
8.根据权利要求1所述的面向版本缺陷的基于修复模式的修复推荐方法,其特征在于,步骤5中,
所述预处理具体为:采用斯坦福分词工具对候选代码进行预处理;
所述同等类型的变量包括:同义词、同根词、结构相同的词。
9.根据权利要求1所述的面向版本缺陷的基于修复模式的修复推荐方法,其特征在于,步骤6所述在源文件中进行搜索,判断该变量是否为源文件中的变量,具体为:若在源文件中搜索到相同的变量,则该变量为源文件中的变量;若搜索不到相同的变量,则该变量不是源文件中的变量。
10.根据权利要求1所述的面向版本缺陷的基于修复模式的修复推荐方法,其特征在于,步骤8所述针对每个变量,分别与步骤4中提取的每个修复模式所需的变量进行匹配,将变量相匹配的修复模式推荐给开发人员,具体为:
针对每个变量,采用余弦相似度算法求取该变量与步骤4中提取的每个修复模式所需变量的相似度,将最大的相似度对应的修复模式即变量相匹配的修复模式作为该变量的修复模式,并推荐给开发人员。
CN201910071219.3A 2019-01-25 2019-01-25 一种面向版本缺陷的基于修复模式的修复推荐方法 Active CN109918100B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910071219.3A CN109918100B (zh) 2019-01-25 2019-01-25 一种面向版本缺陷的基于修复模式的修复推荐方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910071219.3A CN109918100B (zh) 2019-01-25 2019-01-25 一种面向版本缺陷的基于修复模式的修复推荐方法

Publications (2)

Publication Number Publication Date
CN109918100A true CN109918100A (zh) 2019-06-21
CN109918100B CN109918100B (zh) 2022-05-17

Family

ID=66960837

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910071219.3A Active CN109918100B (zh) 2019-01-25 2019-01-25 一种面向版本缺陷的基于修复模式的修复推荐方法

Country Status (1)

Country Link
CN (1) CN109918100B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112199114A (zh) * 2020-07-16 2021-01-08 杭州电子科技大学 一种基于自注意力机制的软件缺陷报告分配方法
CN113703824A (zh) * 2021-08-26 2021-11-26 上海德拓信息技术股份有限公司 一种多项目软件质量修复方法与系统
US11461219B2 (en) 2021-02-02 2022-10-04 Red Hat, Inc. Prioritizing software bug mitigation for software on multiple systems

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160088737A (ko) * 2015-01-16 2016-07-26 서울시립대학교 산학협력단 토픽 모델과 다중 특성 기반의 버그 정정 개발자 추천 및 버그 심각성 예측 시스템 및 방법
CN107643905A (zh) * 2017-09-13 2018-01-30 扬州大学 一种面向软件版本一致性缺陷的自动修复方法
CN107729258A (zh) * 2017-11-30 2018-02-23 扬州大学 一种面向软件版本问题的程序故障定位方法
CN109165155A (zh) * 2018-06-20 2019-01-08 扬州大学 一种基于聚类分析的软件缺陷修复模板提取方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160088737A (ko) * 2015-01-16 2016-07-26 서울시립대학교 산학협력단 토픽 모델과 다중 특성 기반의 버그 정정 개발자 추천 및 버그 심각성 예측 시스템 및 방법
CN107643905A (zh) * 2017-09-13 2018-01-30 扬州大学 一种面向软件版本一致性缺陷的自动修复方法
CN107729258A (zh) * 2017-11-30 2018-02-23 扬州大学 一种面向软件版本问题的程序故障定位方法
CN109165155A (zh) * 2018-06-20 2019-01-08 扬州大学 一种基于聚类分析的软件缺陷修复模板提取方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
孙小兵等: "面向软件安全性缺陷的开发者推荐方法", 《软件学报》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112199114A (zh) * 2020-07-16 2021-01-08 杭州电子科技大学 一种基于自注意力机制的软件缺陷报告分配方法
CN112199114B (zh) * 2020-07-16 2022-05-03 杭州电子科技大学 一种基于自注意力机制的软件缺陷报告分配方法
US11461219B2 (en) 2021-02-02 2022-10-04 Red Hat, Inc. Prioritizing software bug mitigation for software on multiple systems
CN113703824A (zh) * 2021-08-26 2021-11-26 上海德拓信息技术股份有限公司 一种多项目软件质量修复方法与系统

Also Published As

Publication number Publication date
CN109918100B (zh) 2022-05-17

Similar Documents

Publication Publication Date Title
Koyuncu et al. Fixminer: Mining relevant fix patterns for automated program repair
Youm et al. Improved bug localization based on code change histories and bug reports
US10430180B2 (en) System and method for resilient automation upgrade
Jiang et al. What causes my test alarm? Automatic cause analysis for test alarms in system and integration testing
US5898872A (en) Software reconfiguration engine
US9195952B2 (en) Systems and methods for contextual mapping utilized in business process controls
US9189377B1 (en) Automation testing using descriptive maps
CN102804147A (zh) 执行abap源代码的代码检查的代码检查执行系统
CN109918100A (zh) 一种面向版本缺陷的基于修复模式的修复推荐方法
US8898635B2 (en) System and method for automatic impact variable analysis and field expansion in mainframe systems
CN106537332A (zh) 软件分析系统和方法
US20130041900A1 (en) Script Reuse and Duplicate Detection
CN111563051B (zh) 基于爬虫的数据核验方法、装置、计算机设备及存储介质
CN102880780A (zh) 产生用于分析数据的直观背景的系统和方法
CN107729258B (zh) 一种面向软件版本问题的程序故障定位方法
US9043651B2 (en) Systematic failure remediation
Nyamawe et al. Automated recommendation of software refactorings based on feature requests
CN110442527B (zh) 面向bug报告的自动化修复方法
He et al. A multi-metric ranking approach for library migration recommendations
CN103955429B (zh) 确定回归测试范围的方法及装置
CN111460401A (zh) 结合软件制品过程信息和文本相似度的制品自动追踪方法
Zahid et al. Evolution in software architecture recovery techniques—A survey
Ostrand et al. A Tool for Mining Defect-Tracking Systems to Predict Fault-Prone Files.
CN101894026A (zh) 具有合并的检验信息的数据类型
CN117112400A (zh) 测试用例自动生成平台

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant