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

谢生龙 等: 基于多模态融合的软件缺陷协同分派方法                                                       4045


                    通常活跃的开发者贡献了多数修复记录; 反之, 不活跃的开发者修复记录则很少. 开发者和修复记录数据的这
                 种不均衡性是数据集存在         bug  数据帕累托现象的一个直接原因. 因此, 实验分别采用               3  个数据集中记录数与       bug
                 和开发者数量乘积的比率所表示的密度, 即              密度 = # of records/(# of bugs∗# of Developers), 来反映其  bug  修复记
                 录的不均衡性. 最终, 3    个数据集的密度均在        0.02%–0.07%  之间, 且密度越小表示数据不均衡性越强.
                    本文选择推荐问题研究时广泛采用的              Recall@K  和  Hit@K  作为性能评价的指标, 具体计算如公式         (15) 和公
                 式     (16) 所示, 且  K  被设置为  5, 10, ..., 25  共  5  种情况.
                               Recall@K = (# of top K assignments that are relevant)/(# of all relevant bugs)  (15)
                 其中,  # of top K assignments that are relevant  表示前  K  个分派的结果与实际分派给相应开发者的  bug  相关的  bug
                 数量, 这里的“相关”通常指的是正确分派的             bug.  # of all relevant bugs 表示实际上应该被分派给相应开发者的     bug
                 的总数. Recall@K  表示在前   K  个分派结果中, 有多少比例的       bug 被正确地分派给了相应的开发者. 通常, Recall@K
                 值在  0–1  之间, 越接近  1  表示方法在前   K  个分派结果中更好地覆盖了实际应该分派给相应开发者的                   bug.

                                                            1  |B| ∑
                                                    Hit@K =     1 R(b i )⩽K                          (16)
                                                            |B|
                                                              i=1
                 其中,  |B| 表示  bug  集合的大小,  b i  表示第   个 i  bug,  R(b i ) 表示  bug  b i  的推荐排名,   1 R(b i )⩽K  为指标函数, 当  R(b i ) ⩽ K  时,
                 1 R(b i )⩽K = 1, 表示  b i  在分派的前  K  个推荐中; 否则为  0, 即表示  b i  不在分派的前  K  个推荐中. 因此, Hit@K  表示在前
                 K  个推荐中, 有多少比例的相关        bug  被成功地包含在内. 很显然, Hit@K     值也在   0–1  之间, 越接近  1  表示模型在前
                 K     个分派推荐中更好地命中了与开发人员相关的            bug.
                 4.2   比较基线
                    为了从多角度分析       CBT-MF  的性能, 本文选取了基于       bug  报告文本模态分类、相关性匹配及           CF  推荐  3  个类
                 别, 共计  8  个较为先进的方法作为基线进行对比, 具体方法详见表                2.

                                                      表 2 基线方法

                                      类别                                 方法
                                                                       [5]
                                  文本模态bug分类                         CBR 、DBRNN-A [16]
                                    相关性匹配                           GRCNN [22] 、BERT [23]
                                    基于CF推荐                   LightGCN [29] 、NCF [30] 、CBCF [31]   、 SGL  [40]

                    在表  2  仅采用  bug  报告单一模态类方法中, CBR      将  bug  文本转换为向量, 并使用一种半自动化的方法学习每
                 个开发人员解决的报告类型, 并将新记录的              bug  报告分派给合适的开发人员; DBRNN-A         提出了一种深度双向递
                 归神经网络, 其以无监督的方式从           bug  报告长单词序列中学习语法和语义特征. 在相关性匹配类方法中, GRCNN
                 以不同的时间周期学习开发人员在协作网络上节点的时空特征, 以得到                        bug-开发人员相关性的表示; BERT        通过
                 调节所有层的左右上下文, 从未标记的数据中预训练深度双向表示, 帮助计算一个给定的                             bug  和开发人员已修复
                 bug  之间的相关性; 在   CF  类方法中, NCF  可以使用一个神经网络模块, 比如多层感知神经网络, 来拟合相关匹配
                 函数; CBCF  采用内容增强的协同过滤, 将          CBR  和  CF  推荐器相结合, 提高了推荐质量; LightGCN       提出了一种
                 GCF  方法, 能够有效地聚合线性邻域; SGL        将结构性对比学习与        LightGCN  集成, 使  LightGCN  的性能得到了进一
                 步改进.

                 4.3   实验方案
                    实验利用    GC、MC   及  MF  数据集对选择的基线方法进行了复现, 并且为了不失公允性, 实验对所有比较的基
                 线方法模型参数都进行了一定程度的优化. 同时, 为了尽可能消除因优化方式差异而对比较方法产生性能影响, 所
                 有训练的模型均采用        Adam  优化器, 训练批大小设置为       8 192, 且采用默认的   Xavier 分布进行网络参数初始化, 向
                 量大小均为    64, 采用  10  步提前停止的策略以防止过拟合. 对于          CBT-MF, 默认图卷积层为       2  层, 采样尺度  s 设置
                 为  5. 此外, 为了在保持足够聚类细致度的同时, 避免设置过大的质心数及确保在整个方法中                         bug  和开发者在聚类
   129   130   131   132   133   134   135   136   137   138   139