一种基于缺陷报告文本主题分析的缺陷定位方法与流程

文档序号:12719413阅读:342来源:国知局
一种基于缺陷报告文本主题分析的缺陷定位方法与流程

本发明涉及一种基于缺陷报告文本主题分析的缺陷定位方法,利用已解决缺陷报告中的文本内容,实现未解决缺陷报告缺陷源代码文件的定位。在主题分析技术的基础上,利用标签词语子串频繁出现在相应缺陷报告的特性,添加了词语生成的途径,有效提高了基于缺陷报告缺陷源代码文件定位的准确度。



背景技术:

在大型开源软件开发过程中,广泛使用Bugzilla,Jira,GNATS,trac等缺陷跟踪管理系统来跟踪管理项目的缺陷。

以Eclipse项目中的缺陷跟踪管理系统Bugzilla为例,在对整个项目进行开发、测试和维护的过程中,当软件开发参与者发现了项目中的Bug时,可以登陆BugZilla系统提交一份缺陷报告。在BugZilla中,每个缺陷报告都有Status、Resolution这两个关键属性表示其状态。

其中,Status表示bug的一般状态,下面是其取值和各个取值的说明以及转换的可能性。

Unconfirmed(未证实)

表明bug是最近加入到数据库,没有人正式这个bug的存在。拥有“确定/取消Bug"的用户可以对转变bug的状态为:

1.确认这个bug,改变他的状态为新(NEW)

2.解决这个bug,标志为已解决(RESOLVED)

New(新提交的)

这个bug已经分发给某位开发人员处理。这个状态的bug可以转变为以下状态:

1.接受该bug,状态转变为指派(ASSIGNED)

2.指派给别的开发人员,状态维持为新(NEW)

被解决,状态转变为被解决(RESOLVED)

Assigned(已经指派)

这个bug尚未解决,但已经被指派给正确的人进行解决。这个状态的bug可能转换为以下状态:

1.指派给别的开发人员,状态转变为新(NEW)

2.被解决,状态转变为被解决(RESOLVED)

Reopened(重新打开)

这个bug曾经被解决了,但是解决方案是不正确的。例如,一个处于对我有效(WORKSFORME)的bug,当获得了更多的信息并且能够被再现时,将转变为重开(REOPENED)状态。这个状态的bug只能转换为以下状态:

1.指派(ASSIGNED)给某名开发人员

2.被解决,状态转变为被解决(RESOLVED)

Resolved(已经解决)

已经确定了一种解决方案,这种方案正在等待QA的确认。此状态的bug可转化为以下状态:

1.重新开放,转变为重开放(REOPENED)

2.QA确认后,转变为已验证(VERIFIED)

3.QA确认后,转变为关闭(CLOSE)

Verified(已经证实)

QA已经确认对于这个bug的解决方案是成功的。处于这种状态的bug当他们所存在的产品正式发布之后,状态将转变为关闭(CLOSE)。

Closed(已关闭)

bug处于这种状态可视为已死亡,其解决方案是正确的。出于这种状态的bug要重新得到处理,只能通过转变他的状态为重开(REOPEN)。有New、Assigned、Resolved、Reopened、Fixed、Closed这几种状态。

Resolution(解决方案),表明对bug是如何处理的,下面是其取值以及各个取值的说明和转换可能性。

Fixed(已经修复)

对这个bug的源代码做了修改,放入代码库并且经过了测试。

Invalid(无效)

BUG确认人员认为所描述的问题不是一个BUG,因此也不会被修复。

Won't fix(不做修改)

所描述的问题是一个bug,但由于某种原因不会进行修改。

Later(以后修复)

所描述的问题是一个bug,但当前版本不会修改这个bug。

Remind(延时提醒)

所描述的问题是一个bug,但尚未确定是否在当前版本进行修改。

Duplicate(重复)

所描述的问题是一个已存在bug。必须使用一个已存在的bug id对该bug进行标志。

Works for me(不可重现)

无法根据描述对bug进行重现,阅读代码也无法解释所描述的问题。如果以后能够提供更多的细节,再做处理,现在暂时存档。

