CN112699018B - 基于软件缺陷关联分析的软件缺陷定位方法 - Google Patents

基于软件缺陷关联分析的软件缺陷定位方法 Download PDF

Info

Publication number
CN112699018B
CN112699018B CN202011150127.3A CN202011150127A CN112699018B CN 112699018 B CN112699018 B CN 112699018B CN 202011150127 A CN202011150127 A CN 202011150127A CN 112699018 B CN112699018 B CN 112699018B
Authority
CN
China
Prior art keywords
defect
source code
file
software
repair
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.)
Active
Application number
CN202011150127.3A
Other languages
English (en)
Other versions
CN112699018A (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.)
Xian Jiaotong University
Original Assignee
Xian Jiaotong 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 Xian Jiaotong University filed Critical Xian Jiaotong University
Priority to CN202011150127.3A priority Critical patent/CN112699018B/zh
Publication of CN112699018A publication Critical patent/CN112699018A/zh
Application granted granted Critical
Publication of CN112699018B publication Critical patent/CN112699018B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于软件缺陷关联分析的软件缺陷定位方法。首先,收集大量大型项目的历史缺陷数据,同时爬取版本控制系统的提交日志信息,自动抽取其中缺陷修复信息,形成数据集。对软件的历史缺陷数据进行分析,挖掘软件缺陷之间存在何种关联关系,以及关联关系的类型。当一个项目中出现一个被报告的缺陷时,利用信息检索技术计算所报告的缺陷与源代码文件之间的相似性,得到一个源代码文件序列,其次根据历史缺陷数据,挖掘与该缺陷存在关联关系的所有历史缺陷的修复文件序列,将历史缺陷修复文件序列和信息检索得到的源代码文件序列加权融合,输出最终的缺陷定位序列,其中排名越高的源文件越有可能包含所报告的缺陷。

Description

