首页 / 专利库 / 专利权 / 专利合作条约 / 第I章 / 受理局 / 形式要求 / 缺陷 / 一种基于缺陷报告的缺陷代码路径定位方法

一种基于缺陷报告的缺陷代码路径定位方法

阅读:235发布:2020-06-29

专利汇可以提供一种基于缺陷报告的缺陷代码路径定位方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种基于 缺陷 报告的缺陷代码路径 定位 方法,基于 深度学习 的方法从已修复的缺陷报告和对应修复代码路径中学习出文本与代码之间的关联关系,从而对新缺陷报告进行关联缺陷代码文件路径的预测。具体包括2个部分:(1)基于缺陷报告的缺陷代码路径树生成模型BRSP;(2)基于规则约束的缺陷代码路径树预测 算法 。本发明的优点是可以根据缺陷报告给出关联的缺陷代码文件路径信息,辅助开发人员进行缺陷代码定位,节省开发人员的时间和精 力 ,从而提高 软件 项目的维护效率。,下面是一种基于缺陷报告的缺陷代码路径定位方法专利的具体信息内容。

1.一种基于缺陷报告的缺陷代码路径定位方法,其特征在于:使用基于深度学习的方法从已修复的缺陷报告和对应修复代码路径中学习出文本与代码之间的关联关系,从而对新缺陷报告进行关联缺陷代码文件路径的预测,训练得到基于缺陷报告的缺陷代码路径定位模型;在基于缺陷报告的缺陷代码路径定位模型的基础上,利用源文件路径存在层级结构的特性,添加了带有约束规则的路径树预测算法
2.如权利要求1所述的基于缺陷报告的缺陷代码路径定位方法,其特征在于,基于缺陷报告的缺陷代码路径定位模型BRSP的训练方法,包括如下内容:
将缺陷源代码文件的路径模作为模型的预测标签;缺陷报告d可以表示成一个单词序列 其中wi表示为文档中第i个单词,Nd表示缺陷报告d的单词序列
单词的总数;所有缺陷报告的所有词语构成词汇集V;将单词序列Wd当做模型的输入,模型最终输出序列化的缺陷代码文件路径树。
3.如权利要求2所述的基于缺陷报告的缺陷代码路径定位方法,其特征在于,模型包含嵌入(embedding)层和编码(encoder)部分以及解码(decoder)部分,而编码(encoder)部分和解码(decoder)部分分别包含三层循环神经网络层;输入模型的单词序列Wd首先经过嵌入(embedding)层,对序列中的每个单词wi执行嵌入(embedding)操作,即首先获得每个单词的独热(one-hot)向量表示,然后与查找(look-up)矩阵相乘,最终得到一个形状为1×dim的向量作为当前单词的嵌入(embedding)表示;此时包含Nd个单词的单词序列Wd变成了一个Nd×dim的矩阵x,接着将该矩阵继续传递给模型的剩余部分。
4.如权利要求3所述的基于缺陷报告的缺陷代码路径定位方法,其特征在于,使用三层循环神经网络RNN构建模型的编码(encoder)部分获取文本信息,使用RNN的其中一种变体:
控循环单元GRU,该模型的公式如下:
zt=σ(Wz·[ht-1,xt])
其中ht-1为GRU的上一时刻隐状态,而xt是当前时刻输入模型的单词,Wz为可训练参数,σ是sigmoid函数,公式为:
rt=σ(Wr·[ht-1,xt])
符号含义同上,
其中
最终得到了当前隐状态ht;
经过同样的过程得到解码(decoder)部分的当前隐状态st,然后使用注意机制得到新的特征向量,公式如下:
其中 W1和W2均为深度神经网络模型中注意力机制模块的可训练参数,
αij=softmax(uij)
Sofimax公式为:
hj和si分别是当前时刻编码器(encoder)部分和解码器(decoder)部分的隐状态,αij决定了当前encoder的隐状态hj的各部分对计算新的特征向量的贡献大小;
最终得到的s′i作为当前文本的向量表示;
然后将该向量输入softmax层,得到所有文件路径树节点的概率,并输出所有节点按照概率从大到小排列的列表。
5.如权利要求1所述的基于缺陷报告的缺陷代码路径定位方法,其特征在于,基于规则约束的路径树预测算法中:多数软件项目存在模块的层级关系,这种模块的层级关系直观表现在源文件的路径中;将每个文件路径中的所有模块抽取出来作为树的节点,并标记节点之间的父子关系,汇集项目中所有源文件的节点之后即可构成一棵文件路径树,这棵树上的每一个叶子节点代表项目的一个源文件;
每个源文件对应一系列模块层级关系,而一份缺陷报告往往对应多个源文件;同样地,将每个文件路径中的所有模块抽取出来作为树的节点,并标记节点之间的父子关系,汇集缺陷报告对应的所有源文件的节点后组织成当前缺陷报告对应的缺陷文件树,该文件路径树即为预测目标;然而树形结构很难进行表达,因此为方便预测,使用预处理模块将路径树串行化,具体使用深度优先搜索方法从根节点开始,遍历缺陷文件路径树上所有节点,最后得到遍历结果,即该树上所有节点构成的序列。
6.如权利要求5所述的基于缺陷报告的缺陷代码路径定位方法,其特征在于,使用Beam-Search算法进行标签预测,首先对Beam-Search算法进行优化,优化方法如下:在每次生成k个节点的同时,判断这k个节点是否与上层节点满足实际父子关系,若符合则继续进行路径生成,若不符合则结束当前路径的生长,也就是进行一次剪枝操作;
在上述剪枝方法的基础上进一步修正路径树概率计算公式,在原有公式之后加上一项惩罚项,使得路径树预测算法能更多地关注长度合适的路径树;改进后的公式如下:
最终得到基于规则约束的路径树预测算法;使用该算法可以预测出符合约束规则同时长度合适的路径树,从而进一步提高预测准确度。