本发明利用BugZilla系统中缺陷状态为Variefied且解决状态为Fiexed的缺陷报告,通过对缺陷报告进行主题分析,建立需要修复文件与缺陷报告文本之间的联系。目前常见的主题分析技术包括隐含语义分析(LSA)和隐含狄利克雷分布(LDA)模型等。LDA模型是无监督模型,为解决带监督问题,还有多个扩展模型如Slda,Labeled-LDA等。由于缺陷报告包括了文本和需要修复的文件,同时对应修复文件可能有多个,因此本发明基于Labeled-LDA模型,并进行拓展,构成L2SS模型。

在缺陷报告中,因为需要修复的文件名是一串词语由“.”拼接而成,这些词语代表了此文件代码所在项目的各级模块名。在大型开源项目中,模块命名需要符合相应项目命名规范,反映其对应模块的用途。在缺陷报告中,经常会提到缺陷源代码文件所对应的各级模块名以及表示这些模块用途的词语,而这些词语又对应是相应缺陷源代码文件名的子串,具有很强的相关信息。

之前基于缺陷报告文本主题分析进行缺陷定位的模型中没有对缺陷源代码文件名子串词进行特殊处理,丢失掉这些强相关词语的重要信息,难以满足我们需要的效果。



技术实现要素:

传统文本主题分析技术忽略了缺陷报告的特点,因此根据缺陷报告的文本内容进行缺陷源代码文件定位准确度不高。L2SS模型通过增加词语的生成模式,有效针对缺陷报告文本特征,提高了对缺陷源代码文件定位的准确度。本发明基于Labeled-LDA模型,进一步添加了标签子串词生成途径,提出了基于标签生成子串的主题模型,并给出了一种基于此主题模型的缺陷定位方法,有效的提高了缺陷定位的准确率和召回率。

技术方案:一种基于缺陷报告文本主题分析的缺陷定位方法,在Labeled-LDA的基础上提出了标签生成子串的文本主题模型L2SS,同时基于CVB0方法给出了L2SS模型的参数估计,最终根据模型参数来得出新的缺陷文本对需要修复文件的疑似度排序,从而实现了一种基于文本主题分析的缺陷定位系统。

具体包括如下部分:

1)基于标签生成子串的文本主题模型-L2SS;

2)基于CVB0的L2SS模型求解及缺陷报告主题推断方法。

1)基于标签生成子串的文本主题模型-L2SS

将缺陷源代码文件对应的模块名作为Labeled-LDA的标签,直接对应LDA模型中的主题。在L2SS模型中,由主题生成词的过程存在两种可能,一种可能是按LDA模型由主题抽取词语,另一种可能是直接生成主题词的子串。在缺陷报告文档中,会频繁出现缺陷所在模块的模块名以及其子串。相对于传统的LLDA模型,本发明有效表示出缺陷报告的频繁出现标签词及其子串的特征,因此可以显著提高缺陷预测的准确度。

缺陷报告d可以表示成一个词袋其中wi表示为文档中第i个单词。所有缺陷报告的所有词语构成词汇集V。所有缺陷报告文本主题用对应的标签l表示。每个主题l都存在一个先验分布为贝塔分布的二项分布βl~Beta(·|δ),每个主题都有两种途径生成词语,由二项分布βl抽样选取出来分开关变量κ决定最终选取的生成途径。第一种途径是从词汇集V中根据分布从V中抽取词语,是先验分布为狄利克雷分布的多项分布。第二种途径是从主题l对应标签名的子串集合Sl中根据分布从Sl中抽取词语,是先验分布为狄利克雷分布的多项分布。κ有两种值:1和2,当κ=1时,表示主题l从词汇集V中抽取词语,当κ=2时,表示主题l从标签子串集合Sl中抽取词语。每篇缺陷报告d对于所有主题l还有一个先验分布为贝塔分布的二项分布是从抽样出开关变量,当时表示文档d不选取此主题,当时表示文档d选取此主题。缺陷报告d在所有的主题中得到先验分布为狄利克雷分布的多项分布θd。对于缺陷报告的每个位置,先由θd抽样选取此位置词语的主题l,再根据l的βl分布抽取开关变量κ的值,若值为1,则根据从词汇表V中抽取词语,若值为2,则根据从主题对应标签名的子串集合SL中抽取词语。