基于软件缺陷关联分析的软件缺陷定位方法
技术领域
本发明涉及源代码程序分析及软件缺陷的分析及定位领域,特别涉及基于软件缺陷关联分析的缺陷定位方法。
背景技术
如今软件系统已经渗透到了人类生产和生活的各个方面。与此同时,由于软件缺陷导致的问题也带来了很大危害,造成了人员伤亡和经济损失。软件缺陷是指软件系统或者程序中出现的一些故障或者问题,是软件开发和维护过程中不可避免的问题。
在过去十几年,软件缺陷不断出现,并在软件系统的发展过程中不断得到修复。同时,像版本控制系统和问题跟踪系统这样的软件管理工具存储了大量历史缺陷数据以及缺陷修复信息。这些缺陷数据可以为高质量的软件维护和发展提供指导。因此,研究人员花费了大量的精力来构建基于这些历史数据的缺陷预测/检测模型。在这些模型的帮助下,软件工程师可以检测包含潜在缺陷的缺陷源文件,或者从类似的缺陷中获得推荐的修复建议。但真正理解并使用这些缺陷信息,挖掘缺陷之间的关系,成为应用于维护软件质量的知识,还有许多挑战。与此同时,对于一个大型的不断发展的软件系统,项目团队每天会收到大量的缺陷报告,查找需要更改的源代码文件以修复缺陷是一项具有挑战性的任务。近年来,使用信息检索(Information Retrieval)技术在给出缺陷报告的情况下自动定位缺陷源文件,取得了良好的效果。然而,已有的方法缺乏基于更大数据集的实用性评价,且未进一步考虑到缺陷之间存在的关联关系对定位缺陷文件的影响。
基于软件缺陷关联分析的缺陷定位方法是指通过发现软件缺陷与历史缺陷数据存在的关联关系从而更加准确的在源代码中定位出软件缺陷的源文件。这项工作具有重大意义,一方面,充分探索了海量软件历史缺陷数据及其修复信息的价值,探索了软件缺陷存在何种关联关系,研究了存在缺陷关联的缺陷数据的特点及修复成本。为研究人员挖掘这些数据的价值提供了支持;另一方面,通过挖掘软件缺陷的关联关系,进一步应用于缺陷定位,为开发者直截了当的显示存在缺陷的源代码文件,很大程度上提高了一个大型项目中开发人员的效率。
发明内容
为了充分利用软件历史缺陷信息,提升当前软件缺陷定位效果,本发明提供了基于软件缺陷关联分析的缺陷定位方法,通过挖掘历史缺陷数据中存在的关联关系和关联类型,分析关联缺陷对缺陷修复带来的影响,进一步将关联缺陷的修复文件使用到缺陷定位当中;同时使用了传统的信息检索技术来比较源代码文件和缺陷描述的相似性,将关联缺陷的源代码修复文件序列和信息检索技术得到的源代码文件序列加权融合,输出了最终的含有缺陷的源代码文件序列。最后在更新更全面的数据集上做了验证,证实了比已有的缺陷定位方法效果更好。
为了实现上述目的,本发明采用的技术方案是:
基于软件缺陷关联分析的缺陷定位方法,包括如下步骤:
S1:通过对软件源代码文件执行词法分析,创建词法标记的向量,剔除不必要的词汇,建立源代码语料库SCSet。
S2:根据源代码文件的长度,计算每个源代码文件的长度得分G(#terms).
S3:对源代码语料库中的所有文件构建索引向量,形成Indexi文件库。
S4:从软件缺陷报告的标题和描述中提取单个词汇,构建缺陷报告的查询Query。
S5:将文件索引Index和缺陷报告查询Query转换为特征向量
Figure GDA0002983122400000021
和/>
Figure GDA0002983122400000022
并采用TF-IDF方法赋予权值。
S6:使用向量空间模型,计算缺陷报告的查询
Figure GDA0002983122400000023
和源代码文档/>
Figure GDA0002983122400000024
之间的相似度得分rVSMScore。
S7:根据S6的相似度得分对每个源代码文件按照得分高低进行排序,返回一个源代码文件序列FileSet。
S8:根据缺陷报告BugReport和挖掘的软件缺陷数据集,通过启发式的方法分析与缺陷报告存在缺陷关联的历史缺陷报告集合HistorySet。
S9:根据版本控制系统的修复提交日志FixCommit,通过启发式的方法提取关联缺陷报告集合的修复文件。
S10:根据S9得到的文件序列,返回关联缺陷的修复文件序列RelevantSet。
S11:对S7和S10返回的源代码文件序列FileSet和修复文件序列RelevantSet进行加权计算,输出缺陷定位的源代码文件序列FixSet。终止算法。
本发明进一步的改进在于:所述步骤S1中,通过对软件源代码文件执行词法分析,创建词法标记的向量,剔除不必要的词汇,建立源代码语料库SCSet。步骤S1具体包括:
S101:对每个源代码文件执行词法分析,并创建词法记号的向量。
S102:删除词法记号中的关键字,分隔符,停顿词。
S103:分割源代码中一些由分词组成的变量。
S104:使用波特词干提取算法进行一些分词的后缀剥离。
本发明进一步的改进在于:所述步骤S104中,使用波特词干提取算法进行一些分词的后缀剥离。具体表现如下:
S10401:处理分词中的复数,以及ed和ing结束的单词。
S10402:如果分词中包含元音,并且以y结尾,将y改为i。
S10403:将双后缀的分词映射为单后缀。
S10404:处理-ic-,-full,-ness,-ative,-alize等等后缀。
本发明进一步的改进在于:所述步骤S104中,使用波特词干提取算法进行一些分词的后缀剥离,最终形成语料库SCSet。其中SCSet表示为:
SCSet={d1,d2,...,dn}
di={t1,t2,...,tn}
其中,d代表单个源代码文件,n代表源代码文件个数,t代表源代码文件中的单个分词。
本发明进一步的改进在于:所述步骤S2中,根据源代码文件的长度,使用logistic函数计算每个源代码文件的长度得分G(#terms),确保较长的文档在排序时得到较高的分数。具体的计算公式如下:
Figure GDA0002983122400000041
其中#terms表示某个文档中分词术语的总数,使用了#terms的归一化值作为函数e-x的输入,归一化函数N(x)的定义如下:
Figure GDA0002983122400000042
其中,假设x是一组数据,xmax和xmin分别是x中的最大值和最小值。
本发明进一步的改进在于:所述步骤S4中,从软件缺陷报告的标题和描述中提取单个词汇,构建查询Query。具体步骤如下:
S401:从软件缺陷报告的标题和描述中提取单个词汇。
S402:删除词汇中的关键字,分隔符,停顿词等。
S403:使用波特词干提取算法对所有的词汇进行后缀剥离。
S404:根据S403得到的词汇文档q,构建查询向量Query。
本发明进一步的改进在于:所述步骤S5中,对源代码语料库中的所有文件构建索引向量,形成Indexi文件库,表示为:
Indexi={Index1,Index2,...,Indexn}
其中n代表源代码文档的个数,单个文件的向量Indexd的计算方式如下:
1)根据词频(tf)和反文档频率(idf)计算词权值w:,其中,ftd指分词t在文档d中出现的次数,nt指包含分词t的文档数量,#terms表示文档d中分词的总数,#docs表示语料库中文档的总数。
Figure GDA0002983122400000051
2)根据词权值w,得到每个文件的向量
Figure GDA0002983122400000052
其计算方式如下:
Figure GDA0002983122400000053
Figure GDA0002983122400000054
本发明进一步的改进在于:所述步骤S404中,构建查询Query的方法具体如下:
1)根据词频(tf)和反文档频率(idf)计算词权值w:,其中,ftq指分词t在查询文档q中出现的次数,nt指包含分词t的文档数量,#docs表示缺陷语料库中文档的总数。
Figure GDA0002983122400000055
2)再根据词权值w,得到每个缺陷的查询向量
Figure GDA0002983122400000061
其计算方式如下:
Figure GDA0002983122400000062
Figure GDA0002983122400000063
本发明进一步的改进在于:所述步骤S6中,使用向量空间模型,计算缺陷查询
Figure GDA0002983122400000064
和源代码文档/>
Figure GDA0002983122400000065
之间的相似度得分。具体方法如下:
1)使用改进版的向量空间算法(VSM),先计算查询向量和文档向量的余弦相似度,公式如下:
Figure GDA0002983122400000066
2)在上述公式的基础上,我们给出了一个软件缺陷报告和源文件文档的相似度得分的计算方法:
Figure GDA0002983122400000067
本发明进一步的改进在于:所述步骤S7中,根据S6的相似度得分对每个源代码文件按照得分的高低进行排序,返回一个源代码文件序列FileSet。表示如下:
Figure GDA0002983122400000071
其中,f表示源代码中的一个.java文件;在元组(fi s,fi c)中,fi s表示与一个软件缺陷报告计算相似性得到的分数,fi c表示该源代码文件的在源代码项目中的路径名称;n表示源代码中包含的文件总数。
本发明进一步的改进在于:所述步骤S8中,根据缺陷报告和挖掘的软件缺陷数据集中,通过启发式的方法分析与缺陷报告存在缺陷关联的历史缺陷报告集合HistorySet。具体方式如下:
1)软件缺陷数据集合BuggySet表示如下:
BuggySet={Buggy1,Buggy2,Buggy3...,Buggyn}
其中n表示缺陷报告的数量;Buggyi表示一个历史缺陷报告,表示如下:
Buggyi={fi,{issuelink}i}
其中fi表示缺陷报告的基本信息,包括发生时间,以及描述信息等;{fixfile}i表示该缺陷报告修复文件集合;{issuelink}i表示缺陷报告存在一定关系的缺陷关联集合。
2)通过启发式的方法查找软件缺陷数据集合BuggySet中含有的缺陷关联,确定与报告的缺陷存在关联的历史缺陷报告集合HistorySet。表示如下:
HistorySet={BugId1,BugId2,...,BugIdk}
其中BugIdi表示与缺陷报告BugReport存在缺陷关联的缺陷信息,k表示关联的缺陷信息的个数。
本发明进一步的改进在于:所述步骤S9中,根据版本控制系统的修复提交日志FixCommit,通过启发式的方法提取关联缺陷报告集合的修复文件。具体方式如下:
1)从版本跟踪系统中获取修复提交日志FixCommit,表示如下:
FixCommit={Commit1,Commit2,...,Commitk}
其中,Commiti表示一个修复提交,包含了对一个缺陷的修复过程,k表示整个修复提交日志中的修复提交个数。其中Commiti又表示如下:
Commiti={commitIdi,bugIdi,{fixfile}i}
2)根据以上获取的HistorySet集合,通过启发式的方法在HistorySet中匹配出bugIdi所对应的{fixfile}i,得到了与缺陷报告关联的缺陷集合的修复文件集合。
本发明进一步的改进在于:所述步骤S10中,根据S9得到的文件序列,返回关联缺陷的修复文件序列RelevantSet。其中RelevantSet表示如下:
RelevantSet={{fixfile}1∩{fixfile}2∩{fixfile}3...∩{fixfile}i}
其中{fixfile}i表示关联缺陷的修复文件,i表示关联缺陷的个数;
本发明进一步的改进在于:所述步骤S11中,对S7和S10返回的源代码文件序列FileSet和修复文件序列RelevantSet进行加权计算,输出缺陷定位的源代码文件序列。终止算法。具体公式如下:
FixSet=(1+α)*(FileSet)+α*(RelevantSet)
其中,α是权重因子,且0≤α≤1,α的值根据实际经验表明,在0.2到0.3之间时,取得最良好的效果。
最后的排序是两个序列的综合排序,FixSet按照降序排列的源代码文件返回给用户,即为最终排序结果。排名较高的文件是更为相关的文件。算法结束。
与现有技术相比,本发明的有益效果是:
1)本发明方法自动提取了缺陷报告之间的链接,挖掘出缺陷关联的类型及其影响。
2)本发明方法运用启发式的方法从缺陷跟踪系统收集缺陷数据,从版本控制系统收集修复提交;通过正则表达式从修复提交描述中识别缺陷编号,从而对应到具体的缺陷数据。
3)本发明方法使用了改进的向量空间模型来计算缺陷报告与源代码文件之间的相似性;
4)本发明方法开创性的融合了历史关联缺陷的修复文件来改进定位准确度。
附图说明
图1为本发明方法整体流程图。
图2为源代码建立语料库流程图。
具体实施方式
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,以下结合附图详细说明本发明的具体实施方式。
如图1所示,基于软件缺陷关联分析的缺陷定位方法,包括如下步骤:
步骤S1:通过对软件源代码文件执行词法分析,创建词法标记的向量,剔除不必要的词汇,建立源代码语料库SCSet。结合图2,通过对软件源代码文件执行词法分析,建立源代码语料库方法具体包括如下步骤:
步骤S101:对每个源代码文件执行词法分析,并创建词法记号的向量。
步骤S102:删除词法记号中的关键字,分隔符,停顿词。
步骤S103:分割源代码中一些由分词组成的变量。
步骤S104:使用波特词干提取算法进行一些分词的后缀剥离。最终形成语料库SCSet。其中SCSet表示为:
SCSet={d1,d2,...,dn}
di={t1,t2,...,tn}
其中,d代表单个源代码文件,n代表源代码文件个数,t代表源代码文件中的单个分词。
其中使用波特词干提取算法的方法,具体步骤如下:
步骤S10401:处理分词中的复数,以及ed和ing结束的单词。
步骤S10402:如果分词中包含元音,并且以y结尾,将y改为i。
步骤S10403:将双后缀的分词映射为单后缀。
步骤S10404:处理-ic-,-full,-ness-,-ative,-alize等等后缀。
步骤S2:根据源代码文件的长度,使用logistic函数计算每个源代码文件的长度得分G(#terms),确保较长的文档在排序时得到较高的分数。具体的计算公式如下:
Figure GDA0002983122400000101
其中#terms表示某个文档中分词术语的总数,使用了#terms的归一化值作为函数e-x的输入,归一化函数N(x)的定义如下:
Figure GDA0002983122400000111
其中,假设x是一组数据,xmax和xmin分别是x中的最大值和最小值。
步骤S3:对源代码语料库中的所有文件构建索引向量,形成Indexi文件库。
步骤S4:从软件缺陷报告的标题和描述中提取单个词汇,构建缺陷报告的查询Query的方法。方法步骤与图2相似,具体步骤如下:
步骤S401:从软件缺陷报告的标题和描述中提取单个词汇。
步骤S402:删除词汇中的关键字,分隔符,停顿词等。
步骤S403:使用波特词干提取算法对所有的词汇进行后缀剥离。
步骤S404:根据S403得到的词汇文档q,构建查询向量Query。方法具体如下:
1)根据词频(tf)和反文档频率(idf)计算词权值w:,其中,ftq指分词t在查询文档q中出现的次数,nt指包含分词t的文档数量,#docs表示缺陷语料库中文档的总数。
Figure GDA0002983122400000112
2)再根据词权值w,得到每个缺陷的查询向量
Figure GDA0002983122400000113
其计算方式如下:
Figure GDA0002983122400000114
Figure GDA0002983122400000115
步骤S5:对源代码语料库中的所有文件构建索引向量,形成Indexi文件库,表示为:
Indexi={Index1,Index2,...,Indexn}
其中n代表源代码文档的个数,单个文件的向量Indexd的计算方式如下:
1)根据词频(tf)和反文档频率(idf)计算词权值w:,其中,ftd指分词t在文档d中出现的次数,nt指包含分词t的文档数量,#terms表示文档d中分词的总数,#docs表示语料库中文档的总数。
Figure GDA0002983122400000121
2)根据词权值w,得到每个文件的向量
Figure GDA0002983122400000122
其计算方式如下:
Figure GDA0002983122400000123
Figure GDA0002983122400000124
步骤S6:使用向量空间模型,计算缺陷查询
Figure GDA0002983122400000125
和源代码文档/>
Figure GDA0002983122400000126
之间的相似度得分。具体方法如下:
1)使用改进版的向量空间算法(VSM),先计算查询向量和文档向量的余弦相似度,公式如下:
Figure GDA0002983122400000127
2)在上述公式的基础上,我们给出了一个软件缺陷报告和源文件文档的相似度得分的计算方法:
Figure GDA0002983122400000131
步骤S7:根据步骤S6的相似度得分对每个源代码文件按照得分高低进行排序,返回一个源代码文件序列FileSet。具体表示如下:
Figure GDA0002983122400000132
其中,f表示源代码中的一个.java文件;在元组(fi s,fi c)中,fi s表示与一个软件缺陷报告计算相似性得到的分数,fi c表示该源代码文件的在源代码项目中的路径名称;n表示源代码中包含的文件总数。
步骤S8:根据缺陷报告BugReport和挖掘的软件缺陷数据集,通过启发式的方法分析与缺陷报告存在缺陷关联的历史缺陷报告集合HistorySet。具体方式如下:
1)软件缺陷数据集合BuggySet表示如下:
BuggySet={Buggy1,Buggy2,Buggy3...,Buggyn}
其中n表示缺陷报告的数量;Buggyi表示一个历史缺陷报告,表示如下:
Buggyi={fi,{issuelink}i}
其中fi表示缺陷报告的基本信息,包括发生时间,以及描述信息等;{fixfile}i表示该缺陷报告修复文件集合;{issuelink}i表示缺陷报告存在一定关系的缺陷关联集合。
2)通过启发式的方法查找软件缺陷数据集合BuggySet中含有的缺陷关联,确定与报告的缺陷存在关联的历史缺陷报告集合HistorySet。表示如下:
HistorySet={BugId1,BugId2,...,BugIdk}
其中BugIdi表示与缺陷报告BugReport存在缺陷关联的缺陷信息,k表示关联的缺陷信息的个数。
步骤S9:根据版本控制系统的修复提交日志FixCommit,通过启发式的方法提取关联缺陷报告集合的修复文件。具体方式如下:
1)从版本跟踪系统中获取修复提交日志FixCommit,表示如下:
FixCommit={Commit1,Commit2,...,Commitk}
其中,Commiti表示一个修复提交,包含了对一个缺陷的修复过程,k表示整个修复提交日志中的修复提交个数。其中Commiti又表示如下:
Commiti={commitIdi,bugIdi,{fixfile}i}
2)根据步骤S8中获取的HistorySet集合,通过启发式的方法在HistorySet中匹配出bugIdi所对应的{fixfile}i,得到了与缺陷报告关联的缺陷集合的修复文件集合。
步骤S10:根据步骤S9得到的文件序列,返回关联缺陷的修复文件序列RrelevantSet。其中RelevantSet表示如下:
RelevantSet={{fixfile}1∩{fixfile}2∩{fixfile}3...∩{fixfile}i}
其中{fixfile}i表示关联缺陷的修复文件,i表示关联缺陷的个数;
步骤S11:对步骤S7和步骤S10返回的源代码文件序列FileSet和修复文件序列RelevantSet进行加权计算,输出缺陷定位的源代码文件序列FixSet。具体公式如下:
FixSet=(1+α)*(FileSet)+α*(RelevantSet)
其中,α是权重因子,且0≤α≤1,α的值根据实际经验表明,在0.2到0.3之间时,取得最良好的效果。
最后的排序是两个序列的综合排序,FixSet按照降序排列的源代码文件返回给用户,即为最终排序结果。排名较高的文件是更为相关的文件。算法结束。

