CN110598787A - 一种基于自定步长学习的软件bug分类方法 - Google Patents

一种基于自定步长学习的软件bug分类方法 Download PDF

Info

Publication number
CN110598787A
CN110598787A CN201910863660.5A CN201910863660A CN110598787A CN 110598787 A CN110598787 A CN 110598787A CN 201910863660 A CN201910863660 A CN 201910863660A CN 110598787 A CN110598787 A CN 110598787A
Authority
CN
China
Prior art keywords
bug
class
classification
matrix
ith
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.)
Granted
Application number
CN201910863660.5A
Other languages
English (en)
Other versions
CN110598787B (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.)
Beijing University of Technology
Original Assignee
Beijing University of Technology
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 Beijing University of Technology filed Critical Beijing University of Technology
Priority to CN201910863660.5A priority Critical patent/CN110598787B/zh
Publication of CN110598787A publication Critical patent/CN110598787A/zh
Application granted granted Critical
Publication of CN110598787B publication Critical patent/CN110598787B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/22Matching criteria, e.g. proximity measures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/243Classification techniques relating to the number of classes
    • G06F18/2431Multiple classes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/40Extraction of image or video features

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Evolutionary Computation (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Multimedia (AREA)
  • Stored Programmes (AREA)

Abstract

本发明涉及基于自定步长学习的软件bug分类方法,属于软件工程中的文本挖掘技术领域;本发明引入了自定步长回溯算法,在初始阶段独立于文本相似性并结合BT回溯矩阵,通过对最大权重值和最小权重值的映射,对部分bug进行分类;然后根据单词的加权相似性对每个bug进行关键特征的提取,并结合KFIM矩阵,对另外的bug进行分类。相比于现有技术,本发明使用回溯矩阵有利于准确性的提高;结合文本相似性独立与文本相似性依赖,既有利于数据集的多样化,又减少了标记集合,避免了大量的比较;将自定步长的学习与分类相结合,提高了精确度与稳定性,并在AUC和Kappa测度方面都具有显著的性能。

Description

一种基于自定步长学习的软件bug分类方法
技术领域
本发明涉及一种软件bug分类方法,特别涉及一种基于自定步长学习的软件bug分类方法,属于软件工程中的文本挖掘领域。
背景技术
软件bug分类是将bug报告分配给相关开发人员进行修复的过程,有效的分类能够很好的节省修复时间和精力。对于成千上万的数据,手工分类显然不是一个好的解决方案。bug分类的第一步就是将bug划分为相应的类型,人们通过各种方法去解决这一分类问题,但是大多数主要依赖于bug描述和给定报告中的分类的文本相似性,很少考虑到语义关系。有些方法虽然考虑了语义关系,但由于bug报告是一种特殊的自然语言文档,因此仅基于语义信息或文本相似性的方法会产生以下问题:(1)bug摘要或者简短描仅包含有限的单词,预处理后的语义在一定程度上受到干扰,因此完全基于语义的方法性能不佳。(2)分类器仅在特定的数据集上表现出良好的性能。(3)由于不同类型存储库中关键字的集合完全不同,导致不同特性的数据集的性能低下。
Guzman-Cabrera等人(Guzman-Cabrera,Montes-y-Gomez,Rosso,&-Pineda,2009)提出了一种基于web语料库的半监督自定步长模型,该模型用于语言文本独立分类。郑等人(Zheng&Wang,2018)介绍了一种自定步长的CNN文本分类算法,并应用于新闻数据,该算法首先使用几个带注释的样本初始化分类器,然后通过CNN提取文本特征,并根据未标记的样本的重要性权重对其进行排序。徐等人(Xu,Tao,&Xu,2015)讨论了一种用于聚类的自定步长学习方法,并对局部极小值问题进行了处理,而且将真实数据集应用于实验。Behbood等人还提出了软件工程领域的其他自定步长学习方法。尽管这些方法解决了图像处理和其他真实世界数据集中的分类和聚类问题,但是没有解决bug分类问题。
因此,我们提出了一个新的方法:SPBC(Self Paced Bug Classifier),它可以从历史数据中的bug描述中定位到目标种类,由多个开源软件维护。在这个模型中,引入了一个自定步长回溯算法(self-paced backtraceable algorithm),该算法在初始阶段对与文本无关的bug描述进行分类。然后,通过利用NIND(Non-Independent and IdenticallyDistributed)矩阵(Cao,2016),基于单词的加权相似性从每个bug描述中提取关键特征,便于对文本相似的描述进行bug分类。自定步长学习方法(Self-Paced Learning)与分类相结合,在精确度上有了大量的增长(平均5%到15%)。
发明内容
本发明的目的是针对软件bug分类领域,现有的仅基于语义信息或文本相似性的方法存在性能不佳以及分类器的使用仅限于特定的数据集的问题,提出一种基于自定步长学习的软件bug方法以及分类器SPBC,对软件bug进行分类。
本发明是通过以下技术方案实现的。
一种基于自定步长学习的软件bug分类方法,具体包括以下步骤:
步骤1:获取已标记分类的bug报告作为训练数据,从中提取bug ID、类标签、bug简要描述三项内容构建训练数据集Dt,对Dt中bug简要描述进行单词标记后将其转换为标记表Token-Table存储,Token-Table中包含bug ID、标记、类标签三个属性;所述bug ID为bug的标识符;
作为优选,所述获取训练数据后构建Dt前,增加对bug简要描述进行如下数据清理的内容:清除标点符号、连接符、特殊字符,删除停止词(stopword),进行词干提取(stemming)。
步骤2:从Token-Table中提取具有相同类标签的bug形成类表C-Table;
将新生成的表命名为类表C-Table;假设一共有c个类标签种类,即会产生c个类表;该表中包含bug ID,标记以及类标签三个属性;
步骤3:按以下过程对所有的C-Table构建其BT(Back Traceability Matrix)矩阵:
对每个类C构建一个BT矩阵;所述BT矩阵具有以下属性:BT=(tr,wr,di),其中,di,1≤i≤k表示类C中第i个bug bi的bug标识符;tr,1≤r≤x表示第i个bug bi中的第r个标记,x表示bug bi中标记的个数,wr表示第r个标记t在类C中的权重,通过以下公式计算:
其中,在类C中一共含有k个bug;N表示所有类中所有标记的总数,Nt表示第r个标记t出现在所有类中的总次数,fti表示第i个bug中标记t出现的次数,ft1+...fti...+ftk表示类C中标记t出现的总次数,nt表示类C中所有标记(包含重复出现的标记)的总数;这里利用log函数简化运算过程;
至此,得到了矩阵BT=(tr,wr,di)中的所有属性值;每个不同的类C拥有一个BT矩阵,所以一共计算c个BT矩阵;
步骤4:KFIM(Key Feature Identification Matrix)矩阵的构建
KFIM矩阵中的元素通过下式计算:
其中,Wij表示矩阵KFIM中第i个标记(第i列)在第j个类(第j行)Cj中的归一化权重,其值属于0到1之间;假设,一共有y个不同标记,c个不同类,即矩阵为c×y维;nij表示第i个标记在第j个类中出现的总次数,nj表示第j个类中所有标记的总数,Ni表示第i个标记出现在所有类中的总次数;
步骤5:对待分类bug报告提取bug ID和bug简要描述中的标记构建数据集表Dc,包含三个属性:bug ID,标记和权重;
其中权重通过下式计算:
其中,wij表示Dc中第i个bug中的第j个标记t的权重,n表示Dc中bug的数量,njt表示第j个标记t在Dc中出现的总次数,Nd表示Dc中所有标记的总数;
以下将进行自步学习分类,我们定义μ=1为最简单程度,并使用步长为1,进行学习过程;具体操作为:
步骤6:SPC(Self-Paced Classification)第一阶段:文本相似性独立分类;
在此阶段,考虑训练数据集中的全部bug,数量为n,令参数μ=1进行分类过程;如公式(4):
max wi+M(μ;ti,ci)+BT←C (4)
其中,max wi表示数据集表中的第i个最大权重值,M(μ;ti,ci)表示由μ决定的映射函数,在第一阶段μ=1时,仅使用第i个最大权重值对应的标记ti和标记表Token-Tabl中的类标签ci,并结合BT矩阵寻找最大权重值,从而获得分类C;具体操作如下:
比较数据集表中的所有权重值,找出最大权重值(max wi)对应的标记所在的bug,假设一共有m个满足该条件的bug,其中第i个bug为bi,1≤i≤m,对应的标记为ti;使用映射方法M进行映射,当μ=1时,使用标记表Token-Table对标记ti进行映射,找到其对应的一个或者多个类C,利用每个类C的BT矩阵,找出每个矩阵中标记ti的最大权重值,记为wj,依次比较每个BT中的wj,确定其中的最大值wjmax,最后,将bug bi分类给该最大值所在的类表C表示的类;至此,完成了一个bug的分类过程,然后,对bi+1进行分类映射,直到m个bug均完成分类;
步骤7:SPC(Self-Paced Classification)第二阶段:文本相似性独立分类;
在此阶段,考虑经第一阶段没有分类的bug,数量为n-m,令参数μ=2进行分类过程;如公式(5):
min wi+M(μ;ti,ci)+BT←C (5)
其中,min wi表示数据集表中的第i个最小权重值,M(μ;ti,ci)表示由μ决定的映射函数,在第二阶段μ=2时,仅使用第i个最小权重值对应的标记ti和标记表Token-Tabl中的类标签ci,并结合BT矩阵寻找最小权重值,从而获得分类C;具体操作如下:
比较数据集表中的权重值,找出最小权重值(min wi)对应的标记所在的bug,假设一共有m′个满足条件的bug,其中第i个bug为bi,1≤i≤m′,对应的标记为ti;使用映射方法M进行映射,当μ=2时,使用标记表Token-Table对标记ti进行映射,找到其对应的一个或者多个类C,利用每个类C的BT矩阵,找出每个矩阵中标记ti的最小权重值,记为wj,依次比较每个BT中的wj,确定其中的最小值wjmin,最后,将bug bi分类给该值所在的类表所表示的类;至此,完成了一个bug的分类过程,然后,对bi+1进行分类映射,直到m′个bug均完成分类;
步骤8:SPC(Self-Paced Classification)第三阶段:文本相似性依赖分类;
在此阶段,考虑经第一阶段和第二阶段均没有分类的bug,数量为(n-m-m′),令参数μ=3进行分类过程;如公式(6):
M(μ;li)+KFIM←C (6)
其中,M(μ;li)表示由μ决定的映射函数,在第三阶段μ=3时,使用第i个bug的定义特征li,并结合KFIM矩阵寻找最大权重值,从而获得分类C;具体操作如下:
首先,在数据集表中的每个bug的最大权重值所对应的标记,定义为该bug的定义特征;其次,利用KFIM矩阵进行映射;假设满足条件的第i个bug为bi,1≤i≤(n-m-m′),对应的定义特征为li,通过比较KFIM矩阵中标记为li所在的列的值,即该标记在每个类中的归一化权重,找出该列的最大归一化权重值,该值所在的行表示的类,即为bi的分类结果;至此,完成了此阶段对bi的分类;然后对bi+1进行分类;直到(n-m-m′)个bug均完成分类;
至此,完成了基于训练数据集对待分类bug报告中bug进行分类的分类过程。
有益效果
一种基于自定步长学习的软件bug分类方法,与现有bug分类器相比,具有以下有益效果:
1.本方法使用BT回溯矩阵有利于准确性的提高与稳定;使用其他数据集,以10倍交叉验证方法测试Kappa系数,现有其他方法的准确性结果下降明显(12%到35%),而本方法仅下降了4%;
2.本方法中KFIM矩阵的使用能够捕获多种类别的bug;引入类似于Non-iid(非独立同分布)中的矩阵用于分类,是本方法的一个创新点;
3.本方法结合了文本相似性独立和文本相似性依赖;在初始阶段独立于文本相似性对bug进行分类,摆脱了对特定类型的数据集的限制;然后根据单词的加权相似性对每个bug进行关键特征的提取,关键特征的使用解决了比较次数繁多的问题;
4.本方法将自定步长学习与分类相结合,提高了精确度与稳定性,并在AUC和Kappa测度方面都具有显著的性能。
附图说明
图1为本发明实施例一种基于自定步长学习的软件bug分类方法的模型结构图。
具体实施方式
下面根据附图及实施例对本发明进行详细说明,但本发明的具体实施形式并不局限于此。
实施例1
本实例采用本发明提出的方法,如图1所示,图中从上到下展示了该分类器实现分类的流程。首先对bug报告中的bug简要描述进行数据预处理,对处理后的数据进行单词标记,并形成类表,类表中包含bug ID,标记,bug简要描述;其次进行分类计算,本方法分为两个阶段:文本相似性独立和文本相似性依赖,需要进行BT矩阵和KFIM矩阵的计算,以及三种不同映射方法的映射,最终获得bug分类结果。采用Eclipse(Oxygen)平台、Java开发语言以及以下四个数据集进行了实验操作。四个数据集网址分别是:http://www.redmine.org/projects/redmine/issues,https://www.bugzilla.org/,https://github.com/ansymo/msr2013-bug dataset andhttps://mantisbt.org。
其中,每个数据集放入到一个csv文本文件中。从txt文件中创建一个MSAccess数据库,利用jdbc实现数据库与Eclipse的连接,通过SQL查询所需的属性。
具体的操作是:
本方法的原始输入数据集是bug报告。其中,bug报告是对bug进行描述的文件,一般包括bug ID序号、严重程度(severity)、bug状态(status)、类标签(category)以及bug简要描述(short_desc/summary)等字段,bug报告文件将以上列出的属性按照表格的形式进行存储,每一行存储一条bug相关属性。由于数据集来源不同,bug报告所包含的属性也会不同。在eclipse的bug报告中,bug简要描述字段是通过文字对该bug的产生原因进行介绍,并且在该文字介绍的开头会标注出该bug所属于的类标签,类标签属于bug简要描述字段的一部分;而在其他数据集中,例如Redmine、Mentis中的bug报告中,类标签是单独的属性列。这使得对于来自不同数据源的bug报告,在步骤1和步骤2的操作上有所区别。
步骤1:对bug报告进行数据清理以获得训练数据集Dt;首先将bug报告中bug简要描述列中的标点符号、连接符、特殊字符等内容清除,然后删除停止词(stopword),最后进行词干提取(stemming),这样就得到一个经过滤的bug简要描述;
若该bug报告中,类标签作为了单独一列,则提取bug ID、类标签、bug简要描述形成过滤数据集Df,Df中一共有N条数据;若该bug描述中将类标签作为了bug简要描述的一部分,则将之从bug简要描述中提取出来作为类标签,从而提取bug ID、类标签、bug简要描述形成过滤数据集Df,Df中一共有N条数据;
选取过滤数据集Df中的前n条数据作为训练数据集Dt,其中1≤n<N,即训练数据集中一共有n个bug,任意一个bugbi i=1,2,...n;后N-n条作为测试数据;
本例中选用的数据集为Eclipse,其类标签在bug简要描述中,从中提取出来作为类标签,因此Df中包括bug ID、类标签(Class_label)、bug简要描述(Short_description)三列,如表1所示为部分数据:
表1:经数据清理后的训练数据集表
然后,对训练数据集进行单词标记;单词标记是将大量文本样本分解为单词的过程;将单词标记作用于bug简要描述,将bug简要描述中的每一个单词都称为一个标记,以符号t表示;如果一个经过滤后的bug简要描述中有x个单词,经过单词标记就会产生x个标记;在此步骤之后,对训练数据集形成一个标记表Token-Table在数据库中存储,包含bug ID、标记(Token)、类标签(class_lable)三个属性;如表2所示:
表2:标记表
步骤2:从训练数据集Dt中提取具有相同类标签的bug形成类表C-Table;
如果Dt中已经存在类标签作为单独的一列,则只需比较该类标签属性,将具有相同类标签的行提取出来组成新的数据库表;如果Dt中类标签作为bug简要描述的一部分存放的,则需要首先对bug简要描述提取类标签,并增加一列属性为类标签,将提取出来的类标签存放在该列中,然后将相同类标签的行提取出来组成新的数据库表;
将新生成的数据库表命名为类表C-Table;假设一共有c个类标签种类,即会产生c个类表;该表中包含bug ID,标记以及类标签三个属性;
如表3所示为UI类表,表4所示为CSS类表,以此两个表为例,简要说明:
表3:UI类表
表4:CSS类表
步骤3:BT(Back TraceabilityMatrix)矩阵的构建
对每个类C均需要建立BT矩阵;矩阵BT具有以下属性:BT=(tr,wr,di),其中,di,1≤i≤k表示类C中第i个bug bi的bug标识符(Bug ID),用bug ID序号定义;在BT矩阵中,如果有多行di的值是相同的,就表示这多行对应的标记属于同一个bug;tr,1≤r≤x∈N*表示第i个bug bi中的第r个标记(Token),假设bug bi中一共存在x个标记,在步骤3中已经得到;wr表示第r个标记在类C中的权重,通过以下步骤计算得到:
依据公式(1)计算权重wr(weight):
至此,得到了矩阵BT=(tr,wr,di)中的所有属性值;每个不同的类C拥有一个BT矩阵,所以一共计算c个BT矩阵;
如表5所示为UI类表的BT矩阵,表6所示为CSS类表的BT矩阵,为便于计算和展示,其数字为假设数值:
表5:UI类表的BT矩阵
表6:CSS类表的BT矩阵
步骤4:KFIM(KeyFeature IdentificationMatrix)矩阵的构建
依据公式(2)计算归一化权重Wij,将其集合在一起,就形成了KFIM矩阵,矩阵元素Wij表示第j个标记在第i个类中的归一化权重;表7所示:
表7:KFIM矩阵
步骤5:接下来进入分类阶段,在此阶段输入需要分类的bug报告,对其进行数据清理,而后对其构建待分类数据集表,在此表中包含如下属性:bug ID,标记和权重,把该表命名为数据集表;由于进入分类阶段不考虑类标签的使用,即不使用类表中的数据,所以在该表中的权重根据公式(3)计算;
该表内容如表8所示:
表8:数据集表
步骤6:SPC(Self-PacedClassification)第一阶段:文本相似性独立分类
在此阶段,考虑待分类数据集表中的所有bug,数量为n,令参数μ=1进行公式(4)的分类过程;比较数据集表中的所有权重值,找出最大权重值对应的标记所在的bug,假设数量为m;其中,可能存在一个或者多个最大值;若一个bug的多个标记均有最大权重值,则只考虑这多个标记中的第一个标记进行后面的计算,这样就使得一个bug仅含有一个满足条件的标记;在第一阶段,将完成这些bug的分类;具体操作为:
假设满足条件的第i个bug为bi,1≤i≤m,对应的标记为ti,在标记表Token-Table中,对标记ti进行映射,定位一个或多个具有相同标记ti的行,假设一共有r行不同类标签的标记为ti,其中第j行所对应的类标签为Cj,1≤j≤r,根据该类Cj对应的BT矩阵,找出该矩阵中标记ti的最大权重值,记为wj,依次比较wj,j=1,2,...r,确定其中的最大值wjmax,最后,将bug bi分类给该最大值所在的类表所表示的类;若最大值wjmax不是唯一的,就将该bug bi分配给多个类;至此,完成了一个bug的分类过程,然后,对bi+1进行分类映射,直到m个bug均完成分类;
以表8为例,整个训练数据集表中的最大权重值为2.26,对应标记Internet,bugID=001,所以此阶段可以实现对bug001的分类;根据表2标记表,找到标记Internet所在的行对应的类标签,表2中为UI类,假设Internet还对应CSS类、SFS类(没有在表中显示);然后,分别找到类表UI、CSS、SFS对应的BT矩阵,例如表5、表6,确定三个BT矩阵中internet的最大权重,该值对应的类,即为bug001的分类结果;至此,完成了bug001的分类,若还有其他权重值为2.26的bug,则继续进行此阶段的分类过程;
步骤7:SPC(Self-Paced Classification)第二阶段:文本相似性独立分类
在此阶段,考虑经第一阶段没有分类的bug,数量为n-m,令参数μ=2进行公式(5)的分类过程;比较数据集表中的权重值,找出最小权重值对应的标记所在的bug,假设数量为m′;其中,可能存在一个或者多个最小值;若一个bug的多个标记均有最小权重值,则只考虑这多个标记中的第一个标记进行后面的计算,这样就使得一个bug仅含有一个满足条件的标记;在第二阶段,将完成这些bug的分类;具体操作为:
假设满足条件的第i个bug为bi,1≤i≤m′,对应的标记为ti,在标记表Token-Table中,对标记ti进行映射,定位一个或多个具有相同标记ti的行,假设一共有r行不同类标签的标记为ti,其中第j行所对应的类标签为Cj,1≤j≤r,根据该类Cj对应的BT矩阵,找出该矩阵中标记ti的最小权重值,记为wj,依次比较wj,j=1,2,...r,确定其中的最小值wjmin,最后,将bug bi分类给该值所在的类表所表示的类;若最小值wjmax不是唯一的,就将该bug bi分配给多个类;至此,完成了一个bug的分类过程,然后,对bi+1进行分类映射,直到m′个bug均完成分类;
以表8为例,整个训练数据集表中的最小权重值为1.07,对应标记xyz,bug ID=003,316,所以此阶段可以实现对bug003和316的分类;根据表2标记表,找到标记xyz所在的行对应的类标签,表2中为CSS和UI类;然后,分别找到类表CSS、UI对应的BT矩阵,例如表6、表5,确定两个BT矩阵中xyz的最大权重为1.18,该值对应的类为UI,即将bug003、bug316分类为CSS;至此,完成了bug003,bug316的分类,继续对其他bug进行此阶段的分类;
步骤8:SPC(Self-Paced Classification)第三阶段:文本相似性依赖分类
在此阶段,需要对经第一阶段和第二阶段均没有分类的bug进行分类,所以,第三阶段考虑的bug数量为(n-m-m′),令参数μ=3进行公式(6)的分类过程;具体操作为:
首先,确定数据集表中每个bug的定义特征;在数据集表中的每个bug均有其内部的最大权重值,其每个bug的最大权重值对应的标记,定义为该bug的定义特征;若存在最大权重值不唯一,则仅定义数据集表中的该bug第一个的最大权重值所对应的标记为定义特征;
其次,利用KFIM矩阵进行映射;假设满足条件的第i个bug为bi,1≤i≤(n-m-m′),对应的定义特征为li,通过比较KFIM矩阵中标记为li所在的列的值,即该标记在每个类中的归一化权重,找出该列的最大归一化权重值,该值所在的行所表示的类,即为bi的分类结果;若该列的最大值不唯一,即将该bug分类为多个类别;至此,完成了此阶段对bi的分类;然后对bi+1进行分类;直到完成(n-m-m′)个bug均完成分类;
以表8为例,首先假设在第一阶段和第二阶段没有完成bug001的分类,需要在此阶段进行分类;首先确定bug001的定义特征,因为在bug001中的Internet的权重值最大,即internet为bug001的定义特征;利用KFIM矩阵,如表7所示,internet列中的最大值为0.34,所在行对应的类为UI,即UI为Internet的分类结果;然后继续对训练数据集表中的其他bug进行分类;
至此,完成了对bug的分类过程。本领域技术人员知道,对用于训练的数据集和待分类的数据集进行数据清理只是优选的步骤,可以获得更高的分类准确率,并非必须。
实验结果
基于以上步骤,本实验采用Eclipse(Oxygen)平台、Java开发语言以及以下四个数据集进行了实验验证。四个数据集网址分别是:http://www.redmine.org/projects/redmine/issues,https://www.bugzilla.org/,https://github.com/ansymo/msr2013-bug dataset andhttps://mantisbt.org。
其中,每个数据集放入到一个csv文本文件中。从txt文件中创建一个MSAccess数据库,利用jdbc实现数据库与Eclipse的连接,通过SQL查询所需的属性。
本实验得到的分类结果的准确率、精确率、召回率、F值以及Kappa系数如表9中第二列最后一行所示。
为说明本发明的检索效果,在同等条件下,以相同的实验数据分别采用贝叶斯网络、KNN、LogitBoost、J48、SMO、随机森林、MLP、CNN进行比较,得到的分类结果的准确率、精确率、召回率、F值以及Kappa系数在表9中的第二列显示。同时,对Redmine和Mentis数据集也进行了同样的操作,各种方法的分类结果的度量值均在表9中显示。
通过表9可以得到以下结论:基于自定步长学习的软件bug分类方法实现了比基于传统机器学习方法更高的准确率和Kappa系数,精确率、召回率和F值也比较高。综合表9的三个数据集的实验结果,验证了本发明的有效性。应用本发明时,只要使用已标记类标签的一定训练数据获得标记表、不同类表的BT矩阵和KFIM矩阵,即可用于Bug报告进行分类,且具有很好的准确率。
表9:10种分类方式-3种数据集效果比较
需要说明的是,本说明书所述的仅为本发明的较佳实施例而已,以上实施例仅用于说明本发明的技术方案而非对本发明的限制。凡本领域技术人员依本发明的构思通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在本发明的范围之内。

Claims (2)

1.一种基于自定步长学习的软件bug分类方法,其特征在于,包括以下步骤:
步骤1:获取已标记分类的bug报告作为训练数据,从中提取bug ID、类标签、bug简要描述三项内容构建训练数据集Dt,对Dt中bug简要描述进行单词标记后将其转换为标记表Token-Table存储,Token-Table中包含bug ID、标记、类标签三个属性;所述bug ID为bug的标识符;
步骤2:从Token-Table中提取具有相同类标签的bug形成类表C-Table;
步骤3:按以下过程对所有的C-Table构建其BT(Back Traceability Matrix)矩阵:
所述BT矩阵具有以下属性:BT=(tr,wr,di),其中,di,1≤i≤k表示类C中第i个bugbi的bug标识符;tr,1≤r≤x表示第i个bug中的第r个标记,x表示bugbi中标记的个数,wr表示第r个标记t在类C中的权重,通过下式计算:
其中,在类C中一共含有k个bug;N表示所有类中所有标记的总数,Nt表示第r个标记t出现在所有类中的总次数,fti表示第i个bug中标记t出现的次数,ft1+...fti...+ftk表示类C中标记t出现的总次数,nt表示类C中所有标记的总数;
步骤4:构建KFIM(Key Feature Identification Matrix)矩阵,矩阵的行为不同的类标签,列为不同的标记,C-Table的个数为行数,Token-Table中不同的标记数目为列数,第j行第i列的值为第i个标记在第j个类Cj中的归一化权重Wij,其值通过下式计算:
其中,nij表示第i个标记在Cj中出现的总次数,nj表示Cj中所有标记的总数,Ni表示第i个标记出现在所有类中的总次数;
步骤5:对待分类bug报告提取bug ID和bug简要描述中的标记构建数据集表Dc,包含三个属性:bug ID,标记和权重,权重通过下式计算:
其中,wij表示Dc中第i个bug中第j个标记t的权重,n表示Dc中bug的数量,njt表示第j个标记t在Dc中出现的总次数,Nd表示Dc中所有标记的总数;
步骤6:对Dc按下式进行SPC(Self-Paced Classification)第一阶段:文本相似性独立分类:
maxwi+M(μ;ti,ci)+BT←C
其中,maxwi表示数据集表中的第i个最大权重值,M(μ;ti,ci)表示由μ决定的映射函数,在第一阶段时μ=1,BT表示BT矩阵,C表示分类,取值范围为Token-Table中的类标签;该公式的含义是使用第i个最大权重值对应的标记ti和ti在标记表Token-Table中对应的多个不同的类标签ci,比较多个不同ci类BT矩阵中ti对应的权重寻找最大权重值wjmax,根据wjmax所在的ci类,获得第i个最大权重值对应bug ID的分类C;将Dc中所有最大权重值对应的bug ID相关的数据去除;
步骤7:对Dc按下式进行SPC(Self-Paced Classification)第二阶段:文本相似性独立分类:
minwi+M(μ;ti,ci)+BT←C
其中,minwi表示数据集表中的第i个最小权重值,M(μ;ti,ci)表示由μ决定的映射函数,在第二阶段时μ=2,BT表示BT矩阵,C表示分类,取值范围为Token-Table中的类标签;该公式的含义是使用第i个最小权重值对应的标记ti和ti在标记表Token-Table中对应的多个不同的类标签ci,比较多个不同ci类BT矩阵中ti对应的权重寻找最小权重值wjmin,根据wjmin所在的ci类,获得第i个最小权重值对应bug ID的分类C;将Dc中所有最小权重值对应的bug ID相关的数据去除;
步骤8:对Dc按下式进行SPC(Self-Paced Classification)第三阶段:文本相似性依赖分类:
M(μ;li)+KFIM←C
其中,M(μ;li)表示由μ决定的映射函数,在第三阶段时μ=3,li表示第i个bug的定义特征,定义特征为Dc中每个bug的最大权重值所对应的标记,KFIM表示KFIM矩阵,C表示分类,取值范围为Token-Table中的类标签;该公式的含义是在KFIM矩阵中寻找li所在列的最大归一化权重值max,max所在行表示的类ci即是li对应的bug ID的分类C。
2.根据权利要求1所述的方法,其特征在于,步骤1所述对Dt中bug简要描述进行单词标记前先对bug简要描述进行如下数据清理操作:清除标点符号、连接符、特殊字符,删除停止词(stopword),进行词干提取(stemming)。
CN201910863660.5A 2019-09-12 2019-09-12 一种基于自定步长学习的软件bug分类方法 Expired - Fee Related CN110598787B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910863660.5A CN110598787B (zh) 2019-09-12 2019-09-12 一种基于自定步长学习的软件bug分类方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910863660.5A CN110598787B (zh) 2019-09-12 2019-09-12 一种基于自定步长学习的软件bug分类方法

Publications (2)

Publication Number Publication Date
CN110598787A true CN110598787A (zh) 2019-12-20
CN110598787B CN110598787B (zh) 2021-06-08

Family

ID=68859503

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910863660.5A Expired - Fee Related CN110598787B (zh) 2019-09-12 2019-09-12 一种基于自定步长学习的软件bug分类方法

Country Status (1)

Country Link
CN (1) CN110598787B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111049858A (zh) * 2019-12-26 2020-04-21 杭州安恒信息技术股份有限公司 一种基于交叉验证的基线扫描漏洞去重方法、装置及设备
CN112181814A (zh) * 2020-09-18 2021-01-05 武汉大学 一种针对于缺陷报告的多标签标记方法
CN113254329A (zh) * 2021-04-30 2021-08-13 展讯通信(天津)有限公司 基于机器学习的Bug处理方法、系统、设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050022114A1 (en) * 2001-08-13 2005-01-27 Xerox Corporation Meta-document management system with personality identifiers
CN105159822A (zh) * 2015-08-12 2015-12-16 南京航空航天大学 一种基于文本词性和程序调用关系的软件缺陷定位方法
CN108984613A (zh) * 2018-06-12 2018-12-11 北京航空航天大学 一种基于迁移学习的缺陷报告跨项目分类方法
WO2019143542A1 (en) * 2018-01-21 2019-07-25 Microsoft Technology Licensing, Llc Time-weighted risky code prediction

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050022114A1 (en) * 2001-08-13 2005-01-27 Xerox Corporation Meta-document management system with personality identifiers
CN105159822A (zh) * 2015-08-12 2015-12-16 南京航空航天大学 一种基于文本词性和程序调用关系的软件缺陷定位方法
WO2019143542A1 (en) * 2018-01-21 2019-07-25 Microsoft Technology Licensing, Llc Time-weighted risky code prediction
CN108984613A (zh) * 2018-06-12 2018-12-11 北京航空航天大学 一种基于迁移学习的缺陷报告跨项目分类方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
XIAOFEI ZHANG等: "Exploring Metadata in Bug Reports for Bug Localization", 《2017 24TH ASIA-PACIFIC SOFTWARE ENGINEERING CONFERENCE (APSEC)》 *
张天伦等: "基于代价极速学习机的软件缺陷报告分类方法", 《软件学报》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111049858A (zh) * 2019-12-26 2020-04-21 杭州安恒信息技术股份有限公司 一种基于交叉验证的基线扫描漏洞去重方法、装置及设备
CN111049858B (zh) * 2019-12-26 2022-05-24 杭州安恒信息技术股份有限公司 一种基于交叉验证的基线扫描漏洞去重方法、装置及设备
CN112181814A (zh) * 2020-09-18 2021-01-05 武汉大学 一种针对于缺陷报告的多标签标记方法
CN113254329A (zh) * 2021-04-30 2021-08-13 展讯通信(天津)有限公司 基于机器学习的Bug处理方法、系统、设备及存储介质

Also Published As

Publication number Publication date
CN110598787B (zh) 2021-06-08

Similar Documents

Publication Publication Date Title
CN109388795B (zh) 一种命名实体识别方法、语言识别方法及系统
CN111950285B (zh) 多模态数据融合的医疗知识图谱智能自动构建系统和方法
CN109670163B (zh) 信息识别方法、信息推荐方法、模板构建方法及计算设备
TWI662425B (zh) 一種自動生成語義相近句子樣本的方法
CN110598787B (zh) 一种基于自定步长学习的软件bug分类方法
CN108595708A (zh) 一种基于知识图谱的异常信息文本分类方法
CN108920544A (zh) 一种基于知识图谱的个性化职位推荐方法
WO2022134794A1 (zh) 新闻事件的舆情处理方法及装置、存储介质、计算机设备
CN108121829A (zh) 面向软件缺陷的领域知识图谱自动化构建方法
CN111767716B (zh) 企业多级行业信息的确定方法、装置及计算机设备
Wilkinson et al. Neural Ctrl-F: segmentation-free query-by-string word spotting in handwritten manuscript collections
CN110134800A (zh) 一种文档关系可视化处理方法及装置
CN114036281B (zh) 基于知识图谱的柑橘管控问答模块构建方法及问答系统
US20180113950A1 (en) Queryng graph topologies
CN112989208B (zh) 一种信息推荐方法、装置、电子设备及存储介质
CN111325018B (zh) 一种基于web检索和新词发现的领域词典构建方法
CN113901214B (zh) 表格信息的提取方法、装置、电子设备及存储介质
CN114238653A (zh) 一种编程教育知识图谱构建、补全与智能问答的方法
CN112966117A (zh) 实体链接方法
CN117952209A (zh) 一种知识图谱构建方法及系统
CN114153978A (zh) 模型训练方法、信息抽取方法、装置、设备及存储介质
CN111191051A (zh) 一种基于中文分词技术的应急知识图谱的构建方法及系统
CN113946657A (zh) 一种基于知识推理的电力业务意图自动识别方法
CN113516094B (zh) 一种用于为文档匹配评议专家的系统以及方法
CN114328800A (zh) 文本处理方法、装置、电子设备和计算机可读存储介质

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
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20210608