依据此上过程,得到L2SS的概率图模型,同时得到文档每个位置词w和主题z生成的联合概率:

其中α表示文档对应主题分布的先验分布参数,δ表示主题对应二项分布先验分布参数,η表示主题对应词汇分布的先验分布参数,表示中对应选取词语w的概率,表示中对应选取词语w的概率,β1|l表示βl中对应开关变量选取1的概率,β2|l表示βl中对应开关变量选取2的概率。

2)基于CVB0的L2SS模型求解及缺陷报告主题推断方法

LDA模型参数推断常采用吉布斯采样的方法,即用p(zi=l|z-i,w;α,η,δ)来对各个词语的主题进行采样,不断迭代直至收敛。而吉布斯采样收敛速度较慢,可采用CVB0方法进行参数推断。在LLDA模型中,CVB0方法为文档中的每个位置的词语赋予一个势函数向量l代表标签l,d代表文档的编号,i代表词在文档中的位置。γl|d,i的值就等于p(zi=l|z-i,w;α,η,δ),对于文档d中没有出现的标签l,就将γl|d,i的值定为0,在L2SS模型中,因为词可能有两种生成方式,因此L2SS模型中,可由标签子串生成的词语的分成两个势函数向量

表示由LLDA生成词语的方式下选中标签l的概率,表示由标签生成子串的方式下选中标签l的概率,若此处单词不为l的子串那么

实验表明,CVB0方法的速度明显快于吉布斯采样,同时结果也更稳定。

由联合概率可以推得L2SS模型的后验概率(迭代更新规则)计算公式如下:

其中V表示词集合,Vl表示标签l所对应的子串词集合,

Ndl·表示文档d的所有词对中取样到主题z的总次数,

表示主题为标签l不通过子串生成词语w的总数目,

表示主题为标签l生成子串词w的总数目,

表示主题为标签l不通过子串生成所有词语的总数目,

表示主题为标签l生成子串词的总数目,

N·l·表示主题为标签l生成所有词语的总数目,

生成模块标签l上的开关分布βl计算公式如下:

生成模块标签l上对于所有词语的分布计算公式如下:

生成模块标签l上对于l子串词的分布计算公式如下:

取样生成文档d对应的主题分布θd计算公式如下:

在得到模型参数Θ,Φ12,B后,对未解决缺陷报告的修改文件疑似度计算公式如下:

其中Θ表示所有文档对应θd的集合,Φ1表示所有主题对应的集合,Φ2表示所有主题对应的集合,Β表示所有主题对应βl的集合,表示中对应选取词语w的概率,表示中对应选取词语w的概率,β1|l表示βl中对应开关变量选取1的概率,β2|l表示βl中对应开关变量选取2的概率。

在当前,大型的开源软件都是用Bugzilla,Jira,GNATS,trac等缺陷跟踪管理系统来跟踪管理项目的缺陷。在如Eclipse这样的大型软件工程中,每天都会接受到大量新的缺陷报告,解决这些缺陷报告会给开发人员带来严重的负担。本发明根据缺陷跟踪管理系统中已经解决的缺陷报告进行文本分析,获取缺陷报告与缺陷位置的关系,并以此分析未解决的缺陷报告,为开发人员提供新的缺陷报告可能的缺陷位置,从而形成一套基于L2SS主题分析技术的缺陷源代码文件定位系统。在Eclipse项目BugZilla数据集上的实验表明,L2SS模型相对于传统的主题模型具有更高的预测准确度。

附图说明

图1基于缺陷报告文本的标签生成子串文本主题模型-L2SS的图模型;

图2缺陷报告样例;

图3缺陷代码预测模型(L2SS)。

具体实施方式

本节结合具体实例,进一步阐明本发明,应理解这些实例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。

