Page 273 - 《软件学报》2024年第4期
P. 273
王尚文 等: 基于指针神经网络的细粒度缺陷定位 1851
数, 3 个数据集上的中位数分别为 5/3/5. 根据表 2 的结果, BEEP 在 3 个数据集上的 MFR 分别为 2.3/1.3/1.4. 这意
味着通常情况下 BEEP 能将缺陷元素排在其输出列表的前半部分.
综上所述, 在提供缺陷方法或是缺陷语句的情况下, BEEP 的预测结果都能够将缺陷代码令牌排在靠前的位置.
4.5.2 RQ2: BEEP 能否准确地同时预测缺陷代码令牌及修复缺陷代码令牌所需进行的代码变换操作?
为了回答这个问题, 我们分析 BEEP 方法返回的操作路径信息并计算每个缺陷的标准操作路径在返回列表中
的排名情况, 结果见表 4.
表 4 缺陷方法作为输入时 BEEP 的操作路径预测效果
数据集 Top-1 (%) Top-5 (%) Top-10 (%) Top-20 (%) MFR
CoCoNut 44.6 67.8 77.9 87.5 7.5
ManySStuBs4J 29.7 50.8 63.7 79.3 11.5
Defects4J 29.2 51.8 57.7 65.5 12.3
我们注意到, 与单纯的缺陷代码令牌预测结果 (表 3) 相比, 考虑整个操作路径的内容后, BEEP 的预测结果仅
仅小幅度下降. 例如, 在 ManySStuBs4J 数据集上 Top-1 的召回率仅由 30.7% 下降至 29.7%. 同样, 在 3 个数据集上
的 MFR 值也未见明显的大幅下降, 依然保持在较高水准. 该结果表明, 当 BEEP 成功预测到缺陷代码令牌后, 其大
体上可以准确预测出与该令牌相关的代码变换操作.
综上所述, BEEP 不仅可以定位与缺陷有关的代码令牌, 也可以准确预测修复该缺陷令牌需要进行的代码更
改操作.
4.5.3 RQ3: 不同的模块对方法的有效性产生怎样的影响?
为了研究我们模型中不同模块对模型有效性带来的影响, 我们进行了消融实验. 具体地, 我们关注于模型中
的 3 个设计: (1) 将令牌拆分成子令牌; (2) 基于节点的抽象语法树路径编码方法; (3) 全连接层. 在第 1 个实验中,
我们移除将令牌拆分为子令牌的过程, 直接将代码令牌送入模型的令牌嵌入矩阵 E t (·) 中得到向量表示, 值得注意
的是, 由于令牌嵌入矩阵是随着模型其他部分一同训练的, 这一实验设置下训练出的令牌嵌入矩阵与前文得到的
并不相同; 在第 2 个实验中, 我们不使用经过编码后的节点序列去表示抽象语法树路径, 相反, 我们直接用独热向
量去直接表示抽象语法树路径; 在第 3 个实验中, 我们移除模型中原有的全连接层, 将经过编码的操作路径直接送
入到编码器中. 实验结果展示在表 5 中.
表 5 消融实验结果
MFR
预测目标 模型设计
CoCoNut ManySStuBs4J Defects4J
–令牌拆分 4.7 7.2 7.3
–基于节点的路径编码 3.9 7.2 7.2
缺陷代码令牌
–全连接层 4.0 7.0 6.7
BEEP 3.9 6.7 6.5
–令牌拆分 13.5 16.4 16.4
–基于节点的路径编码 7.6 12.3 14.6
操作路径
–全连接层 8.3 12.6 13.7
BEEP 7.5 11.5 12.3
在表 5 中我们展示了去掉不同模块后方法的有效性 (以 MFR 的数值体现), 我们注意到, 在每一组实验中, 去
掉令牌拆分后的 MFR 值始终是最高的. 例如, 在对 CoCoNut 数据集上的操作路径进行预测时, 无令牌拆分的模型
MFR 值达到 13.5 而其他 3 种模型的 MFR 值均在 8 左右. 在 3 个数据集上, 一些模型的变体可以取得与 BEEP 相
接近的 MFR 值, 例如在 CoCoNut 数据集上预测缺陷代码令牌时, 去掉基于节点的路径编码方式后的模型 MFR 值
与 BEEP 的一致, 均为 3.9, 但是 BEEP 的 MFR 值在每一组实验中均为最低的, 这说明我们的各个模块共同作用使
得 BEEP 达到了最优的效果.