Page 133 - 《软件学报》2025年第9期
P. 133

4044                                                       软件学报  2025  年第  36  卷第  9  期



                                                             ∗T
                                                        ˆ t ij = p ·q ∗                              (12)
                                                             b i  d j
                 其中,  ˆ t ij  为相关性评分, 表示开发人员与   bug  潜在的相关性. 具体来讲,     ˆ t ij  类似于原始数据集中的标注数据  , 一个
                                                                                                  t ij
                 未解决的    bug  b i  将被分配给与  b i  具有最高相关性的开发人员  . 为了能够从正样本和负样本中捕获相关性特征,
                                                                 d j
                 CBT-MF  引入了  BPR [38]  作为预测时的损失函数:

                                                     ∑
                                                             (     )
                                                L BPR =  −logσ ˆ t i,j − ˆ t k,j +λ||Ξ|| 2           (13)
                                                                        2
                                                      S
                                                   {
                                                                      }
                 其中,  σ(·) 是  Sigmoid  函数, 而三元组集   S = (i, j,k) | t i,j = {1,2},t k,j = 3  表示了成对的训练数据, 包括为开发人员  d j
                 提供的一个正采样、原始         bug  b i  及一个负采样  bug  ,                       λ 为防止过拟合控制参数.
                                                         b k Ξ 表示所有可训练的模型参数,
                 此时, 训练图神经网络的主要目标就是最小化              ˆ t i,j  和  ˆ t k,j  之间的距离, 即:

                                                        argminL                                      (14)
                                                               BPR
                                                         Λ
                 其中,  Λ 为网络参数. 这里采用      Adam  [54]  对预测模型进行优化, 并更新模型参数. 当然, 对于一批随机抽样的三元组
                                                {         }  {          }
                                                 1
                                                    2
                                                                 2
                                                               1
                 (b i ,t ij ,d j ) ∈ S , 经过   l 次卷积后, 在已完成   p , p ,..., p l   和   q ,q ,...,q l   表示的情况下, 也可以利用损失函数的梯
                                                 b i  b i  b i  d j  d j  d j
                 度更新模型参数.

                 4   实验分析
                    为了全面评估本文提出的          CBT-MF  方法性能, 实验主要关注了以下        3  个研究问题   (RQ).
                    ● RQ1: 与其他已有的主流      bug  分派方法相比, CBT-MF   对  bug  分派的性能表现如何?
                    ● RQ2: CBT-MF  是否能够缓解由于     bug 数据分布不均衡性和文本数据模态单一对              bug 分派性能产生的影响?
                    ● RQ3: 在  CBT-MF  方法中, 关键的超参数是如何影响其对          bug  分派性能的?

                 4.1   数据与指标
                    本文基于领域内广泛使用的           3  个公开数据集: Google Chromium (GC)、Mozilla Core (MC) 及  Mozilla Firefox
                 (MF), 对  CBT-MF  进行上述  3  个研究问题的实验评估. 这      3  个数据集均有类似的      bug  报告记录, 包括  bug ID、摘
                 要、描述、开发者       (开发人员的    E-mail) 及  bug  状态, 这为本文研究提供了一致性的实验评估基础. 但是, 它们在数
                 据规模、开发者活跃度和数据质量等方面各具特色, 尤其是各数据集的                        bug  报告质量层次不齐, 影响实验对比效
                 果, 故对所选数据集做了必要的预处理. 首先, 为了防止               bug  报告重复或修改变化对评估结果产生影响, 实验按照
                 不同的时间跨度筛选了状态为验证             (verified) 或修正  (fixed) 的  bug  报告记录, 得到的实验数据集基本特征如表      1
                 所示. 其次, 基于筛选后的      bug  报告记录  ID  和开发者字段构建      bug-开发人员二部图, 形成图模态数据, 表征“bug-
                 开发者”的修复关联关系. 随后, 根据         CBT-MF  方法必要向量的初始化需求, 将符合状态要求的               bug  报告去除其他
                 冗余属性后保留      bug  报告标题、描述、分派开发者这          3  项关键属性   (具体名称因跟踪系统而异), 作为         bug  报告文
                 本源, 形成文本模态数据, 即通过         bug  报告属性筛选完成噪声过滤; 最后, 按照第          2.2  节描述的过程, 经过对标点符
                 号、十六进代码及停用词过滤和大写字母转换, 对数据进一步清洗后进行                        bug  语义表示. 最终, 将所选实验数据集
                 均以  8:1:1  的比例分为训练集、验证集及测试集, 且为了消除开发人员的流动性对评估结果的影响, 划分的测试集
                 时间跨度均控制在了       1  年以内.

                                                    表 1 实验数据集特征

                                特征              GC [55]           MC [56]           MF [57]
                               bug总数            383 104           314 388           162 307
                              开发者数              3 612              1 477             891
                             修复记录数              361 164           147 664           89 083
                             密度 (1E–4)           2.61              3.18              6.16
                              时间跨度          2008-08–2016-07    1998-04–2016-06   1999-07–2016-06
   128   129   130   131   132   133   134   135   136   137   138