说明书全文

一种基于缺陷报告的缺陷代码路径定位方法

技术领域

[0001] 本发明涉及一种基于缺陷报告的缺陷代码路径定位方法,属于软件测试技术领域。

背景技术

[0002] 在大型开源软件开发过程中,广泛使用Bugzilla,Jira,GNATS,trac等缺陷跟踪管理系统来跟踪管理项目的缺陷。
[0003] 以Eclipse项目中的缺陷跟踪管理系统Bugzilla为例,在对整个项目进行开发、测试和维护的过程中,当软件开发参与者发现了项目中的Bug时,可以登录BugZilla系统提交一份缺陷报告。在BugZilla中,每个缺陷报告都有Status、Resolution这两个关键属性表示其状态。
[0004] 其中,Status表示bug的一般状态,下面是其取值和各个取值的说明以及转换的可能性。
[0005] Unconfirmed(未证实)
[0006] 表明bug是最近加入到数据库的,没有人证实这个bug的存在。拥有“确定/取消Bug"权限的用户可以转变bug的状态为:
[0007] 1.确认这个bug,改变它的状态为新提交的(NEW)
[0008] 2.解决这个bug,标志为已解决(RESOLVED)
[0009] New(新提交的)
[0010] 这个bug已经分发给某位开发人员处理。这个状态的bug可以转变为以下状态:
[0011] 1.当前被指派的开发人员接受该bug,状态转变为已指派(ASSIGNED)[0012] 2.该bug被指派给别的开发人员,状态维持为新提交的(NEW)
[0013] 已解决,状态转变为已解决(RESOLVED)
[0014] Assigned(已指派)
[0015] 这个bug尚未解决,但已经被指派给正确的人进行解决。这个状态的bug可能转换为以下状态:
[0016] 1.被指派给别的开发人员,状态转变为新提交的(NEW)
[0017] 2.被解决,状态转变为已解决(RESOLVED)
[0018] Reopened(重新打开)
[0019] 这个bug曾经被解决了,但是解决方案是不正确的。例如,一个处于仅对我有效(WORKSFORME)的bug,当获得了更多的信息并且能够被再现时,将转变为重开(REOPENED)状态。这个状态的bug只能转换为以下状态:
[0020] 1.已指派(ASSIGNED)给某名开发人员
[0021] 2.被解决,状态转变为已解决(RESOLVED)
[0022] Resolved(已解决)
[0023] 已经确定了一种解决方案,这种方案正在等待QA的确认。此状态的bug可转化为以下状态:
[0024] 1.重新开放,转变为重开放(REOPENED)
[0025] 2.QA确认后,转变为已验证(VERIFIED)
[0026] 3.QA确认后,转变为关闭(CLOSED)
[0027] Verified(已经证实)
[0028] QA已经确认对于这个bug的解决方案是成功的。处于这种状态的bug当它们所存在的产品正式发布之后,状态将转变为关闭(CLOSED)。
[0029] Closed(已关闭)
[0030] bug处于这种状态可视为已死亡,其解决方案是正确的。处于这种状态的bug要重新得到处理,只能通过转变它的状态为重开(REOPEN)。
[0031] 综上,bug的状态取值有New、Assigned、Resolved、Reopened、Fixed、Closed这几种。
[0032] Resolution(解决方案),表明对bug是如何处理的,下面是其取值以及各个取值的说明和转换可能性。
[0033] Fixed(已经修复)
[0034] 对这个bug的源代码做了修改,放入代码库并且经过了测试。
[0035] Invalid(无效)
[0036] BUG确认人员认为所描述的问题不是一个BUG,因此该问题也不会被修复。
[0037] Won't fix(不做修改)
[0038] 所描述的问题是一个bug,但由于某种原因不会进行修改。
[0039] Later(以后修复)
[0040] 所描述的问题是一个bug,但当前版本不会修改这个bug。
[0041] Remind(延时提醒)
[0042] 所描述的问题是一个bug,但尚未确定是否在当前版本进行修改。
[0043] Duplicate(重复)
[0044] 所描述的问题是一个已存在bug。必须使用一个已存在的bug id对该bug进行标志。
[0045] Works for me(不可重现)
[0046] 无法根据描述对bug进行重现,阅读代码也无法解释所描述的问题。如果以后能够提供更多的细节再做处理,现在暂时存档。
[0047] 现有技术中,基于缺陷报告文本进行缺陷定位的模型忽略了同一模中的文件相关性强的特点,丢失掉各级模块的关联信息,忽略了源文件路径的特点,因此根据缺陷报告的文本内容进行缺陷源代码文件定位准确度不高,难以满足用户需要的效果。