技术方案:基于缺陷报告文本主题分析的缺陷定位方法,具体包括如下部分:

1)基于标签生成子串的文本主题模型-L2SS;

2)基于CVB0的L2SS模型求解及缺陷报告主题推断方法;

以Eclipse项目中BugZilla系统中截取的一个缺陷报告为例,如图2所述,其中文本信息包括summary和description两项。在传统的Labeled-LDA模型中,把文本中的每个词的生成过程都看成是相同的,由于词语的数量很大,而且LDA模型采用了狄利克雷分布作为主题-词语分布的先验分布,导致每个主题生成词语的概率都很小。在缺陷报告中,由于标签是需要修复的文件名,因此标签实际上是由项目中的模块名拼接而成。在缺陷报告文本中,为了描述缺陷也往往会含带这些模块名或者模块名中有意义的子串。正是由于这种特性,标签的子串可以看成是一种特殊的词语。在缺陷报告示例中,我们可以看到作为标签的子串IOConcole和PatternMatching出现在文本中。

正是基于缺陷报告的这一特性,本发明在Labeled-LDA的基础上提出了标签生成子串的文本主题模型L2SS,同时基于CVB0方法给出了L2SS模型的参数估计,最终根据模型参数来得出新的缺陷文本对需要修复文件的疑似度排序,从而实现了一种基于文本主题分析的缺陷定位系统。

缺陷报告d可以表示成一个词袋其中wi表示为文档中第i个单词。所有缺陷报告的所有词语构成词汇集V。所有缺陷报告文本主题用对应的标签l表示。每个主题l都存在一个先验分布为贝塔分布的二项分布βl~Beta(·|δ),每个主题都有两种途径生成词语,由二项分布βl抽样选取出来分开关变量κ决定最终选取的生成途径。第一种途径是从词汇集V中根据分布从V中抽取词语,是先验分布为狄利克雷分布的多项分布。第二种途径是从主题l对应标签名的子串集合Sl中根据分布从Sl中抽取词语,是先验分布为狄利克雷分布的多项分布,我们将其先验分布也设为对称狄利克雷分布,参数值与第一种途径的参数值相同。κ有两种值:1和2,当κ=1时,表示主题l从词汇集V中抽取词语,当κ=2时,表示主题l从标签子串集合Sl中抽取词语。每篇缺陷报告d对于所有主题l还有一个先验分布为贝塔分布的二项分布是从抽样出开关变量,当时表示文档d不选取此主题,当时表示文档d选取此主题。缺陷报告d在所有的主题中得到先验分布为狄利克雷分布的多项分布θd

L2SS模型的缺陷报告生成过程如下:

其中Beta表示贝塔分布,Mult表示多项分布,Bernouli表示二项分布,Dir表示狄利克雷分布。

依据以上过程,我们可以在文档某个位置选取词w和主题z的联合概率:

其中表示中对应选取词语w的概率,表示中对应选取词语w的概率,β1|l表示βl中对应开关变量选取1的概率,β2|l表示βl中对应开关变量选取2的概率。

接下来,我们给出L2SS的参数推断方法。L2SS模型的求解目的主要是估算出合理的θdl,的值,我们采用CVB0方法来进行近似推断。CVB0方法是一种现有的基于变分贝叶斯推断方法的简化版本,实际过程类似于传统Gibbs采样方法,但是收敛速度明显快于Gibbs采样方法。由词和主题生成的联合概率可以推得L2SS模型的后验概率(迭代更新规则)计算公式如下:

其中V表示词集合,

Vl表示标签l所对应的子串词集合,

zi表示文档第i个词语的主题,

Ndl·表示文档d的所有词对中取样到主题z的总次数,

表示主题为标签l不通过子串生成词语w的总数目,

表示主题为标签l生成子串词w的总数目,

表示主题为标签l不通过子串生成所有词语的总数目,

表示主题为标签l生成子串词的总数目,

N·l·表示主题为标签l生成所有词语的总数目,

