CN107480141A - 一种基于文本和开发者活跃度的软件缺陷辅助分派方法 - Google Patents

一种基于文本和开发者活跃度的软件缺陷辅助分派方法 Download PDF

Info

Publication number
CN107480141A
CN107480141A CN201710753984.4A CN201710753984A CN107480141A CN 107480141 A CN107480141 A CN 107480141A CN 201710753984 A CN201710753984 A CN 201710753984A CN 107480141 A CN107480141 A CN 107480141A
Authority
CN
China
Prior art keywords
developer
text
defect
liveness
mrow
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
CN201710753984.4A
Other languages
English (en)
Other versions
CN107480141B (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.)
Nanjing University
Original Assignee
Nanjing University
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 Nanjing University filed Critical Nanjing University
Priority to CN201710753984.4A priority Critical patent/CN107480141B/zh
Publication of CN107480141A publication Critical patent/CN107480141A/zh
Application granted granted Critical
Publication of CN107480141B publication Critical patent/CN107480141B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/205Parsing
    • 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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Quality & Reliability (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Machine Translation (AREA)

Abstract

本发明公开了一种基于文本和开发者活跃度的软件缺陷辅助分派方法,通过考虑缺陷报告的文本信息以及开发者的活跃程度,一方面利用双向循环网络加池化方法提取缺陷报告的文本特征,一方面利用单向循环网络提取特定时刻的开发者活跃度特征,并融合两者,给出了一个新的基于缺陷报告文本和开发者活跃度的缺陷分派模型,从而较好地提高了辅助缺陷分派准确率低的问题。在Eclipse等四个不同的开源项目数据集上的实验结果表明,本方法较同类工作在缺陷分派预测准确率上有显著提升。

Description

一种基于文本和开发者活跃度的软件缺陷辅助分派方法
技术领域
本发明涉及一种基于文本和开发者活跃度的软件缺陷辅助分派方法,属于软件辅助缺陷分派技术领域。本发明利用包含词序关系的文本信息,以及开发者活跃度信息,基于循环神经网络训练模型,有效增强了对新缺陷报告分派开发者的能力,提高了辅助缺陷分派系统的推荐精度。
背景技术
近年来,随着软件规模不断扩大,大型软件项目往往使用缺陷追踪系统进行统一管理。当一份缺陷报告提交到缺陷追踪系统,管理人员(高级开发者或者项目负责人)需要浏览缺陷报告,并为其选择适合的开发者。这种为缺陷报告指定开发者的过程,被称为缺陷分派。
然而,缺陷分派是一项耗时耗力的事情。一方面,大型项目每天收到的缺陷报告数量较多,如Eclipse项目平均每天收到91份缺陷报告、Redhat项目平均每天收到222份缺陷报告;另一方面,大型项目的开发与维护往往需要大量的开发者,对于Eclipse、Mozilla项目,分别有超过1800名开发者参与到缺陷修复的工作中。如果由人工进行缺陷分派,会消耗大量的时间和人力资源。
为解决此问题,一种可行的办法是辅助缺陷分派,即通过统计、学习历史数据,自动地为新的缺陷报告推荐开发者。目前主流的辅助缺陷分派方法,主要使用缺陷报告的文本和元数据信息。文本信息方面,主要包括用户对缺陷的类型、引发缺陷的步骤等自然文本描述,很多方法使用向量空间模型,将缺陷报告的文本信息表示为单词计数的向量;另外一些方法则使用主题模型,利用单词在文本中的共现关系将文档表示为不同主题下的分布。元数据信息方面,主要包括产品、组件、操作系统类型、平台等字段,这些字段可以由用户在提交缺陷报告时,通过列表的方式选择,该信息对开发者有着较强的划分作用,近期的方法利用了这些信息进一步提高了辅助缺陷分派的准确率。
然而,目前的辅助缺陷分派技术依然存在着一定的不足,主要体现在如下两个方面。首先,自然语言文本更强调文字序列中前后元素之间的相互影响,元素之间次序的不同会导致文本含义的变化,而现有的缺陷分派方法都没有考虑词序信息。其次,已有工作大多忽略了对开发者活跃度的考虑,使得对具有相似特征的开发者进行缺陷报告分派预测时表现较差。
综合上述两个问题,本发明采用分类的方法,考虑了文本词序和开发者活跃度,给出了一个新的辅助缺陷分派模型AutoTriager。通过循环神经网络提取文本和开发者活跃度的高层特征,并将高层特征融合,共同为新缺陷报告预测适合的开发者。
发明内容
发明目的:由于目前主流的辅助缺陷分派方法,在文本特征的刻画上未考虑词序关系,且难以区分具有相似特征的开发者,预测准确率较低。而开发者在不同时间段,具有不同的活跃程度。为此,本发明同时考虑了文本词序和开发者活跃度,有效地提高了辅助缺陷分派的预测准确率。
许多大型软件项目都使用缺陷追踪系统。一方面,用户提交的缺陷报告采用自然语言描述,其词序关系的不同会导致文本含义的变化;另一方面,负责修复缺陷的开发者受工作安排、个人兴趣等影响,在不同时间段,对不同的领域有不同的活跃程度。本发明将两项观察进行建模,提出了辅助缺陷分派模型——AutoTriager。
技术方案:一种基于文本和开发者活跃度的软件缺陷辅助分派方法,分为训练和推荐两个阶段:训练阶段,通过学习历史已经包含修复开发者的缺陷报告建立模型;预测阶段,向模型输入新的、未分派的缺陷报告,模型将输出候选开发者列表。
首先需要从缺陷报告中提取原始信息;原始信息包括:保留词序的文本信息,以及按时间顺序排列的开发者修复活动序列信息。随后,在训练阶段,将已知修复的开发者作为类别,将原始信息输入到一个深度神经网络中,原始信息被转换为高层特征,通过梯度下降的方式不断调整深度神经网络的参数,最终得到一个预测模型;在预测阶段,深度神经网络的参数被固定,原始信息输入其中,经过一系列的运算,最终得到候选开发者列表。
在训练数据中,令bi表示第i份缺陷报告,ali表示第i份缺陷报告提交时开发者的活动序列,di表示真实修复第i份缺陷报告的开发者,则模型可以表示为一个预测函数:
F:F(bi,ali)→di
具体而言,需要构造一个评分函数s,为表达简洁,设θ为模型参数的集合,当θ确定时,评分函数sθ也确定了,对特定的缺陷报告,为每一位开发者评分,形式化可定义为:
sθ(d,br,subal(al,pc))
其中d表示特定开发者;缺陷报告b=(br,pc),br表示文本信息,pc表示产品、模块信息;函数subal(al,pc)输出特定pc下的开发者活动序列;θ为模型参数的集合,需要在训练过程学习。
在此基础上,可以定义预测函数F为:
F(b,al)=argmaxd∈D(P(d|br,subal(al,pc)))
其中函数P将特定开发者d的得分归一化,分母为所有开发者集合D的得分的对数和,以表征开发者对缺陷报告适合程度的概率。需注意,此处预测函数F,表达为选取最适合的开发者,而在实际使用中,可以根据函数P输出的概率向量,得到更为详细的开发者适合程度排名序列。
模型的结构,依赖于评分函数sθ的构造方法,本方法采用的构造方式为:使用两个循环神经网络,对输入的文本信息、开发者活动序列信息进行高层特征提取,并将其融合以共同预测适合的开发者。模型包括输入层、特征提取层、特征融合层与输出层。输入层完成输入原始数据的数字化建模,特征提取层对文本信息和开发者活跃度进行高层特征的提取,特征融合层将提取到的文本特征和活跃度特征进行融合,输出层预测适合于当前缺陷报告的开发者。
首先,为将原始数据输入到神经网络中,需对其进行数字化建模。由于一位有效码在文本处理中的有效性,且能够节省嵌入方式学习的时间,因此本发明将原始数据转化为一位有效码输入。即使用K位非零即一的状态向量来对K个状态进行编码,并且在任意时候只有一位有效。例如eclipse编号519380的缺陷报告的标题为"type inference problem",假设词汇表为:
{"inference","java","problem","type"}
那么该句的一位有效码可以表示为:
x=[[0 0 0 1],[1 0 0 0],[0 0 1 0]]
其次,提取高层特征,分为文本的高层特征提取和活跃度高层特征的提取。
文本的高层特征提取,即对应函数G:
hbr=G(br)
此函数输入文本信息br,输出文本信息的高层特征hbr。需注意,为利用词序关系,文本信息需按原有出现次序输入。
经一位有效编码的单词,输入LSTM单元。每个LSTM单元对应两个输出,一个表示当前结果;另一表示LSTM的内部状态,该状态会向后传递给其后的LSTM单元,即图中的向右箭头。每一个LSTM单元的输出,输入到最大池化层,该层对输入向量的每一维度,输出该维度上最大的值。
文本的高层特征提取包括文本正向特征的提取、文本逆向特征的提取。正向特征以单词原本顺序输入,逆向特征则以相反的顺序输入。逆向特征解决了文本中先出现的单词含义依赖于后出现单词的情况,更加全面地表示了文本特征。池化后得到的两个特征向量通过拼接,作为当前文本的高层特征。
开发者活跃度的高层特征提取,即对应函数H:
hal=H(subal(al,pc))
此函数输入当前时刻对应产品、模块下开发者活动序列信息subal(al,pc),输出开发者活跃度的高层特征。该部分主要涉及开发者活动序列信息的获取,以及通过神经网络进行特征提取,以下依次进行说明。
从缺陷报告获取开发者活动序列信息,涉及多份缺陷报告。首先,al作为当前时刻所有开发者的活动序列,需要收集当前时刻向前一段时间的开发者活动记录,并按照时间先后顺序排序,由于方法要寻找适合的开发者,故此处只关注开发者修复缺陷报告的活动记录。其次,由上文所述,元数据信息的使用能提高预测准确率,故本方法主要关注元数据中产品和组件的组合pc,并且只提取同当前缺陷报告相同pc下的开发者活动序列。因此,al中需要记录每条活动对应的pc,则subal在获得输入pc后,会从al中查找并返回pc相同的子序列,返回的子序列按时间顺序排列。若无法找到相应的开发者活动序列,则将开发者活动序列列表置空。
通过神经网络提取开发者活跃度的高层特征,经一位有效编码的开发者,按时间顺序输入到标准的RNN单元。相比于LSTM,标准RNN结构本质上是多层相同的非线性函数的嵌套形式,因此更容易忘记较早的信息。而对于活跃度,期望较近期的开发者活动序列影响较大,较早期的开发者活动序列影响较小。标准RNN符合活跃度期望的性质,并且计算量相比LSTM更低。开发者活跃度的高层特征,与文本的高层特征不同,其更加关注最终的活跃情况,故以最后一个标准RNN单元的输出作为活跃度的高层特征。
再次,文本特征与活跃度特征的融合:
c=hbr⊙hal
融合操作⊙,为两个特征向量的逐个元素(point-wise)乘积。
最后,对于特定的开发者d,给出对应的评分函数:
sθ(d,br,subal(al,pc))=c*w+b
函数中,θ表示了模型参数的集合,包括了特征提取阶段的参数,以及进行分类的全连接层的参数w、b,其中w为一行权重向量,b为一个特定数值。
本发明采用分类的方法来选取适合的开发者,即每一个开发者都是一个类别。为了完成高层特征到类别的转换,本发明最后设置一个指数化归一化(softmax)层,用于将每个分类的评分值转换为概率值,其具体形式可由上文的函数P表示。
为计算梯度以调整模型参数,需指定分类的损失函数,采用了交叉熵作为损失函数。对于一批数量为n的数据,假定其输入为x,损失函数为:
其中,y表示期望的输出,即本例中真实修复的开发者;y'表示神经网络实际的输出。
对于训练数据,真实修复的开发者是已知的,采用一位有效码的方式进行表示。对于预测阶段,则会得到一个开发者适合程度的分布,对该分布进行从大到小的排序,便可以作为适合的开发者序列。
有益效果:与基于空间向量模型的文本关键词方法和基于文本主题模型的方法相比,本发明利用文本信息及开发者活跃度信息,提出了一种有效的辅助缺陷分派流程,且提出流程中的基本模型AutoTriager,并将其运用在大型开源软件项目(如Eclipse,Mozilla等)缺陷追踪系统中,提高了缺陷分派的准确率和效率。
附图说明
图1为基于文本和开发者活跃度的软件缺陷辅助分派方法的工作流图;
图2为模型AutoTriager的网络层次图;
图3为特征提取的神经网络结构图,(a)为文本高层特征的提取方式,(b)为活跃度高层特征的提取方式。
具体实施方式
下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
一种基于文本和开发者活跃度的软件缺陷辅助分派方法,分为训练和推荐两个阶段:训练阶段,通过学习历史已经包含修复开发者的缺陷报告建立模型;预测阶段,向模型输入新的、未分派的缺陷报告,模型将输出候选开发者列表。
首先获取缺陷追踪系统中已修复的缺陷报告,从缺陷报告中提取原始信息;原始信息包括:保留词序的文本信息,以及按时间顺序排列的开发者修复活动序列信息。随后,在训练阶段,这些原始信息与对应的已知修复的开发者,一同输入到一个深度神经网络中,原始信息被转换为高层特征,已知修复的开发者作为类别,通过损失函数计算梯度,以逆向传播的方式不断更新深度神经网络的参数,最终确定所有参数,即得到一个预测模型;在预测阶段,深度神经网络模型的参数被固定,将新的、未修复的缺陷报告的文本信息,以及开发者活动序列信息输入其中,经与训练相同的计算公式,最终计算得到候选开发者的排序。
文本信息包括标题、缺陷内容的描述文本;所述开发者的活动序列信息为一定时间区间内,同一产品、模块下开发者的修复序列信息。
在训练数据中,令bi表示第i份缺陷报告,ali表示第i份缺陷报告提交时开发者的活动序列,di表示真实修复第i份缺陷报告的开发者,则模型可以表示为一个预测函数:
F:F(bi,ali)→di
具体而言,需要构造一个评分函数s,为表达简洁,设θ为模型参数的集合,当θ确定时,评分函数sθ也确定了,对特定的缺陷报告,为每一位开发者评分,形式化可定义为:
sθ(d,br,subal(al,pc))
其中d表示特定开发者;缺陷报告b=(br,pc),br表示文本信息,pc表示产品、模块信息;令al表示当前时刻所有开发者的活动序列,定义函数subal(al,pc)为输出特定pc下的开发者活动序列,输入当前时刻开发者的活动序列全集al,以及特定的产品、模块组合pc,得到特定pc下的开发者修复序列;θ为模型参数的集合,需要在训练过程学习。
在此基础上,可以定义预测函数F为:
F(b,al)=argmaxd∈D(P(d|br,subal(al,pc)))
其中函数P将开发者d的得分归一化,分母为所有开发者集合D的得分的对数和,以表征开发者对缺陷报告适合程度的概率。需注意,此处预测函数F,表达为选取最适合的开发者,而在实际使用中,可以根据函数P输出的概率向量,得到更为详细的开发者适合程度排名序列。
模型的结构,依赖于评分函数sθ的构造方法,本方法采用的构造方式为:使用两个循环神经网络,对输入的文本信息、开发者活动序列信息进行高层特征提取,并将其融合以共同预测适合的开发者。该模型的示意图见图2。如图所示,模型包括输入层、特征提取层、特征融合层与输出层。输入层完成输入原始数据的数字化建模,特征提取层对文本信息和开发者活跃度进行高层特征的提取,特征融合层将提取到的文本特征和活跃度特征进行融合,输出层预测适合于当前缺陷报告的开发者。
首先,为将原始数据输入到神经网络中,需对其进行数字化建模。由于一位有效码在文本处理中的有效性,且能够节省嵌入方式学习的时间,因此本发明将原始数据转化为一位有效码输入。即使用K位非零即一的状态向量来对K个状态进行编码,并且在任意时候只有一位有效。例如eclipse编号519380的缺陷报告的标题为"type inference problem",假设词汇表为:
{"inference","java","problem","type"}
那么该句的一位有效码可以表示为:
x=[[0 0 0 1],[1 0 0 0],[0 0 1 0]]
其次,提取高层特征,如图3所示,(a)为文本高层特征的提取方式,(b)为活跃度高层特征的提取方式。以下分两部分依次说明。
文本的高层特征提取,即对应函数G:
hbr=G(br)
G表示了利用双向循环网络加池化方法提取缺陷报告的文本特征,此函数输入文本信息br,输出文本信息的高层特征hbr。需注意,为利用词序关系,文本信息需按原有出现次序输入。
图3(a),最下层的圆形表示经一位有效编码的单词,输入到其上方菱形表示的LSTM单元。每个LSTM单元对应两个输出,一个表示当前结果,即图中的向上箭头;另一表示LSTM的内部状态,该状态会向后传递给其后的LSTM单元,即图中的向右箭头。每一个LSTM单元的输出,输入到再上长形方块表示的最大池化层,该层对输入向量的每一维度,输出该维度上最大的值。
图3(a)中的左右两侧,分别对应了文本正向特征、逆向特征的提取。正向特征以单词原本顺序输入,逆向特征则以相反的顺序输入。逆向特征解决了文本中先出现的单词含义依赖于后出现单词的情况,更加全面地表示了文本特征。池化后得到的两个特征向量通过拼接,作为当前文本的高层特征。
开发者活跃度的高层特征提取,即对应函数H,H表示了利用单向循环网络提取特定时刻的开发者活跃度特征:
hal=H(subal(al,pc))
此函数输入当前时刻对应产品、模块下开发者活动序列信息subal(al,pc),输出开发者活跃度的高层特征。该部分主要涉及开发者活动序列信息的获取,以及通过神经网络进行特征提取,以下依次进行说明。
从缺陷报告获取开发者活动序列信息,涉及多份缺陷报告。首先,al作为当前时刻所有开发者的活动序列,需要收集当前时刻向前一段时间的开发者活动记录,并按照时间先后顺序排序,由于方法要寻找适合的开发者,故此处只关注开发者修复缺陷报告的活动记录。其次,由上文所述,元数据信息的使用能提高预测准确率,故本方法主要关注元数据中产品和组件的组合pc,并且只提取同当前缺陷报告相同pc下的开发者活动序列。因此,al中需要记录每条活动对应的pc,则subal在获得输入pc后,会从al中查找并返回pc相同的子序列,返回的子序列按时间顺序排列。若无法找到相应的开发者活动序列,则将开发者活动序列列表置空。
通过神经网络提取开发者活跃度的高层特征,对应图3(b)。图中圆形表示经一位有效编码的开发者,按时间顺序输入到上方菱形表示标准的RNN单元。相比于LSTM,标准RNN结构本质上是多层相同的非线性函数的嵌套形式,因此更容易忘记较早的信息。而对于活跃度,期望较近期的开发者活动序列影响较大,较早期的开发者活动序列影响较小。标准RNN符合活跃度期望的性质,并且计算量相比LSTM更低。开发者活跃度的高层特征,与文本的高层特征不同,其更加关注最终的活跃情况,故以最后一个标准RNN单元的输出作为活跃度的高层特征。
再次,文本特征与活跃度特征的融合:
c=hbr⊙hal
融合操作⊙,为两个特征向量的逐个元素(point-wise)乘积。
最后,对于特定的开发者d,给出对应的评分函数:
sθ(d,br,subal(al,pc))=c*w+b
函数中,θ表示了模型的参数集合,包括了特征提取阶段的参数,以及进行分类的全连接层的参数。w为一行权重向量,b为一个特定数值,两者作为模型的参数,对于每一个开发者皆存在一组w和b。
本发明采用分类的方法来选取适合的开发者,即每一个开发者都是一个类别。为了完成高层特征到类别的转换,本发明最后设置一个指数化归一化(softmax)层,用于将每个分类的评分值转换为概率值,其具体形式可由上文的函数P表示。
为计算梯度以调整模型参数,需指定分类的损失函数,采用了交叉熵作为损失函数。对于一批数量为n的数据,假定其输入为x,损失函数为:
其中,y表示期望的输出,即本例中真实修复的开发者;y'表示神经网络实际的输出。
对于训练数据,真实修复的开发者是已知的,采用一位有效码的方式进行表示。对于预测阶段,则会得到一个开发者适合程度的分布,对该分布进行从大到小的排序,便可以作为适合的开发者序列。
实例一,本发明的AutoTriager模型的缺陷分派能力的量化评测
1、输入输出数据说明
本发明的方法被运用于Eclipse、Mozilla等真实数据集上。所选用的实验对象,皆为规模较大、且持续维护的开源项目。所有缺陷报告皆从对应的缺陷追踪系统获取,且只收集已经确认修复的缺陷报告(即解决方案为FIXED,状态为CLOSED、RESOLVED、VERIFIED的缺陷报告。Redhat的管理方式不同,其缺陷追踪系统没有设置FIXED,取而代之的是CURRENT_RELEASE)。
为了进行实验,需要从每一份缺陷报告中获取修复的开发者,文本信息和开发者活动序列信息。文本信息包括标题、详细描述,通过分句、分词、词根化,并且过滤掉停用词的方式进行预处理。同时排除了修复次数少于10次的开发者以减少噪声。另外,删除了出现次数过多(超过50%文档出现)、过少的词(小于10次),以减少噪声并加快模型执行速度。单词会保留文本中的原始顺序,并转换为一位有效码形式(实现中,为了减少内存开销,单词是在被输入模型时,才被转换)。开发者活动序列信息收集了同当前发明的产品和组件信息相同的开发者活动序列,最大的记录发明数为25条(如果超过上限,则取最近的25条),时间区间为当前时间节点向前推移3个月(观察发现3个月中80%的开发者活动序列能达到20条以上)。
实验将被分派者的类别视为发明的修复者。并观察到,在大量缺陷报告中存在无效的开发者名(这类名称可能代表了团体名称,或者特殊含义,如Eclipse中AJDT-inbox、Platform-UI-Inbox、Eclipse Management Organization,Netbeans中issues@ide、issues@platform,Mozilla中MSU Capstone Team,Redhat中RHUI Bug List、RHOS Maint等),这些特殊含义的名称,只对于项目的从属人员有一定的意义。由于这些名称并非真实的开发者,因此实验剔除了这些缺陷报告。预处理之后的结果如表1所示。
为了模拟现实中的场景,本发明采用时间顺序的方式将数据集分割。首先,将每个项目的缺陷报告按照提交时间进行排列,然后将它们分割为没有重叠且尺寸相同的11个窗口,如此得到10叠符合真实应用的训练、测试数据。即对于第一叠数据,使用第一个窗口的数据进行训练,第二个窗口的数据进行测试;对于第二叠,使用前两个窗口的数据进行训练,第三个窗口的数据进行测试。以此类推,每个项目含有10叠数据以供验证。
综上所述,本方法的输入是一组缺陷报告的文本信息(包括标题,详细描述),以及开发者在某产品、模块下的修复序列信息;输出是本发明AutoTriager模型的缺陷分派推荐质量评测指标。
2、模型训练与预测过程
模型主要分为训练阶段和测试阶段。
训练阶段通过从已知修复开发者的数据中学习,通过最小化目标函数的方式,不断优化模型参数。在具体的训练算法实现过程中,可采用Adam优化方法对模型参数进行学习,该方法可以动态的调节学习率,加快学习速度。此外,本发明还可采用dropout机制,通过每次训练时随机的让网络中的某些节点不工作,以避免过拟合,进一步提高预测阶段效果。
预测阶段,模型的参数保持不变,输入一条新的、未修复的缺陷报告,模型计算当前已知的所有开发者的适合程度,并按照适合程度排序,得到推荐的开发者列表。预测时,应关闭dropout机制。
由于模型无法对训练时不存在的开发者进行预测,因而在新增开发者并且新增的开发者修复过一定数量的报告后,应当重新对模型进行训练。
3、输出结果
考虑到评估的度量,我们使用Accuracy@N(准确率)作为有效性的比较标准。之所以选择准确率作为评估指标,是因为对于缺陷分派问题,一份缺陷报告往往只有一名开发者负责修复,故考查真实的修复开发者是否在推荐列表当中,意义最为明显。对于推荐开发者的数量N,实验选择N=1和N=5,因为这样的选择不会对用户(管理人员)造成过多的负担。准确率Accuracy@N的定义如下:
其中,M是数据集中缺陷报告的数量,hit(n)i是一个非0即1的函数,若真实修复的开发者在推荐列表中,则返回1,否则返回0。
实验将AutoTriager同基准方法进行对比,计算并评估了Accuracy@1和Accuracy@5。对比的基准方法如下:SVM使用空间向量模型、以单词的计数表示文本信息,采用分类的方式推荐适合的开发者;Yang的方法,使用主题模型LDA,并通过元数据(产品、模块、严重性、优先级)对候选的开发者进行过滤的;TopicMinerMTM一方面结合元数据(产品、模块)修改了主题模型,一方面通过统计开发者在产品、模块内修复过的各个主题的占比,进而为新的缺陷报告推荐开发者。
最终结果如表2、表3所示,展示了本发明方法同基准方法比较的结果。
表2展示各方法在Accuracy@1上的平均准确率,表3展示Accuracy@5上的平均准确率。可以看到AutoTriager相较于基准方法有着一定的提高。具体来说,以四个实验对象的结果平均值,AutoTriager在Accuracy@1和Accuracy@5两个指标上相较于SVM分别提升了60%、70%;相较于Yang的方法分别提升了23%、17%;相较于TopicMinerMTM方法分别提升了12%、4%。
可以看到本发明方法在Mozilla数据集上效果较差,通过人工观察,发现这是由于Mozilla项目的人员流动较大,新加入的开发者数量较多。而本发明采用的分类方法,在模型固定之后,无法预测新加入的开发者。对于其他对比方法,也存在着类似的问题。
另外,在Accuracy@5上,本发明的方法同TopicMinerMTM差距很小。一方面原因在于此时准确率已经较高,由于无法预测新加入的开发者,故理论最大准确率要低于100%,如Eclipse项目的平均最大命中率只有91%;另一方面,TopicMinerMTM能够在测试时,不断对开发者的状态进行更新,更容易预测到新加入的开发者。
在所有方法中,SVM方法的结果较差,原因在于其只使用了文本信息。而很多开发者在缺陷的修复经验都很相似,只使用文本信息难以加以区分。Yang同TopicMinerMTM的方法,由于考虑了元数据的信息,利用元数据对开发者进行了多一次的筛选,效果有所提升。本发明的方法则在此基础上,建模了活跃度,更倾向将缺陷分派给当前更活跃的开发者,进一步提高了预测的准确率。
通过对实验结果的分析,证明了本发明能更有效的完成软件缺陷分派任务,证明了开发者活跃度在软件缺陷分派任务中的有效性,且证明了基于文本和开发者活跃度的软件缺陷辅助分派流程的有效性。
表1缺陷报告的统计量
名称 时间区间 缺陷报告 词汇表 开发者 剩余缺陷报告
Eclipse 2008.1~2016.12 166,081 12,916 1,015 115,561
Netbeans 2008.1~2016.9 64,851 8,146 219 58,876
Mozilla 2008.1~2014.6 263,285 17,331 1,426 208,402
Redhat 2008.1~2017.1 108,685 14,148 1,245 90,012
表2所有数据集上Accuracy@1的结果比较
SVM Yang TopicMinerMTM AutoTriager
Eclipse 0.28057 0.32124 0.36895 0.41655
Netbeans 0.29316 0.3529 0.42376 0.49301
Mozilla 0.20431 0.26069 0.29043 0.32315
Redhat 0.22764 0.39825 0.4591 0.4858
表3所有数据集上Accuracy@5的结果比较
SVM Yang TopicMinerMTM AutoTriager
Eclipse 0.50385 0.71458 0.80368 0.80385
Netbeans 0.52439 0.68196 0.80095 0.80469
Mozilla 0.41945 0.61752 0.6508 0.70337
Redhat 0.41605 0.7552 0.81981 0.84656

Claims (5)

1.一种基于文本和开发者活跃度的软件缺陷辅助分派方法,其特征在于,分为训练和推荐两个阶段:训练阶段,通过学习历史已经包含修复开发者的缺陷报告建立模型;预测阶段,向模型输入新的、未分派的缺陷报告,模型将输出候选开发者列表。
2.如权利要求1所述的基于文本和开发者活跃度的软件缺陷辅助分派方法,其特征在于,首先获取缺陷追踪系统中已修复的缺陷报告,对数据进行预处理,提取其文本信息,以及开发者活动序列信息;
在训练阶段,训练深度神经网络模型;将文本信息、开发者活动序列信息一同输入到一个深度神经网络中,令缺陷报告b=(br,pc),其中br表示文本信息,pc表示产品、模块信息;又令al表示当前时刻所有开发者的活动序列;定义函数:
subal(al,pc)
输入当前时刻开发者的活动序列全集al,以及特定的产品、模块组合pc,得到特定pc下的开发者修复序列;
随后,模型使用了两个子神经网络,提取文本信息和开发者活动序列信息的高层特征:
hbr=G(br)
hal=H(subal(al,pc))
其中,G表示了利用双向循环网络加池化方法提取缺陷报告的文本特征,H表示了利用单向循环网络提取特定时刻的开发者活跃度特征;
其次,将两部分高层特征进行拼接:
c=Combine(hbr,hal)
函数Combine输入两个高层特征向量,输出一个经过融合的向量;
最终,对某特定开发者d的评分函数,表示为:
sθ(d,br,subal(al,pc))=c*w+b
其中,w为一行权重向量,b为一个特定数值,两者作为模型的参数,对于每一个开发者皆存在一组w和b;
利用历史已修复数据对此深度神经网络模型进行训练,并基于训练完成的模型进行新的缺陷报告的修复者预测。
3.如权利要求1所述的基于文本和开发者活跃度的软件缺陷辅助分派方法,其特征在于,定义预测函数F为:
<mrow> <mi>P</mi> <mrow> <mo>(</mo> <mi>d</mi> <mo>|</mo> <mi>b</mi> <mo>,</mo> <mi>a</mi> <mi>l</mi> <mo>)</mo> </mrow> <mo>=</mo> <mfrac> <mrow> <mi>exp</mi> <mrow> <mo>(</mo> <msub> <mi>s</mi> <mi>&amp;theta;</mi> </msub> <mo>(</mo> <mi>d</mi> <mo>,</mo> <mi>b</mi> <mi>r</mi> <mo>,</mo> <mi>s</mi> <mi>u</mi> <mi>b</mi> <mi>a</mi> <mi>l</mi> <mo>(</mo> <mi>a</mi> <mi>l</mi> <mo>,</mo> <mi>p</mi> <mi>c</mi> <mo>)</mo> </mrow> <mo>)</mo> <mo>)</mo> </mrow> <mrow> <msub> <mi>&amp;Sigma;</mi> <mrow> <msup> <mi>d</mi> <mo>&amp;prime;</mo> </msup> <mo>&amp;Element;</mo> <mi>D</mi> </mrow> </msub> <mi>exp</mi> <mrow> <mo>(</mo> <msub> <mi>s</mi> <mi>&amp;theta;</mi> </msub> <mo>(</mo> <msup> <mi>d</mi> <mo>&amp;prime;</mo> </msup> <mo>,</mo> <mi>b</mi> <mi>r</mi> <mo>,</mo> <mi>s</mi> <mi>u</mi> <mi>b</mi> <mi>a</mi> <mi>l</mi> <mo>(</mo> <mi>a</mi> <mi>l</mi> <mo>,</mo> <mi>p</mi> <mi>c</mi> <mo>)</mo> </mrow> <mo>)</mo> <mo>)</mo> </mrow> </mfrac> </mrow>
F(b,al)=argmaxd∈D(P(d|br,subal(al,pc)))
其中d、d′表示特定开发者,D表示所有开发者的集合,函数P将开发者的得分归一化,以表征开发者对缺陷报告适合程度的概率。
4.如权利要求1所述的基于文本和开发者活跃度的软件缺陷辅助分派方法,其特征在于,文本的高层特征提取过程为:
经一位有效编码的单词,输入LSTM单元;每个LSTM单元对应两个输出,一个表示当前结果;另一表示LSTM的内部状态,该状态会向后传递给其后的LSTM单元,即图中的向右箭头;每一个LSTM单元的输出,输入到最大池化层,该层对输入向量的每一维度,输出该维度上最大的值;
文本的高层特征提取包括文本正向特征的提取、文本逆向特征的提取;正向特征以单词原本顺序输入,逆向特征则以相反的顺序输入;池化后得到的两个特征向量通过拼接,作为当前文本的高层特征。
5.如权利要求1所述的基于文本和开发者活跃度的软件缺陷辅助分派方法,其特征在于,开发者活跃度的高层特征提取,主要涉及开发者活动序列信息的获取,以及通过神经网络进行特征提取;
从缺陷报告获取开发者活动序列信息,涉及多份缺陷报告;首先,al作为当前时刻所有开发者的活动序列,需要收集当前时刻向前一段时间的开发者活动记录,并按照时间先后顺序排序,由于方法要寻找适合的开发者,故此处只关注开发者修复缺陷报告的活动记录;其次,元数据信息的使用能提高预测准确率,故本方法主要关注元数据中产品和组件的组合pc,并且只提取同当前缺陷报告相同pc下的开发者活动序列;因此,al中需要记录每条活动对应的pc,则subal在获得输入pc后,会从al中查找并返回pc相同的子序列,返回的子序列按时间顺序排列;若无法找到相应的开发者活动序列,则将开发者活动序列列表置空;
经一位有效编码的开发者,按时间顺序输入到标准的RNN单元,以最后一个标准RNN单元的输出作为活跃度的高层特征。
CN201710753984.4A 2017-08-29 2017-08-29 一种基于文本和开发者活跃度的软件缺陷辅助分派方法 Active CN107480141B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710753984.4A CN107480141B (zh) 2017-08-29 2017-08-29 一种基于文本和开发者活跃度的软件缺陷辅助分派方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710753984.4A CN107480141B (zh) 2017-08-29 2017-08-29 一种基于文本和开发者活跃度的软件缺陷辅助分派方法

Publications (2)

Publication Number Publication Date
CN107480141A true CN107480141A (zh) 2017-12-15
CN107480141B CN107480141B (zh) 2020-09-18

Family

ID=60603876

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710753984.4A Active CN107480141B (zh) 2017-08-29 2017-08-29 一种基于文本和开发者活跃度的软件缺陷辅助分派方法

Country Status (1)

Country Link
CN (1) CN107480141B (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108364028A (zh) * 2018-03-06 2018-08-03 中国科学院信息工程研究所 一种基于深度学习的互联网网站自动分类方法
CN109446414A (zh) * 2018-09-28 2019-03-08 武汉大学 一种基于神经网络分类的软件信息站点快速标签推荐方法
CN109615241A (zh) * 2018-12-13 2019-04-12 大连海事大学 一种基于卷积和循环神经网络的软件Bug分派方法
CN109615242A (zh) * 2018-12-13 2019-04-12 大连海事大学 一种基于循环神经网络和代价敏感的软件bug分派方法
CN110490547A (zh) * 2019-08-13 2019-11-22 北京航空航天大学 办公系统智能化技术
CN110489667A (zh) * 2019-08-20 2019-11-22 北京航空航天大学 基于用户画像的智能公文流转技术
CN111309907A (zh) * 2020-02-10 2020-06-19 大连海事大学 一种基于深度强化学习的实时Bug分派方法
WO2020210947A1 (en) * 2019-04-15 2020-10-22 Entit Software Llc Using machine learning to assign developers to software defects
CN113138920A (zh) * 2021-04-20 2021-07-20 中国科学院软件研究所 基于知识图谱与语义角色标注的软件缺陷报告分派方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101390220B1 (ko) * 2012-11-07 2014-04-30 서울시립대학교 산학협력단 소프트웨어 버그 정정을 위한 적합한 개발자 추천 방법 및 장치
CN103970667A (zh) * 2014-05-30 2014-08-06 深圳市茁壮网络股份有限公司 一种基于缺陷管理平台的缺陷分派方法及系统
CN107092596A (zh) * 2017-04-24 2017-08-25 重庆邮电大学 基于attention CNNs和CCR的文本情感分析方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101390220B1 (ko) * 2012-11-07 2014-04-30 서울시립대학교 산학협력단 소프트웨어 버그 정정을 위한 적합한 개발자 추천 방법 및 장치
CN103970667A (zh) * 2014-05-30 2014-08-06 深圳市茁壮网络股份有限公司 一种基于缺陷管理平台的缺陷分派方法及系统
CN107092596A (zh) * 2017-04-24 2017-08-25 重庆邮电大学 基于attention CNNs和CCR的文本情感分析方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
张静: "《基于多特征缺陷再分配图的自动软件缺陷分派方法》", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108364028A (zh) * 2018-03-06 2018-08-03 中国科学院信息工程研究所 一种基于深度学习的互联网网站自动分类方法
CN109446414A (zh) * 2018-09-28 2019-03-08 武汉大学 一种基于神经网络分类的软件信息站点快速标签推荐方法
CN109446414B (zh) * 2018-09-28 2021-08-17 武汉大学 一种基于神经网络分类的软件信息站点快速标签推荐方法
CN109615241A (zh) * 2018-12-13 2019-04-12 大连海事大学 一种基于卷积和循环神经网络的软件Bug分派方法
CN109615242A (zh) * 2018-12-13 2019-04-12 大连海事大学 一种基于循环神经网络和代价敏感的软件bug分派方法
WO2020210947A1 (en) * 2019-04-15 2020-10-22 Entit Software Llc Using machine learning to assign developers to software defects
CN110490547A (zh) * 2019-08-13 2019-11-22 北京航空航天大学 办公系统智能化技术
CN110489667A (zh) * 2019-08-20 2019-11-22 北京航空航天大学 基于用户画像的智能公文流转技术
CN111309907A (zh) * 2020-02-10 2020-06-19 大连海事大学 一种基于深度强化学习的实时Bug分派方法
CN113138920A (zh) * 2021-04-20 2021-07-20 中国科学院软件研究所 基于知识图谱与语义角色标注的软件缺陷报告分派方法及装置
CN113138920B (zh) * 2021-04-20 2022-09-06 中国科学院软件研究所 基于知识图谱与语义角色标注的软件缺陷报告分派方法及装置

Also Published As

Publication number Publication date
CN107480141B (zh) 2020-09-18

Similar Documents

Publication Publication Date Title
CN107480141A (zh) 一种基于文本和开发者活跃度的软件缺陷辅助分派方法
CN107239529A (zh) 一种基于深度学习的舆情热点类别划分方法
CN108595602A (zh) 基于浅层模型与深度模型结合的问句文本分类方法
CN106528528A (zh) 文本情感分析的方法及装置
CN102646095B (zh) 一种基于网页分类信息的对象分类方法和系统
CN109918497A (zh) 一种基于改进textCNN模型的文本分类方法、装置及存储介质
CN105931116A (zh) 基于深度学习机制的自动化信用评分系统及方法
CN105183841A (zh) 大数据环境下结合频繁项集和深度学习的推荐方法
CN110046248A (zh) 用于文本分析的模型训练方法、文本分类方法和装置
CN104285224A (zh) 用于对文本进行分类的方法
CN109101584A (zh) 一种将深度学习与数学分析相结合的句子分类改进方法
CN109598307A (zh) 数据筛选方法、装置、服务器及存储介质
CN108846695A (zh) 终端更换周期的预测方法及装置
Patni et al. Air quality prediction using artificial neural networks
CN116595328B (zh) 一种基于知识图谱的数据评分卡模型智能构建装置及方法
Fong et al. Applying a hybrid model of neural network and decision tree classifier for predicting university admission
Jastrzebska et al. Fuzzy cognitive map-driven comprehensive time-series classification
Guswandi et al. Sistem Pendukung Keputusan Pemilihan Calon Wali Nagari Menggunakan Metode TOPSIS
CN114519508A (zh) 基于时序深度学习和法律文书信息的信用风险评估方法
Oladokun et al. A fuzzy inference based decision support system for solving the university-course admission choice problem
Iraji et al. Students classification with adaptive neuro fuzzy
CN115994459B (zh) 一种海量电网基建项目建设时序优化方法、系统及设备
Cirelli et al. Predictive analytics models for student admission and enrollment
TWI833098B (zh) 智慧品質管理方法、電子裝置及電腦可讀儲存媒體
CN111047011B (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