Claims (8)

1.基于软件缺陷关联分析的软件缺陷定位方法,其特征在于,包括如下步骤:
S1:通过对软件源代码文件执行词法分析,创建词法标记的向量,剔除不必要的词汇,建立源代码语料库SCSet,
S2:根据源代码文件的长度,计算每个源代码文件的长度得分G(#terms).
S3:对源代码语料库中的所有文件构建索引向量,形成Indexi文件库;
S4:从软件缺陷报告的标题和描述中提取单个词汇,构建缺陷报告的查询Query;
所述步骤S4中,从软件缺陷报告的标题和描述中提取单个词汇,构建查询Query,具体步骤如下:
S401:从软件缺陷报告的标题和描述中提取单个词汇;
S402:删除词汇中的关键字,分隔符,停顿词等;
S403:使用波特词干提取算法对所有的词汇进行后缀剥离;
S404:根据S403得到的词汇文档q,构建查询向量Query;
构建查询Query的方法具体如下:
1)根据词频(tf)和反文档频率(idf)计算词权值w:,其中,ftq指分词t在查询文档q中出现的次数,nt指包含分词t的文档数量,#docs表示缺陷语料库中文档的总数;
tf(t,q)=log(ftq)+1,
Figure QLYQS_1
2)再根据词权值w,得到每个缺陷的查询向量
Figure QLYQS_2
其计算方式如下:
Figure QLYQS_3
Figure QLYQS_4
S5:将文件索引Index和缺陷报告查询Query转换为特征向量
Figure QLYQS_5
和/>
Figure QLYQS_6
并采用TF-IDF方法赋予权值;
对源代码语料库中的所有文件构建索引向量,形成Indexi文件库,表示为:
Indexi={Index1,Index2,...,Indexn}
其中n代表源代码文档的个数,单个文件的向量Indexd的计算方式如下:
1)根据词频(tf)和反文档频率(idf)计算词权值w:其中,ftd指分词t在文档d中出现的次数,nt指包含分词t的文档数量,#terms表示文档d中分词的总数,#docs表示语料库中文档的总数;
tf(t,d)=log(ftd)+1,
Figure QLYQS_7
2)根据词权值w,得到每个文件的向量
Figure QLYQS_8
其计算方式如下:
Figure QLYQS_9
Figure QLYQS_10
S6:使用向量空间模型,计算缺陷报告的查询
Figure QLYQS_11
和源代码文档/>
Figure QLYQS_12
之间的相似度得分rVSMScore;
S7:根据S6的相似度得分对每个源代码文件按照得分高低进行排序,返回一个源代码文件序列FileSet;
S8:根据缺陷报告BugReport和挖掘的软件缺陷数据集,通过启发式的方法分析与缺陷报告存在缺陷关联的历史缺陷报告集合HistorySet;
S9:根据版本控制系统的修复提交日志FixCommit,通过启发式的方法提取关联缺陷报告集合的修复文件;
S10:根据S9得到的文件序列,返回关联缺陷的修复文件序列RelevantSet;
S11:对S7和S10返回的源代码文件序列FileSet和修复文件序列RelevantSet进行加权计算,输出缺陷定位的源代码文件序列FixSet,终止算法。
2.根据权利要求1所述基于软件缺陷关联分析的缺陷定位方法,其特征在于,所述步骤S1中,通过对软件源代码文件执行词法分析,创建词法标记的向量,剔除不必要的词汇,建立源代码语料库SCSet,步骤S1具体包括:
S101:对每个源代码文件执行词法分析,并创建词法记号的向量;
S102:删除词法记号中的关键字,分隔符,停顿词;
S103:分割源代码中一些由分词组成的变量;
S104:使用波特词干提取算法进行一些分词的后缀剥离;
1)所述步骤S104中,使用波特词干提取算法进行一些分词的后缀剥离,具体表现如下:
S10401:处理分词中的复数,以及ed和ing结束的单词;
S10402:如果分词中包含元音,并且以y结尾,将y改为i;
S10403:将双后缀的分词映射为单后缀;
S10404:处理-ic-,-full,-ness,-ative,-alize等等后缀;
2)所述步骤S104中,使用波特词干提取算法进行一些分词的后缀剥离,最终形成语料库SCSet,其中SCSet表示为:
SCSet={d1,d2,...,dn}
di={t1,t2,...,tn}
其中,d代表单个源代码文件,n代表源代码文件个数,t代表源代码文件中的单个分词。
3.根据权利要求1所述的基于软件缺陷关联分析的缺陷定位方法,其特征在于,所述步骤S2中,根据源代码文件的长度,使用logistic函数计算每个源代码文件的长度得分G(#terms),确保较长的文档在排序时得到较高的分数,具体的计算公式如下:
Figure QLYQS_13
其中#terms表示某个文档中分词术语的总数,使用了#terms的归一化值作为函数e-x的输入,归一化函数N(x)的定义如下:
Figure QLYQS_14
其中,假设x是一组数据,xmax和xmin分别是x中的最大值和最小值。
4.根据权利要求1所述的基于软件缺陷关联分析的缺陷定位方法,其特征在于,所述步骤S6中,使用向量空间模型,计算缺陷查询
Figure QLYQS_15
和源代码文档/>
Figure QLYQS_16
之间的相似度得分,具体方法如下:
1)使用改进版的向量空间算法(VSM),先计算查询向量和文档向量的余弦相似度,公式如下:
Figure QLYQS_17
2)在上述公式的基础上,我们给出了一个软件缺陷报告和源文件文档的相似度得分的计算方法:
Figure QLYQS_18
5.根据权利要求1所述的基于软件缺陷关联分析的缺陷定位方法,其特征在于,所述步骤S7中,根据S6的相似度得分对每个源代码文件按照得分的高低进行排序,返回一个源代码文件序列FileSet,表示如下:
Figure QLYQS_19
其中,f表示源代码中的一个java文件;在元组
Figure QLYQS_20
中,/>
Figure QLYQS_21
表示与一个软件缺陷报告计算相似性得到的分数,/>
Figure QLYQS_22
表示该源代码文件的在源代码项目中的路径名称;n表示源代码中包含的文件总数。
6.根据权利要求1所述的基于软件缺陷关联分析的缺陷定位方法,其特征在于,所述步骤S8中,根据缺陷报告和挖掘的软件缺陷数据集中,通过启发式的方法分析与缺陷报告存在缺陷关联的历史缺陷报告集合HistorySet,具体方式如下:
1)软件缺陷数据集合BuggySet表示如下:
BuggySet={Buggy1,Buggy2,Buggy3...,Buggyn}
其中n表示缺陷报告的数量;Buggyi表示一个历史缺陷报告,表示如下:
Buggyi={fi,{issuelink}i}
其中fi表示缺陷报告的基本信息,包括发生时间,以及描述信息等;{fixfile}i表示该缺陷报告修复文件集合;{issuelink}i表示缺陷报告存在一定关系的缺陷关联集合;
2)通过启发式的方法查找软件缺陷数据集合BuggySet中含有的缺陷关联,确定与报告的缺陷存在关联的历史缺陷报告集合HistorySet,表示如下:
HistorySet={Bugld1,Bugld2,...,Bugldk}
其中BugIdi表示与缺陷报告BugReport存在缺陷关联的缺陷信息,k表示关联的缺陷信息的个数。
7.根据权利要求1所述的基于软件缺陷关联分析的缺陷定位方法,其特征在于,所述步骤S9中,根据版本控制系统的修复提交日志FixCommit,通过启发式的方法提取关联缺陷报告集合的修复文件,具体方式如下:
1)从版本跟踪系统中获取修复提交日志FixCommit,表示如下:
FixCommit={Commit1,Commit2,...,Commitk}
其中,Commiti表示一个修复提交,包含了对一个缺陷的修复过程,k表示整个修复提交日志中的修复提交个数,其中Cimmiti又表示如下:
Commiti={commitIdi,bugIdi,{fixfile}i}
2)根据获取的HistorySet集合,通过启发式的方法在HistorySet中匹配出bugIdi所对应的{fixfile}i,得到了与缺陷报告关联的缺陷集合的修复文件集合。
8.根据权利要求1所述的基于软件缺陷关联分析的缺陷定位方法,其特征在于,所述步骤S10和S11中,首先根据S9得到的文件序列,返回关联缺陷的修复文件序列RelevantSet,其次对S7和S10返回的源代码文件序列FileSet和修复文件序列RelevantSet进行加权计算,输出缺陷定位的源代码文件序列,终止算法;
1)其中RelevantSet表示如下:
RelevantSet={{fixfile}1∩{fixfile}2∩{fixfile}3...∩{fixfile}i}
其中{fixfile}i表示关联缺陷的修复文件,i表示关联缺陷的个数;
2)所述步骤S11中,具体公式如下:
FixSet=(1+α)*(FileSet)+α*(RelevantSet)
其中,α是权重因子,且0≤α≤1,α的值根据实际经验表明,在0.2到0.3之间时,取得最良好的效果;
最后的排序是两个序列的综合排序,FixSet按照降序排列的源代码文件返回给用户,即为最终排序结果,排名较高的文件是更为相关的文件,算法结束。
CN202011150127.3A 2020-10-23 2020-10-23 基于软件缺陷关联分析的软件缺陷定位方法 Active CN112699018B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011150127.3A CN112699018B (zh) 2020-10-23 2020-10-23 基于软件缺陷关联分析的软件缺陷定位方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011150127.3A CN112699018B (zh) 2020-10-23 2020-10-23 基于软件缺陷关联分析的软件缺陷定位方法