在LLDA模型中,CVB0方法为文档中的每个位置的词语赋予一个势函数向量l代表标签l,d代表文档的编号,i代表词在文档中的位置。γl|d,i的值就等于p(zi=l|z-i,w;α,η,δ),对于文档d中没有出现的标签l,就将γl|d,i的值定为0。而在L2SS模型中,因为标签子串词可能有两种生成方式,因此可由标签子串生成的词语的分两个势函数向量第一个势函数向量中的各分量表示由LLDA模型生成词语的方式下选中标签l的概率,不能由标签生成子串方式生成词的也可以记为第二个势函数向量中的各分量表示由标签生成子串的方式下选中标签l的概率,若此处词不为l的子串,将两向量相加归一化后得可由标签子串词的势函数向量

L2SS模型CVB0方法的基本过程如下:

其中Niter表示迭代次数。

CVB0的实现和Gibbs采样的实现类似,基本思想是固定一个参数,根据剩余变量的条件概率分别替换另一个参数,交替进行。具体采样过程的解释如下:

1.首先为所有文档中的所有词随机分配势函数向量

2.由所有词语的计算Ndl·,N·l·,具体公式如下:

(1)

(2)

(3)

(4)

(5)

(6)

3.对以下操作进行迭代:

遍历所有缺陷报告文本,遍历文本的所有词语,先扣除分配到该词语上的势函数向量值,同时Ndl·,N·l·也作相应的扣除操作,再根据更新若词语属于报告标签的子串,还要根据更新得到更新的势函数向量后重新更新Ndl·,N·l·。势函数向量各分量的更新公式如下:

其中V代表单词总数。

4.迭代完成后就可以计算出模型所需的参数:

(1)模块标签l直接产生子串的概率分布:

(2)模块标签l产生词的概率分布:

(3)模块标签l产生l子串词的概率分布:

(4)文档d对应的各主题概率分布:

为了实现对未解决的缺陷报告进行修复文件预测,本发明也提供了L2SS相应的预测概率公式:

其中Θ表示所有文档对应θd的集合,Φ1表示所有主题对应的集合,Φ2表示所有主题对应的集合,Β表示所有主题对应βl的集合,表示中对应选取词语w的概率,表示中对应选取词语w的概率,β1|l表示βl中对应开关变量选取1的概率,β2|l表示βl中对应开关变量选取2的概率。

根据公式计算出相对于未解决缺陷报告文本各个可能需要修复文件的概率,进行排序,就可以为软件项目维护者提供一个缺陷源代码文件疑似度排序。

实例一:L2SS模型实现对Eclipse项目缺陷报告预测

1、输入输出数据说明

我们把本发明的方法运用于Eclipse项目缺陷报告数据中,输入是Eclipse项目BugZilla上已解决的缺陷报告文本,统计情况如表1所示:数据集有6031条缺陷报告,每条缺陷报告都有相应的标签表示需要修复的文件。

输出是在此数据集上对本发明L2SS主题模型进行10折交叉验证的量化评测。

2、模型学习与参数推断

首先读取所有的缺陷,同时读取一个停词表,此停词表不仅包括了常用英文停词表,也包括了例如java语言关键字这些针对缺陷报告本身的停词。对于每个缺陷报告,用停词列表过滤掉无意义的停词,再统计所有单词在整个数据集中出现的次数,去掉出现次数少于20次的单词和出现次数超过5000次的单词。

依据前文所述的模型学习和推断过程,通过CVB0方法不断迭代,学习得到L2SS模型所需的所有参数,根据参数和测试集缺陷报告文本得到,计算得到相应标签疑似度排名。

3、输出结果

我们比较了经典Labeled-LDA模型和本发明L2SS模型的缺陷源代码文件定位的准确率和召回率。表2展现了此次实验具体的准确率和召回率数据,可以看到,L2SS相比传统的Labeled-LDA方法,准确率召回率均有了一定的提高。证明了本发明准确地依据缺陷报告文本特征,有效地预测了需要修复的文件位置。且证明了基于L2SS主题分析技术的缺陷代码定位系统在现实中能被合理的应用。

表1.实例的数据统计情况

表2实例准确率和召回率的对比

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