发明内容

[0048] 发明目的:针对现有技术中存在的问题与不足,本发明提供一种基于缺陷报告的缺陷代码路径定位方法,利用BugZilla系统中缺陷状态为Verified且解决状态为Fixed的缺陷报告,通过对缺陷报告进行文本提取,建立需要修复文件的所在路径与缺陷报告文本之间的联系。目前常用于处理文本的主要是循环神经网络(RNN)模型,因为它能建模文字的先后顺序,保留语义。编解码(Encoder-Decoder)模型是对RNN模型的较好扩展,它能解决输入输出数据都是序列的问题。由于缺陷报告包括了文本(文字序列),同时对应着修复文件路径树的深度优先遍历序列,因此本发明基于编解码(Encoder-Decoder)模型,并进行拓展,构成BRSP模型。
[0049] 在缺陷报告中,因为需要修复的文件名是一串由“.”拼接而成的词语,这些词语代表了此文件代码所在项目的各级模块名。在大型开源项目中,模块命名需要符合相应项目命名规范,反映其对应模块的用途。根据这样的模块层级关系,我们可以从项目源文件路径树的根节点出发,依次找到待修复文件所属的各个模块,最终将途经的各个节点(节点即对应模块)组织成一棵文件路径树。
[0050] 技术方案:一种基于缺陷报告的缺陷代码路径定位方法,使用基于深度学习的方法从已修复的缺陷报告和对应修复代码路径中学习出文本与代码之间的关联关系,从而对新缺陷报告进行关联缺陷代码文件路径的预测。在缺陷代码路径定位模型的基础上,利用源文件路径存在层级结构的特性,添加了带有约束规则的路径树预测算法,有效提高了基于缺陷报告的缺陷源代码路径定位的准确度。
[0051] 具体包括如下部分:
[0052] 1)基于缺陷报告的缺陷代码路径定位模型BRSP的学习方法;
[0053] 2)基于规则约束的路径树预测算法。
[0054] 1)基于缺陷报告的缺陷代码路径定位模型BRSP的学习方法
[0055] 项目源文件的路径往往由多个模块构成。相对于传统的基于缺陷报告与源文件相似度比较的模型,本发明有效表示出相同模块下的文件具有强相关性并且路径每深入一层,缺陷文件所在范围即会有所缩小的特征,因此可以显著提高缺陷预测的准确度。
[0056] 将缺陷源代码文件的路径模块作为模型的预测标签;缺陷报告d可以表示成一个单词序列 其中wi表示为文档中第i个单词,Nd表示缺陷报告d的单词序列单词的总数;所有缺陷报告的所有词语构成词汇集V;将单词序列Wd当做模型的输入,模型最终输出序列化的缺陷代码文件路径树。
[0057] 模型包含嵌入(embedding)层和编码器(encoder)以及解码器(decoder),而编码器(encoder)和解码器(decoder)分别包含三层循环神经网络层(RNN)。输入模型的单词序列Wd首先经过嵌入(embedding)层,对序列中的每个单词wi执行嵌入(embedding)操作,即首先获得每个单词的独热(one-hot)向量表示(独热向量是一个形状为1×Nd的向量,当前单词所在位置为1,其余位置均为0),然后与查找(look-up)矩阵(形状为Nd×dim的矩阵)相乘,最终得到一个形状为1×dim(dim为embedding大小)的向量作为当前单词的嵌入(embedding)表示。此时包含Nd个单词的单词序列Wd变成了一个Nd×dim的矩阵x,接着将该矩阵继续传递给模型的剩余部分。
[0058] 使用三层循环神经网络RNN构建模型的编码器(encoder)部分获取文本信息,我们使用RNN的其中一种变体:控循环单元GRU,该模型的公式如下:
[0059] zt=σ(Wz·[ht-1,xt])
[0060] 其中ht-1为GRU的上一时刻隐状态,而xt是当前时刻输入模型的单词,Wz为可训练参数,σ是sigmoid函数,公式为:
[0061] rt=σ(Wr·[ht-1,xt])
[0062] 符号含义同上,
[0063]
[0064] 其中
[0065]
[0066] 最终得到了当前隐状态ht。
[0067] 经过同样的过程得到解码器(decoder)部分的当前隐状态st,然后使用注意机制得到新的特征向量,公式如下:
[0068]
[0069] 其中 W1和W2均为深度神经网络模型中注意力机制模块的可训练参数,[0070] αij=softmax(uij)
[0071] Softmax公式为:
[0072]
[0073] hj和si分别是当前时刻编码器(encoder)和解码器(decoder)部分的隐状态,αij定了当前编码器(encoder)的隐状态hj的各部分对计算新的特征向量的贡献大小。
[0074] 最终得到的s′i作为当前文本的向量表示。
[0075] 然后将该向量输入softmax层,得到所有文件路径树节点的概率,并输出所有节点按照概率从大到小排列的列表。
[0076] 2)基于规则约束的路径树预测算法
[0077] 多数软件项目存在模块的层级关系,这种模块的层级关系直观表现在源文件的路径中。如源文件:org.eclipse.jdt.internal.compiler.problem.ProblemReporter.java,在该路径中“.”分割的就是各个层级的模块。而项目中的每个源文件都具有这样的特征。将每个文件路径中的所有模块抽取出来作为树的节点,并标记节点之间的父子关系,汇集项目中所有源文件的节点之后即可构成一棵文件路径树。这棵树上的每一个叶子节点代表项目的一个源文件,如上述例子中的ProblemReporter.java文件。
[0078] 每个源文件对应一系列模块层级关系,而一份缺陷报告往往对应多个源文件。同样地,将每个文件路径中的所有模块抽取出来作为树的节点,并标记节点之间的父子关系,汇集缺陷报告对应的所有源文件的节点后组织成当前缺陷报告对应的缺陷文件树,该文件路径树即为预测目标。然而树形结构很难进行表达,因此为方便预测,使用预处理模块将路径树串行化。具体使用深度优先搜索方法从根节点开始,遍历缺陷文件路径树上所有节点,最后得到遍历结果,即该树上所有节点构成的序列。
[0079] 传统Encoder-Decoder模型往往使用Beam-Search算法进行标签预测。具体方式为:使用decoder部分进行第一次预测后得到所有节点根据概率从大到小排列的序列,然后保留前k个节点进行下一轮预测,如设k为3,则第一次留下3个节点进行第二次预测,第二次预测时依次根据第一次预测得到的每个节点再获取3个节点,则此时得到9条路径。以此类推,直到达到最大深度n即止,最终得到3n条路径。然后根据每条路径的概率进行排序,选出概率最高的路径树作为预测结果。节点概率与路径概率之间关系如下:
[0080]
[0081] 其中p(nodej)为当前节点的概率,n为路径树长度,而p(path)为整个路径树的概率。
[0082] 然而若使用该算法直接进行串行化的缺陷文件路径树的预测可能会预测出不符合实际父子节点约束的结果。为了解决该问题,对Beam-Search算法进行优化。
[0083] 优化方法如下:在每次生成k个节点的同时,判断这k个节点是否与上层节点满足实际父子关系,若符合则继续进行路径生成,若不符合则结束当前路径的生长,也就是进行一次剪枝操作。
[0084] 然而简单地通过剪枝的方法进行规则约束可能导致模型预测出的路径树节点太少,从而对开发人员不具有指导意义。为了让路径树预测算法预测出符合约束规则同时长度合适的路径树,我们在上述剪枝方法的基础上进一步修正路径树概率计算公式,在原有公式之后加上一项惩罚项,使得路径树预测算法能更多地关注长度合适的路径树。改进后的公式如下:
[0085]
[0086] 由于惩罚项的影响,长度越长的路径树的概率越高。但是根据指数函数的特点,惩罚项数值会随着路径树长度的增长而缓慢增长,因此不存在算法偏爱过长的路径树的险。
[0087] 综合上述两项优化措施,最终得到基于规则约束的路径树预测算法。使用该算法可以预测出符合约束规则同时长度合适的路径树,从而进一步提高预测准确度。
[0088] 大型的开源软件目前都是用Bugzilla,Jira,GNATS,trac等缺陷跟踪管理系统来跟踪管理项目的缺陷。在如Eclipse这样的大型软件工程项目中,每天都会收到大量新的缺陷报告,解决这些缺陷报告会给开发人员带来严重的负担。本发明根据缺陷跟踪管理系统中已经解决的缺陷报告进行文本分析,获取缺陷报告与缺陷位置的关系,并以此分析未解决的缺陷报告,为开发人员提供新的缺陷报告可能的缺陷位置,从而形成一套基于BRSP路径生成技术的缺陷源代码文件路径定位系统。在Eclipse项目BugZilla数据集上的实验表明,BRSP模型相对于传统的缺陷定位模型具有更高的预测准确度。附图说明
[0089] 图1为本发明基于缺陷报告的缺陷代码路径定位方法流程图
[0090] 图2为本发明基于缺陷报告的缺陷代码路径定位模型BRSP内部结构图。