Publications (2)

Publication Number Publication Date
CN112699018A CN112699018A (zh) 2021-04-23
CN112699018B true CN112699018B (zh) 2023-06-20

Family

ID=75506404

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011150127.3A Active CN112699018B (zh) 2020-10-23 2020-10-23 基于软件缺陷关联分析的软件缺陷定位方法

Country Status (1)

Country Link
CN (1) CN112699018B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113656325B (zh) * 2021-08-31 2023-12-08 中国农业银行股份有限公司 软件缺陷预测的方法、装置、电子设备和计算机存储介质
CN114816497B (zh) * 2022-04-18 2023-11-28 南京航空航天大学 基于bert预训练模型的链接生成方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10169208B1 (en) * 2014-11-03 2019-01-01 Charles W Moyes Similarity scoring of programs
CN109165382A (zh) * 2018-08-03 2019-01-08 南京工业大学 一种加权词向量和潜在语义分析结合的相似缺陷报告推荐方法
CN110109835A (zh) * 2019-05-05 2019-08-09 重庆大学 一种基于深度神经网络的软件缺陷定位方法
CN111026433A (zh) * 2019-12-23 2020-04-17 中国人民解放军国防科技大学 基于代码变更历史的软件代码质量问题自动修复方法、系统及介质
CN111309607A (zh) * 2020-02-12 2020-06-19 扬州大学 一种代码方法级别的软件缺陷定位方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8468497B2 (en) * 2007-11-27 2013-06-18 International Business Machines Corporation Automated defect classification
US10108526B2 (en) * 2012-11-27 2018-10-23 Purdue Research Foundation Bug localization using version history
US9563540B2 (en) * 2014-06-19 2017-02-07 Hcl Technologies Ltd Automated defect positioning based on historical data
EP3392780A3 (en) * 2017-04-19 2018-11-07 Tata Consultancy Services Limited Systems and methods for classification of software defect reports

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10169208B1 (en) * 2014-11-03 2019-01-01 Charles W Moyes Similarity scoring of programs
CN109165382A (zh) * 2018-08-03 2019-01-08 南京工业大学 一种加权词向量和潜在语义分析结合的相似缺陷报告推荐方法
CN110109835A (zh) * 2019-05-05 2019-08-09 重庆大学 一种基于深度神经网络的软件缺陷定位方法
CN111026433A (zh) * 2019-12-23 2020-04-17 中国人民解放军国防科技大学 基于代码变更历史的软件代码质量问题自动修复方法、系统及介质
CN111309607A (zh) * 2020-02-12 2020-06-19 扬州大学 一种代码方法级别的软件缺陷定位方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
基于关联规则挖掘的软件缺陷分析研究;颜乐鸣;《软件》;20170115(第01期);全文 *
基于嵌入模型的混合式相关缺陷关联方法;张洋等;《软件学报》;20190515(第05期);全文 *
软件缺陷关联分析与缺陷排除研究;李鹏等;《计算机科学》;20131015(第10期);全文 *

