基于软件缺陷关联分析的软件缺陷定位方法技术

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

【技术实现步骤摘要】
基于软件缺陷关联分析的软件缺陷定位方法


[0001]本专利技术涉及源代码程序分析及软件缺陷的分析及定位领域,特别涉及基于软件缺陷关联分析的缺陷定位方法。

技术介绍

[0002]如今软件系统已经渗透到了人类生产和生活的各个方面。与此同时,由于软件缺陷导致的问题也带来了很大危害,造成了人员伤亡和经济损失。软件缺陷是指软件系统或者程序中出现的一些故障或者问题,是软件开发和维护过程中不可避免的问题。
[0003]在过去十几年,软件缺陷不断出现,并在软件系统的发展过程中不断得到修复。同时,像版本控制系统和问题跟踪系统这样的软件管理工具存储了大量历史缺陷数据以及缺陷修复信息。这些缺陷数据可以为高质量的软件维护和发展提供指导。因此,研究人员花费了大量的精力来构建基于这些历史数据的缺陷预测/检测模型。在这些模型的帮助下,软件工程师可以检测包含潜在缺陷的缺陷源文件,或者从类似的缺陷中获得推荐的修复建议。但真正理解并使用这些缺陷信息,挖掘缺陷之间的关系,成为应用于维护软件质量的知识,还有许多挑战。与此同时,对于一个大型的不断发展的软件系统,项目团队每天会收到大量的缺陷报告,查找需要更改的源代码文件以修复缺陷是一项具有挑战性的任务。近年来,使用信息检索(Information Retrieval)技术在给出缺陷报告的情况下自动定位缺陷源文件,取得了良好的效果。然而,已有的方法缺乏基于更大数据集的实用性评价,且未进一步考虑到缺陷之间存在的关联关系对定位缺陷文件的影响。
[0004]基于软件缺陷关联分析的缺陷定位方法是指通过发现软件缺陷与历史缺陷数据存在的关联关系从而更加准确的在源代码中定位出软件缺陷的源文件。这项工作具有重大意义,一方面,充分探索了海量软件历史缺陷数据及其修复信息的价值,探索了软件缺陷存在何种关联关系,研究了存在缺陷关联的缺陷数据的特点及修复成本。为研究人员挖掘这些数据的价值提供了支持;另一方面,通过挖掘软件缺陷的关联关系,进一步应用于缺陷定位,为开发者直截了当的显示存在缺陷的源代码文件,很大程度上提高了一个大型项目中开发人员的效率。

技术实现思路

