[0030] 图1是基于自注意力机制的软件缺陷报告分配方法的总体框架。本发明的输入是软件项目的历史缺陷报告各个属性和历史开发人员数据以及需要分配的缺陷报告各个属性数据,输出为针对当前缺陷报告的各个开发人员的推荐概率。本发明包含以下几个步骤:
[0031] 1)整理软件项目的缺陷报告以及开发人员数据;
[0032] 2)对收集完毕的历史缺陷报告数据进行预处理;
[0033] 3)用预处理后的缺陷报告训练神经网络各层参数;
[0034] 4)给定缺陷报告,计算该缺陷与开发人员的匹配程度;
[0035] 5)对开发人员的匹配程度进行排序,推荐匹配程度高的开发人员。
[0036] 进一步地,在步骤1中,整理软件缺陷项目的缺陷报告以及开发人员数据。首先,利用爬虫技术,从缺陷追踪数据库中收集软件项目的历史缺陷报告,收集缺陷报告的决议(Resolution)为已修复的(FIXED)缺陷报告。图2所示是一份已修复的缺陷报告截图,一份完整的缺陷报告包含以下主要内容:摘要、详细描述、所属产品、组件、缺陷报告的修复者以及提交者、缺陷报告的提交时间与修复时间,其中详细描述部分是缺陷报告的提交者对缺陷的具体描述,过滤属性或开发人员字段缺失的缺陷报告,并且把这些数据保存到本地。
[0037] 整理后的缺陷报告包含的信息包括:摘要、详细描述、所属产品、组件、以及缺陷报告的修复者。
[0038] 进一步地,本发明的第2个步骤是对收集完毕的历史数据进行预处理。在数据预处理阶段,把每个缺陷报告对应的摘要、详细描述、产品、组件信息拼接在一起,组成一个文本。然后进行自然语言预处理,将所有字母转换成小写,去除其中包含的html 字符。再进行分词操作,将非英文单词、停用词过滤掉,并且利用正则匹配去除标点符号,再对单词进行词形转换,例如,将“does”、“did”统一转换为“do”。并把缺陷报告中的缩写术语词还原成全拼形式,例如将“SWT”还原成“Standard Widget Toolkit”。最后,将缺陷报告中出现的错误信息还原成自然语言,例如对“org.eclipse.jface.viewers.AbstractTreeViewer.Set SelectionToWiget (AbstractTreeViewer.java:1505)”进行方法名切割,切割后的结果为“org eclipse jface viewers abstract tree viewer set selection to wiget abstract tree viewer java”。
[0039] 进一步地,在步骤3中,神经网络训练参数包含以下部分:
[0040] 嵌入层:需要对缺陷报告中单词的位置信息进行编码,并加入到词向量中,让模型捕获不同位置的单词。可以不同频率地使用正弦函数与余弦函数,
[0041] 将位置p映射为一个dpos维的位置向量,这个向量的第i个元素的数值就是PEi(p)。
[0042] 在位置p+k的向量可以表示成在位置p的向量的线性变换,这提供了表达相对位置信息的可能性。最后,将所求得的位置嵌入向量与词向量进行求和,得到带有位置信息的嵌入向量。
[0043] 自注意力层:如图3所示,采用多头(Multi‑Head)自注意力模型,其不仅仅只是计算一次注意力,而是多次并行地通过缩放的点积注意力。如图3所示,该模型将V、 K、Q通过三个投影矩阵进行映射,再把这个过程重复h次,得到h个头。然后将h次的缩放点积注意力结果进行拼接,最后进行一次线性变换,得到的值作为多头注意力的结果。可以看到,多头注意力的不同之处在于进行了h次计算而不是只计算一次,这样的目的在于可以允许模型在不同的表示子空间里学习到文本序列的相关信息。如图4所示,单个头的注意力计算方式如公式所示:
[0044] headi=Attention(QWiQ,KWiK,VWiV)
[0045] 其中WiQ、WiK、WiV是投影矩阵, 通过多头注意力计算方式,最后得到的序列,即为所求的注意力值。
[0046] 在多头注意力模型中,采用了缩放点积注意力机制。缩放点积注意力机制是多头注意力模型的核心。如图4所示,该模型的输入由维度为dk的查询(Query)、键(Key) 以及维度为dv的值(Value)组成。Q、K、V分别代表Query、Key、Value,最后的输出结果是一个的矩阵。为求Query与Key的相似度,为了避免其值过大,再进行缩放。最后通过将相似度与对应的值(Value)相乘,得到最终的注意力值。
[0047] 进一步,在步骤4中,将历史缺陷报告训练神经网络完毕后,把待分配的缺陷报告经过同样的预处理方法,输入到神经网络中,不进行参数调整,进行自注意力层的计算,可以得到表征整个缺陷报告信息的向量[ClS]。将自注意力层计算后的[CLS]向量输入到softmax输出层。此[CLS]向量与代表每位待分配开发人员的神经元全连接,softmax公式如下所示:
[0048]
[0049] 其中i代表第i位开发人员,此输出可以看作该缺陷报告与开发人员的匹配度。
[0050] 进一步,在步骤5中,可以根据开发人员与缺陷报告的匹配度进行降序排序,完成缺陷报告分配。基于上一步骤中的匹配度从大到小对开发人员进行排序,排在前列的开发人员将被优先分配到此缺陷报告。