Also Published As

Publication number Publication date
CN112699018A (zh) 2021-04-23

Similar Documents

Publication Publication Date Title
CN109344250B (zh) 基于医保数据的单病种诊断信息快速结构化方法
CN108959258B (zh) 一种基于表示学习的特定领域集成实体链接方法
Nguyen et al. Multi-layered approach for recovering links between bug reports and fixes
US9946763B2 (en) Evaluating passages in a question answering computer system
CN106407113B (zh) 一种基于Stack Overflow和commit库的bug定位方法
US10706030B2 (en) Utilizing artificial intelligence to integrate data from multiple diverse sources into a data structure
CN104408173A (zh) 一种基于b2b平台的核心关键词自动提取方法
CN112699018B (zh) 基于软件缺陷关联分析的软件缺陷定位方法
CN103038764A (zh) 用于关键字提取的方法
CN114398069B (zh) 一种基于交叉指纹分析的公共组件库精确版本识别方法及系统
CN112632223B (zh) 案事件知识图谱构建方法及相关设备
Alhindawi et al. A Topic Modeling Based Solution for Confirming Software Documentation Quality
Zou et al. Duplication detection for software bug reports based on topic model
CN108733702B (zh) 用户查询上下位关系提取的方法、装置、电子设备和介质
CN115617689A (zh) 一种基于cnn模型和领域特征的软件缺陷定位方法
WO2018220688A1 (ja) 辞書生成装置、辞書生成方法、及びプログラム
CN112182069B (zh) 代理人留存预测方法、装置、计算机设备及存储介质
Wu et al. A radical-based method for Chinese named entity recognition
Udagawa Source code retrieval using sequence based similarity
Ding et al. Automatic semantic annotation of images based on Web data
Žitnik et al. Extracting gene regulation networks using linear-chain conditional random fields and rules
CN117421392B (zh) 一种基于词级对齐的代码搜索方法及装置
CN116245108B (zh) 验证匹配导向方法、验证匹配导向器、设备及存储介质
Kim et al. Classifying gene sentences in biomedical literature by combining high-precision gene identifiers
WO2023084712A1 (ja) 情報処理装置、情報処理方法及び情報処理プログラム

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