[0005]为了充分利用软件历史缺陷信息,提升当前软件缺陷定位效果,本专利技术提供了基于软件缺陷关联分析的缺陷定位方法,通过挖掘历史缺陷数据中存在的关联关系和关联类型,分析关联缺陷对缺陷修复带来的影响,进一步将关联缺陷的修复文件使用到缺陷定位当中;同时使用了传统的信息检索技术来比较源代码文件和缺陷描述的相似性,将关联缺陷的源代码修复文件序列和信息检索技术得到的源代码文件序列加权融合,输出了最终的含有缺陷的源代码文件序列。最后在更新更全面的数据集上做了验证,证实了比已有的缺陷定位方法效果更好。
[0006]为了实现上述目的,本专利技术采用的技术方案是:
函数计算每个源代码文件的长度得分G(#terms),确保较长的文档在排序时得到较高的分数。具体的计算公式如下:
[0034][0035]其中#terms表示某个文档中分词术语的总数,使用了#terms的归一化值作为函数 e

x
的输入,归一化函数N(x)的定义如下:
[0036][0037]其中,假设x是一组数据,x
max
和x
min
分别是x中的最大值和最小值。
[0038]本专利技术进一步的改进在于:所述步骤S4中,从软件缺陷报告的标题和描述中提取单个词汇,构建查询Query。具体步骤如下:
[0039]S401:从软件缺陷报告的标题和描述中提取单个词汇。
[0040]S402:删除词汇中的关键字,分隔符,停顿词等。
[0041]S403:使用波特词干提取算法对所有的词汇进行后缀剥离。
[0042]S404:根据S403得到的词汇文档q,构建查询向量Query。
[0043]本专利技术进一步的改进在于:所述步骤S5中,对源代码语料库中的所有文件构建索引向量,形成Index
i
文件库,表示为:
[0044]Index
i
={Index1,Index2,...,Index
n
}
[0045]其中n代表源代码文档的个数,单个文件的向量Index
d
的计算方式如下:
[0046]1)根据词频(tf)和反文档频率(idf)计算词权值w:,其中,f
td
指分词t在文档d 中出现的次数,n
t
指包含分词t的文档数量,#terms表示文档d中分词的总数,#docs表示语料库中文档的总数。
[0047][0048]2)根据词权值w,得到每个文件的向量其计算方式如下:
[0049][0050][0051]本专利技术进一步的改进在于:所述步骤S404中,构建查询Query的方法具体如下:
[0052]1)根据词频(tf)和反文档频率(idf)计算词权值w:,其中,f
tq
指分词t在查询文档 q中出现的次数,n
t
指包含分词t的文档数量,#docs表示缺陷语料库中文档的总数。
[0053][0054]2)再根据词权值w,得到每个缺陷的查询向量其计算方式如下:
[0055][0056][0057]本专利技术进一步的改进在于:所述步骤S6中,使用向量空间模型,计算缺陷查询和源代码文档之间的相似度得分。具体方法如下:
[0058]1)使用改进版的向量空间算法(VSM),先计算查询向量和文档向量的余弦相似度,公式如下:
[0059][0060]2)在上述公式的基础上,我们给出了一个软件缺陷报告和源文件文档的相似度得分的计算方法:
[0061][0062]本专利技术进一步的改进在于:所述步骤S7中,根据S6的相似度得分对每个源代码文件按照得分的高低进行排序,返回一个源代码文件序列FileSet。表示如下:
[0063][0064]其中,f表示源代码中的一个.java文件;在元组(f
is
,f
ic
)中,f
is
表示与一个软件缺陷报告计算相似性得到的分数,f
ic
表示该源代码文件的在源代码项目中的路径名称;n表示源代码中包含的文件总数。
[0065]本专利技术进一步的改进在于:所述步骤S8中,根据缺陷报告和挖掘的软件缺陷数据集中,通过启发式的方法分析与缺陷报告存在缺陷关联的历史缺陷报告集合 HistorySet。具体方式如下:
[0066]1)软件缺陷数据集合BuggySet表示如下:
[0067]BuggySet={Buggy1,Buggy2,Buggy3...,Buggy
n
}
[0068]其中n表示缺陷报告的数量;Buggy
i
表示一个历史缺陷报告,表示如下:
[0069]Buggy
i
={f
i
,{issuelink}
i...

【技术保护点】

【技术特征摘要】
1.基于软件缺陷关联分析的软件缺陷定位方法,其特征在于,包括如下步骤:S1:通过对软件源代码文件执行词法分析,创建词法标记的向量,剔除不必要的词汇,建立源代码语料库SCSet,S2:根据源代码文件的长度,计算每个源代码文件的长度得分G(#terms).S3:对源代码语料库中的所有文件构建索引向量,形成Index
i
文件库;S4:从软件缺陷报告的标题和描述中提取单个词汇,构建缺陷报告的查询Query;S5:将文件索引Index和缺陷报告查询Query转换为特征向量和并采用TF

IDF方法赋予权值;S6:使用向量空间模型,计算缺陷报告的查询和源代码文档之间的相似度得分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,...,d
n
}d
i
={t1,t2,...,t
n
}其中,d代表单个源代码文件,n代表源代码文件个数,t代表源代码文件中的单个分词。3.根据权利要求1所述的基于软件缺陷关联分析的缺陷定位方法,其特征在于,所述步
骤S2中,根据源代码文件的长度,使用logistic函数计算每个源代码文件的长度得分G(#terms),确保较长的文档在排序时得到较高的分数,具体的计算公式如下:其中#terms表示某个文档中分词术语的总数,使用了#terms的归一化值作为函数e

x
的输入,归一化函数N(x)的定义如下:其中,假设x是一组数据,x
max
和x
min
分别是x中的最大值和最小值。4.根据权利要求1所述的基于软件缺陷关联分析的缺陷定位方法,其特征在于,所述步骤S4中,从软件缺陷报告的标题和描述中提取单个词汇,构建查询Query,具体步骤如下:S401:从软件缺陷报告的标题和描述中提取单个词汇;S402:删除词汇中的关键字,分隔符,停顿词等;S403:使用波特词干提取算法对所有的词汇进行后缀剥离;S404:根据S403得到的词汇文档q,构建查询向量Query;所述步骤S404中,构建查询Query的方法具体如下:1)根据词频(tf)和反文档频率(idf)计算词权值w:,其中,f
tq
指分词t在查询文档q中出现的次数,n
t
指包含分词t的文档数量,#docs表示缺陷语料库中文档的总数;2)再根据词权值w,得到每个缺陷的查询向量其计算方式如下:其计算方式如下:5.根据权利要求1所述的基于软件缺陷关联分析的缺陷定位方法,其特征在于,所述步骤S5中,对源代码语料库中的所有文件构建索引向量,形成Index
i
文件库,表示为:Index
i
={Index1,Index2,...,Index
n
}其中n代表源代码文档的个数,单个文件的向量Index
d
的计算方式如下:1)根据词频(tf)和反文档频率(idf)计算词权值w:其中,f
td
指分词...

【专利技术属性】
技术研发人员:刘烃马雪崔笛徐茜刘靖雯钟定洪
申请(专利权)人:西安交通大学
类型:发明
国别省市:

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

1