具体实施方式

[0091] 下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
[0092] 如图1所示,基于缺陷报告的缺陷代码路径定位方法,具体包括如下部分:
[0093] 1)学习基于缺陷报告的缺陷代码路径定位模型BRSP;
[0094] 2)基于规则约束的路径树预测算法。
[0095] 以Eclipse项目中公布在BugZilla系统的一份缺陷报告为例,缺陷报告中的文本信息包括summary和descriDtion两项,fixedfiles表示为了修复该缺陷报告描述的软件缺陷修改的全部源文件。传统的基于信息检索的缺陷定位模型直接将相关的缺陷文件看成一个个标签,根据缺陷报告文本与缺陷文件源代码的相似度给出疑似标签(即缺陷源文件)的排序。将源文件路径包含的所有模块抽取出来可以构成一棵源文件的路径树,并且观察到在同一模块下的源文件往往有强相关性。然而传统方法忽略了这一信息,直接预测标签(缺陷源文件),采用这种方法一旦模型没有预测准确,很有可能会预测到与缺陷源文件路径相差较远的其他文件,此时反而会对开发人员造成极大的误导。
[0096] 正是基于缺陷源文件的这一特性,本发明提出了缺陷代码路径树生成模型BRSP,同时通过预处理模块抽取出源文件的路径树并对其串行化,最终使用基于规则约束的路径树预测模块预测出待修复文件的路径树,从而实现了一种基于缺陷报告的缺陷代码路径定位系统。
[0097] 基于缺陷报告的缺陷代码路径定位模型BRSP如图2所示。将缺陷源代码文件的路径模块作为模型的预测标签;缺陷报告d可以表示成一个单词序列其中wi表示为文档中第i个单词;所有缺陷报告的所有词语构成词汇集V;将单词序列Wd当做模型的输入,模型最终输出序列化的缺陷代码文件路径树。
[0098] 模型包含嵌入(embedding)层和编码器(encoder)以及解码器(decoder),而编码器(encoder)和解码器(decoder)分别包含三层循环神经网络层(RNN)。输入模型的单词序列Wd首先经过嵌入(embedding)层,对序列中的每个单词wi执行嵌入(embedding)操作,即首先获得每个单词的独热(one-hot)向量表示(独热向量是一个形状为1×Nd的向量,当前单词所在位置为1,其余位置均为0),然后与查找(look-up)矩阵(形状为Nd×dim的矩阵)相乘,最终得到一个形状为1×dim(dim为embedding大小)的向量作为当前单词的嵌入(embedding)表示。此时包含Nd个单词的单词序列Wd变成了一个Nd×dim的矩阵x,接着将该矩阵继续传递给模型的剩余部分。
[0099] 使用三层循环神经网络RNN构建模型的编码器(encoder)获取文本信息,我们使用RNN的其中一种变体:门控循环单元GRU,该模型的公式如下:
[0100] zt=σ(Wz·[ht-1,xt])
[0101] 其中ht-1为GRU的上一时刻隐状态,而xt是当前时刻输入模型的单词,Wz为可训练参数,σ是sigmoid函数,公式为:
[0102] rt=σ(Wr·[ht-1,xt])
[0103] 符号含义同上,
[0104]
[0105] 其中
[0106]
[0107] 最终得到了当前隐状态ht。
[0108] 经过同样的过程得到解码器(decoder)的当前隐状态st,然后使用注意力机制得到新的特征向量,公式如下:
[0109]
[0110] 其中 W1和W2均为深度神经网络模型中注意力机制模块的可训练参数,[0111] αij=softmax(uij)
[0112] Softmax公式为:
[0113]
[0114] hj和si分别是当前时刻编码器(encoder)和解码器(decoder)部分的隐状态,α决定了当前编码器(encoder)的隐状态hj的各部分对计算新的特征向量的贡献大小。
[0115] 最终得到的s′i作为当前文本的向量表示。
[0116] 然后将该向量输入softmax层,得到所有文件路径树节点的概率,并输出所有节点按照概率从大到小排列的列表。
[0117] 整个模型的损失函数为:
[0118]
[0119] 其中,T是训练数据集,t和z分别是缺陷报告的文本内容以及该缺陷报告对应的标签集合,zi是当前预测的标签,P(zi|t)代表在输入当前缺陷报告文本的前提下预测出标签zi的概率。
[0120] 在训练过程中,模型使用机器学习领域常用的反向传播算法进行参数推断。
[0121] 通过上述训练过程可以得到训练好的模型,然后使用该模型进行基于缺陷报告的缺陷代码路径树预测。
[0122] 多数软件项目存在模块的层级关系,这种模块的层级关系直观表现在源文件的路径中。如源文件:org.eclipse.jdt.internal.compiler.problem.ProblemReporter.java,在该路径中“.”分割的就是各个层级的模块。而项目中的每个源文件都具有这样的特征。将每个文件路径中的所有模块抽取出来作为树的节点,并标记节点之间的父子关系,汇集项目中所有源文件的节点之后即可构成一棵文件路径树。这棵树上的每一个叶子节点代表项目的一个源文件,如上述例子中的ProblemReporterjava文件。
[0123] 每个源文件对应一系列模块层级关系,而一份缺陷报告往往对应多个源文件。将缺陷报告对应的所有源文件组织成一棵缺陷文件路径树,该文件路径树即为预测目标。然而树形结构很难进行表达,因此为方便预测,使用预处理模块将路径树串行化。具体使用深度优先搜索方法从根节点开始,遍历缺陷文件路径树上所有节点,最后得到遍历结果,即该树上所有节点构成的序列。
[0124] 综合以上描述,在预测阶段模型的输入数据为待修复缺陷报告(和训练阶段相同,将缺陷报告d表示成单词序列 然后模型使用基于规则约束的路径树预测模块预测出对应的串行化的缺陷文件路径树。下文描述基于规则约束的路径树预测模块的预测原理。
[0125] 传统编解码器(Encoder-Decoder)模型往往使用Beam-Search算法进行标签预测。具体方式为:使用解码器(decoder)进行第一次预测后得到所有节点根据概率从大到小排列的序列,然后保留前k个节点进行下一轮预测,如设k为3,则第一次留下3个节点进行第二次预测,第二次预测时依次根据第一次预测得到的每个节点再获取3个节点,则此时得到9条路径。以此类推,直到达到最大深度n即止,最终得到3n条路径。然后根据每条路径的概率进行排序,选出概率最高的路径树作为预测结果。节点概率与路径概率之间关系如下:
[0126]
[0127] 其中p(nodej)为当前节点的概率,n为路径树长度,而p(path)为整个路径树的概率。
[0128] 然而若使用该算法直接进行串行化的缺陷文件路径树的预测可能会预测出不符合实际父子节点约束的结果。为了解决该问题,对Beam-Search算法进行优化。
[0129] 优化方法如下:在每次生成三个节点的同时,判断这三个节点是否与上层节点满足实际父子关系,若符合则继续进行路径生成,若不符合则结束当前路径的生长,也就是进行一次剪枝操作。
[0130] 然而简单地通过剪枝的方法进行规则约束可能导致模型预测出的路径树节点太少,从而对开发人员不具有指导意义。为了让路径树预测算法预测出符合约束规则同时长度合适的路径树,我们在上述剪枝方法的基础上进一步修正路径树概率计算公式,在原有公式之后加上一项惩罚项,使得路径树预测算法能更多地关注长度合适的路径树。改进后的公式如下:
[0131]
[0132] 由于惩罚项的影响,长度越长的路径树的概率越高。但是根据指数函数的特点,惩罚项数值会随着路径树长度的增长而缓慢增长,因此不存在算法偏爱过长的路径树的风险。
[0133] 综合上述两项优化措施,最终得到基于规则约束的路径树预测算法。使用该算法可以预测出符合约束规则同时长度合适的路径树,从而进一步提高预测准确度。
[0134] 根据算法计算出多棵可能的路径树及其概率,然后选取概率最高的路径树作为基于规则约束的路径树预测模块的预测结果。该预测结果就可以为软件项目维护者提供针对当前缺陷报告的缺陷源代码定位信息。
[0135] 实例一:BRSP模型实现对Eclipse项目缺陷报告预测
[0136] 1、输入输出数据说明
[0137] 我们把本发明的方法运用于Eclipse项目缺陷报告数据中,输入是Eclipse项目BugZilla上已解决的缺陷报告文本,统计情况如表1所示:数据集有12990条缺陷报告,每条缺陷报告都有相应的串行化文件路径树表示需要修复的文件。
[0138] 输出是在此数据集上对本发明BRSP模型进行的量化评测。
[0139] 2、数据预处理
[0140] 对于缺陷报告文本,我们去除缺陷报告中的所有标点符号同时对报告中的单词执行词干化操作。再统计所有单词在整个数据集中出现的次数,去掉出现次数极少的单词。
[0141] 对于项目源文件,我们执行文件路径树的抽取与串行化操作。
[0142] 如前所述,多数软件项目存在模块的层级关系,这种模块的层级关系直观表现在源文件的路径中。因此我们将每个文件路径中的所有模块抽取出来作为树的节点,并标记节点之间的父子关系,汇集项目中所有源文件的节点之后构成该项目的文件路径树。
[0143] 然而,在数据集中各个文件出现次数不同,从而导致文件路径树上的节点出现次数不同,并且经常出现的一种情况是同一级节点中一些节点出现次数非常多,而另外的一些节点很少出现,这样就会导致某些节点所占权重非常高,而剩下的节点占极小权重。这种情况会导致模型在训练的时候更多地关注权重高的节点而忽略权重低的节点。我们称该现象为文件路径树的不平衡现象。
[0144] 为了使得文件路径树较为平衡,我们需要对其进行树平衡操作。我们首先找到所占权重极小的叶子节点,将其删除,然后进行回溯,查看被删节点的父节点,若父节点所在的树的层次较为平衡则结束操作,否则删除该父节点,然后继续回溯,直到观察到整棵文件路径树较为平衡为止。
[0145] 每个源文件对应一系列模块层级关系,而一份缺陷报告往往对应多个源文件。同样地,将每个文件路径中的所有模块抽取出来作为树的节点,并标记节点之间的父子关系,汇集缺陷报告对应的所有源文件的节点后组织成当前缺陷报告对应的缺陷文件树,该文件树即为预测目标。然而树形结构很难进行表达,因此为方便预测,使用文件路径树串行化方法将文件树串行化。具体使用深度优先搜索方法从根节点开始,遍历缺陷文件树上所有节点,最后得到遍历结果,即该树上所有节点构成的序列。
[0146] 3、模型学习与参数推断
[0147] 获取预处理后得到的训练数据,依据前文所述的模型训练过程,学习得到BRSP模型所需的所有参数,根据参数和测试集缺陷报告文本得到疑似缺陷文件路径树。
[0148] 4、输出结果
[0149] 我们比较了经典K近邻(KNN)模型和本发明BRSP模型的缺陷源代码文件路径定位的准确率和召回率。表2展现了此次实验具体的准确率和召回率数据,可以看到,BRSP相比传统的K近邻(KNN)方法,准确率召回率均有了一定的提高。证明了本发明准确地依据缺陷报告文本特征,有效地预测了需要修复的文件位置。且证明了基于缺陷报告的缺陷代码路径定位系统在现实中能被合理地应用。
[0150] 表1实例的数据统计情况
[0151]缺陷报告数目 12990
修复文件总数 6294
缺陷报告集合词语总数 34454
源文件路径树节点数 50
[0152] 表2实例准确率和召回率的对比
[0153]方法 准确率 召回率
KNN 0.330 0.383
BRSP 0.637 0.491
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