1.本发明涉及缺陷报告分类技术,具体涉及融合多元文本信息和报告意图的软件缺陷报告分类方法。
背景技术:2.目前,缺陷修复作为软件工程后期维护阶段的主要活动,对软件质量保障有着重要影响。近年来,随着软件工程行业蓬勃发展,软件系统的架构复杂度及代码的容量达到了让开发人员难以理解和管理的程度,这一趋势导致软件系统在开发过程中不可避免地出现大量缺陷。为了系统可以正常运行,修复这些缺陷是十分必要的。开发人员在修复缺陷时最常用的辅助工具就是缺陷报告。缺陷报告以文本的形式描述软件系统出现的缺陷,其包含id、项目、组件、严重性、报告人、摘要等多个标签,如图1所示。由于报告人的经验知识不同,导致其在缺陷追踪系统中提交报告时可能会打上错误的类别标签。这些不正确的标记会影响开发人员对缺陷的分析与定位,进一步增加缺陷修复的难度。为了减少这种影响,利于修复工作的开展,对缺陷报告进行正确分类是十分必要的。
3.手动对大规模的缺陷报告进行分类不仅耗时耗力,而且容易出现错误。因此,近几年很多研究人员对缺陷报告自动分类进行了探索。其中,有利用文本挖掘技术对缺陷报告进行分类,其证明了通过训练模型将报告自动分为错误和其他类型是有效可行的。有通过结合文本挖掘和数据挖掘技术的混合方法来判断给定的缺陷报告是否为错误,该方法在纯粹使用挖掘文本描述的基础上还考虑了报告的结构化信息(例如报告人和优先级)。有利用机器学习技术将缺陷报告分成严重缺陷和非严重 缺陷。类似的,有提出一种基于信息检索的最近邻解决方案来预测错误报告的严重性标签,他们专注于预测报告的五个严重性级别,即:阻断、严重、主要、轻微和微不足道。除此之外,还有一些学者关注到缺陷报告的质量与数据集的类别不平衡等问题。
4.然而,现有的大量研究在对缺陷报告分类时都没有考虑到报告意图这个因素,这导致他们的方法的性能较低。通过阅读大量开源软件缺陷报告的摘要,发现,摘要文本内容想要表达的意图可分为两种:解释或建议。解释指的是对缺陷进行说明,如某个位置出现错误或错误的原因;建议指的是针对缺陷提出解决方法,如某个问题应该怎么处理。表1给出了四个不同生态系统的软件缺陷报告的真实例子以及它们的意图。
5.表1 带有意图标签的缺陷报告
技术实现要素:6.本发明的主要目的在于提供融合多元文本信息和报告意图的软件缺陷报告分类方法。
7.本发明采用的技术方案是: 融合多元文本信息和报告意图的软件缺陷报告分类方法,包括:软件缺陷报告提交之后,将以csv的文件格式存储摘要、项目、组件、报告人、意图这些信息;通过规范化、标记化、去停用词、词干化这些方法对csv格式的数据进行预处理;使用bert提取报告摘要的文本信息,再利用tf-idf方法提取报告的其它特征,包括报告的意图,进而生成特征矩阵;特征矩阵被归一化后形成训练集,训练集被分别输入到五个分类器中,包括k-nn、nb、lr、svm和rf用于建立分类模型;从五个分类模型中选出性能最好的一个,实现对缺陷报告的分类。
8.进一步地,所述预处理包括:以手动标记的缺陷报告作为实验的基准数据集,数据以csv文件格式输入,对摘要字段执行文本预处理步骤,包括规范化,标记化、去停用词、词干化;其中规范化:它的任务是将数据中的单词字母全部统一为小写;标记化:它的任务是删除数字、符号和标点,使用空格替换标点符号,删除数字;去停用词:它的任务是删除不携带特定语境相关信息的常用词,从而提高模型的分类性能;词干化:它的任务是去掉单词的词缀,提取主干部分以减少文本数据的冗余。
9.更进一步地,所述提取报告的其它特征包括:在预处理步骤之后,使用bert提取摘要的文本特征;将bert模型倒数第二层的输出作为特征分数。对于除摘要外的其他字段,即项目、组件、报告人、严重性和意图,使用tf-idf算法计算分数;将文本特征分数和频率特征分数拼接融合生成特征矩阵,并进行归一化处理。
10.更进一步地,使用的分类器包括:将提取出的特征以8:2划分训练集与测试集,并将训练集分别输入到五个分类器中进行学习,最后使用训练好的分类模型将测试集的缺陷报告分为错误和非错误两种类型;其中,五个分类器为k-nn、nb、svm、lr和rf。
11.本发明的优点:本发明的方法将文本挖掘、自然语言处理和机器学习技术相结合。本发明专注于将报告分为错误与非错误。为了提高分类的准确性,引入了报告意图这个因素。这是第一个提出考虑报告意图进行缺陷报告分类的工作。首先,收集了来自bugzilla存储库的四个生态系统(包括apache、eclipse、gentoo和mozilla)的2230个缺陷报告,人工为其类型和意图打上标签。然后,基于提出的方法构建了一个缺陷报告自动分类模型,使用手动标注后的缺陷报告数据分别训练五个分类器包括k近邻(k-nearest neighbor,k-nn、朴素贝叶斯
(naive bayes,nb)、逻辑回归(logistics regression,lr)、支持向量机(support vector machine,svm)和随机森林(random forest,rf),采用十折交叉验证方法,根据准确率、精确、召回率、f-measure来衡量其性能。结果表明,分类模型在四个不同生态系统的数据上是有效可行的,其f-measure可以达到87.3%到95.5%。
12.本发明提出一种新的缺陷报告分类方法,在传统基于报告文本内容分类的基础上,额外考虑了报告的意图,即“建议”或“解释”两类。
13.构建了缺陷报告自动分类模型,观察了模型在四个不同系统的数据集上使用bert和tf-idf提取特征以及五个分类器(k-nn、nb、lr、svm、rf)的分类效果。为了衡量模型性能,还计算了准确率、精确率、召回率、和f-measure。
14.构建了一个包含报告意图和类型标签的数据集,研究人员可以使用它来进一步探索缺陷报告自动分类。
15.除了上面所描述的目的、特征和优点之外,本发明还有其它的目的、特征和优点。下面将参照图,对本发明作进一步详细的说明。
附图说明
16.构成本技术的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
17.图1是开放存储库中的缺陷报告图。
18.图2 是本发明的融合多元文本信息和报告意图的软件缺陷报告分类方法框架图;图3是本发明的融合文本和频率以及意图特征在分类器上的第一性能图;图4是本发明的融合文本和频率以及意图特征在分类器上的第二性能图;图5是本发明的融合文本和频率以及意图特征在分类器上的第三性能图;图6是本发明的融合文本和频率以及意图特征在分类器上的第四性能图;图7是本发明的方法在分类器k-nn上的性能图;图8是本发明的方法在分类器nb上的性能图;图9是本发明的方法在分类器lr上的性能图;图10是本发明的方法在分类器svm上的性能图;图11是本发明的方法在分类器rf上的性能图。
具体实施方式
19.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
20.本发明提出的方法框架如图2所示。该框架同时考虑了缺陷报告的文本信息以及报告的意图。首先,软件缺陷报告提交之后,该方法将以csv的文件格式存储摘要、项目、组件、报告人、意图等信息;然后,该方法通过规范化、标记化、去停用词、词干化等方法对csv格式的数据进行预处理;在此基础上,使用bert提取报告摘要的文本信息,再利用tf-idf方法提取报告的其它特征,包括报告的意图,进而生成特征矩阵。接着,特征矩阵被归一化后形成训练集,训练集被分别输入到五个分类器中(包括k-nn、nb、lr、svm和rf)用于建立分类
模型。最后,从5个分类模型中选出性能最好的一个,实现对缺陷报告的分类。
21.预处理本实验以手动标记的缺陷报告作为实验的基准数据集。数据以csv文件格式输入,对摘要字段执行文本预处理步骤,包括规范化,标记化、去停用词、词干化。
22.1)规范化:它的任务是将数据中的单词字母全部统一为小写。
23.2)标记化:它的任务是删除数字、符号和标点。本实验使用空格替换标点符号,删除数字。
24.3)去停用词:它的任务是删除不携带特定语境相关信息的常用词,从而提高模型的分类性能。
25.4)词干化:它的任务是去掉单词的词缀,提取主干部分以减少文本数据的冗余。
26.特征提取在预处理步骤之后,我们使用bert提取摘要的文本特征。bert模型是由google提出的一种预训练模型,它可以学习动态的上下文词向量,更全面的捕捉文本的词意、句意和词位置特征。本实验将bert模型倒数第二层的输出作为特征分数。对于除摘要外的其他字段(即项目、组件、报告人、严重性和意图),使用tf-idf算法计算分数。tf-idf算法能够给出该字段在文档中的重要性度量,有助于增加模型的类别区分能力。最后将文本特征分数和频率特征分数拼接融合生成特征矩阵,并进行归一化处理。
27.分类器为了找到最适合提出方法的分类器,将提取的特征分别输入到五个分类器中进行
训练,并观察了每个分类器的性能。这些分类器包括k-nn、nb、lr、svm和rf。
28.k-nearest neighbork近邻是一种基于距离的有监督分类算法,常用于数据挖掘领域。其核心思想是:如果一个样本在特征空间中最相邻的k个样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别中样本的特性。也就是说,对于给定的测试样本和基于某种度量距离的方式,通过最靠近的k个训练样本来预测当前样本的分类结果。
29.假定存在训练数据集,其中为样本的特征向量,为样本的类别,。根据选定的距离度量,在训练集中找出与的k个最相邻的点,涵盖这k个点的邻域。根据度量样本间相似度的指标将每一个未知类别样本的最近的k个已知样本搜寻出来形成一个簇,在邻域中使用投票法对搜寻出来的已知样本进行投票,即选择 k 个样本中出现次数最多的标记类别决定的类别:(1)其中。为指示函数,当时,为1,否则为0。
30.naive bayes朴素贝叶斯分类器是一种基于贝叶斯定理的分类技术。它要求用于分类的每个特征相互独立且不互相影响,核心思想是计算每个样本的类别概率,以概率值最大的类别作为样本的最终分类。假设存在一个训练数据集,为了计算样本分类为的概率,由贝叶斯定理得:(2)其中,和分别代表类别和样本的先验概率。代表种类是样本的可能性,而代表样本为类别的可能性。通常,在处理分类问题时,样本包含多个特征,可表示为。当各特征相互独立时,由(2)可知:(3)将和看作常量,简化公式(3)后,可以得出:(4)其中,为数据的特征,为样本的分类结果。在实验中,为向量表示的缺陷报
告特征,的结果有两种,包括缺陷和non-缺陷。
31.support vector machine支持向量机一种基于统计学习vc维(vc dimension)和结构风险最小(structural risk minimization)理论的分类器。它根据有限的信息在分类能力(任意样本无错误分类)和模型复杂性(特定样本的分类准确性)之间寻找平衡,目的在于使分类器获得最好的泛化能力(generalization ability)。假设存在一个线性样本集,,是类别标号且,维空间中的线性判别函数为:(5)如果线性分类线能够将两类样本准确分开,则应当满足如下条件:(6)(7)简化(6)和(7)可得:(8)此时分类间隔等于。在满足条件的情况下,需要找到的最小值,应用lagrange 乘子并满足 kkt 条件(kuhn-tucker conditions):(9)最终得到最优分类函数:(10)其中为确定最优超平面的参数,为两个向量的内积。
32.logistic regression逻辑回归又称logistic回归分析,是一种广义的线性回归分类模型,常用于数挖掘领域。逻辑回归从本质来说属于二分类问题,它的因变量有两个取值{0, 1}。多元逻辑回归分类器的公式如下:(11)其中,是描述数据特征的向量,是逻辑回归曲线上的值。为了实现分类,还需要设置一个阈值。例如,模型中阈值取0.5,表示从缺陷报告中提取出的文本特征和频率特征。当时,报告被分类为缺陷;当时,报告被分类为non-缺陷。
33.random forest
随机森林是一种基于集成学习方法的分类算法,其基本单元是决策树。它的名称中有两个关键词,“随机”和“森林”。“森林”指的是分类器由很多个树组成,体现了集成学习的思想。而随机则包含两方面内容:一是针对训练过程,分类器随机选择训练样本集合,每一轮训练所使用的数据均从原始样本集合中有放回地随机抽取,以保证所有样本都有机会被抽到一次。二是针对特征选择,假设原始数据有个特征,从个特征中随机抽取数量的特征作为训练树的候选特征。确定训练样本和特征之后,在每个训练样本上构造决策树,得到预测结果,个样本能得到个预测模型,再使用模型对测试样本进行预测,这样每个样本都能得到个预测结果,最后通过简单的多数投票来决定最终结果。随机森林模型的公式如下:(12)其中,表示单个决策树,表示预测结果,表示示性函数。
34.实验本实验以8:2划分训练数据与测试数据,分别提取了报告摘要字段、其他字段(项目、组件、报告人、严重性)和意图的特征。为了找到最适合提出方法的分类器,依次叠加融合这三种特征,并将它们输入到五个不同的机器学习分类器(包括knn、nb、svm、lr和rf)进行实验。
35.实验解决了以下研究问题:rq1.增加提出的报告意图因素是否能提高缺陷报告分类的准确性rq2.提出的方法在五个不同分类器上的性能表现怎么样数据本实验收集了bugzilla存储库中四个生态系统的缺陷报告,它们分别来自apache、eclipse、gentoo和mozilla,总计2230个。具体来说,选取状态为“resolved”或“verified”且结论为“fixed”的报告,并提取它们的项目、组件、报告人、严重性和摘要标签。在此基础上,手动标记了这些报告的类型和意图,其类型信息统计如表2所示。
36.表2 所有数据集的类型数量统计评价指标为了衡量模型的性能,实验使用准确率、精确率、召回率和f-measure作为评价指标。它们的定义如下:(13)(14)
(15)(16)其中,tp是true positives的数量,tn是true negatives的数量,fp是false positives的数量,fn是false negatives的数量。为了应对不同数据拆分带来的随机性,本实验采用十折交叉验证,求取评价指标的平均值来衡量模型的性能。
37.结果rq1.增加提出的报告意图因素是否能提高缺陷报告分类的准确性使用依次融合叠加的三种特征训练分类器,其十折交叉验证的平均准确率如表3所示。text表示摘要的文本特征,freq表示其他字段(项目、组件、报告人、严重性)的词频特征,intention表示缺陷报告的意图特征。表中数值的单位为百分制。text+freq+intention 为我们提出的方法。
38.表3 所有数据集的平均准确率为了能够直观的展示出加入报告意图因素对分类结果的影响,我们以数据集为单位绘制图3至图6。其中,x轴为分类器,分类器名称采用简写。y轴为十折交叉验证的平均准确率,单位为百分制。
39.rq2.提出的方法在五个不同分类器上的性能表现怎么样提出的方法,即融合文本和频率以及意图特征(text+freq+intention),在五个分类器上的性能如图7至图11所示。其中,x轴表示数据的来源,y轴表示十折交叉验证的平均值。
40.实验分析方法的性能:将提出的方法与五个不同的机器学习分类器结合,在apache、eclipse、gentoo和mozilla数据集上进行实验。表3中展示出所有数据集在不同分类器上的平均准确率。其中,apache数据集最高为91.7%,eclipse数据集最高为84.8%,gentoo数据集
最高为94.5%,mozilla数据集最高为89.9%。从图3至图6中可以看出,与单独考虑报告文本和频率特征相比,增加提出的报告意图因素后,四个生态系统的数据集在五个分类器上的准确率都有明显提高。此外,还测试了提出的方法在k-nn、nb、lf、svm和rf 分类器上的性能,图7至图11显示了每个分类器的评价指标数值。结果表明,提出的方法在五个分类器上的精确率、召回率和f-measure都取得了不错的效果。在所有数据上,精确率达到82.8%-96.9%,召回率达到86.4%-96.2%,f-measure达到87.3%-95.5%。在五个分类器中,随机森林的综合性能要优于其他分类器,且每个分类器的性能会随着数据集的不同而改变。
41.有效性威胁在这一部分中,确定了本研究可能存在以下威胁。
42.内部威胁:大部分开放存储库的缺陷报告标签都存在错误。因此,本实验的数据集是在bugzilla存储库数据的基础上由我们手动标记构成的。尽管按照已有论文提出的规则进行了错误或非错误标记,但由于经验和知识背景不同,可能会出现标记错误,从而影响模型的性能。
43.外部威胁:本实验主要针对四个生态系统(apache,eclipse,gentoo,mozilla)的2230个缺陷报告进行错误或非错误分类。然而本方法在其他生态系统上的效果是未知的,也就是说,缺陷报告分类模型在其他软件系统数据上的性能可能会高于或低于实验给出的结果。
44.结论在本研究中,提出了一种新的缺陷报告分类方法,即在考虑报告文本内容的基础上增加报告意图因素。该方法融合了文本挖掘、自然语言处理和机器学习技术。首先收集了缺陷存储库中四大生态系统(包括apache,eclipse,gentoo和mozilla)的2230个报告,并手动标记它们的类型和意图,目的是构建实验所需的数据集。然后,对数据执行预处理步骤,并提取报告摘要字段的文本特征和其他字段的词频特征,同时加入报告意图特征。接下来,将这些特征依次叠加融合分别输入到五个机器学习分类器中(包括k-nn、nb、svm、lf、rf)。最后,把缺陷报告分为错误和非错误。为了衡量模型性能,使用了准确率、精确率、召回率和f-measure作为评价指标。结果表明,与单纯提取文本内容特征进行分类相比,增加提出的报告意图特征可以显著提高缺陷报告分类的性能。未来,将在更多的开源生态系统上验证提出的方法,并结合深度学习技术以提高缺陷报告自动分类的性能。
45.以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。