Page 135 - 《软件学报》2025年第4期
P. 135
曹帅 等: 深度学习在基于信息检索的缺陷定位中的应用综述 1541
进行代码变更级别缺陷定位. Loyola 等人 [32] 提出了一个定位代码变更的方法. 对于缺陷报告, 以字符级编码表征,
通过一个双向 LSTM 从缺陷报告中学习表征, 针对代码变更, 将变更修改中的添加行和删除行连接起来, 从句法
角度和依赖结构提取两个特征. 最后将它们整合成一个向量, 并将其传递给学习排名模块进行代码变更级别的缺
陷定位. 两个方法均在与当时被认为最先进的传统的基于信息检索的缺陷定位方法 Locus [13] 的对比上有着更优秀
的效果.
综上, 现阶段使用深度学习的基于信息检索的缺陷定位方法的应用只集中于文件级别, 只有少数研究工作进
行了方法级别和变更级别的定位, 在这些级别上的缺陷定位效果均优于传统的基于信息检索的缺陷定位方法. 除
了以上文件、方法、变更这 3 种定位级别, 常见的定位级别还包含行级别 [78] , 但是目前使用深度学习的基于信息
检索的缺陷定位方法仍然处于探索阶段, 尚缺乏对行级别以及其他粒度定位的研究, 故本文不对这类研究进行详
细讨论. 虽然程序员更倾向于细粒度的缺陷定位, 但更细的粒度会导致更多的数据, 使得方法提取特征更加困难,
难以得到准确的定位结果.
3.2 可迁移性分析
(GCN) 进行提取, 共享特征通过
目前使用深度学习的有监督模型效果大多优于先前提出的传统的基于信息检索的缺陷定位方法, 基于信息检
索的缺陷定位方法的核心是计算缺陷报告和项目中源代码的相关程度, 这种计算相关程度的方法是适用于任意软
件项目的, 即同一个基于信息检索的缺陷定位方法可以在任意的软件项目中迁移使用. 然而, 由于使用深度学习的
基于信息检索的缺陷定位方法的一个局限是需要足够的高质量训练数据. 数据不足或质量不高会影响其有效性.
当缺陷定位方法需要应用于缺陷修复历史有限的新项目时, 这个问题尤为重要. 也就是说, 训练得到的模型其性能
会受到训练数据的影响, 在某些项目的数据上训练得到的模型被应用到其他项目上时可能会导致性能的损失. 因
此, 为了进一步回答 RQ2, 需要对使用深度学习的基于信息检索的缺陷定位方法进行可迁移性评估. 本文仅对比
了在论文中直接对方法进行跨项目缺陷定位效果评测的文章进行统计.
一些基于信息检索的缺陷定位方法直接对跨项目缺陷定位进行了性能评估. 比如 Liang 等人 [54] 提出的 FLIM,
Loyola 等人 [32] 以及 Yang 等人 [48] 也对跨项目性能进行了评估. 不使用迁移学习的基于信息检索的缺陷定位方法
是让原项目训练好的监督模型学习少量目标项目的数据后对目标项目进行缺陷定位. 在这些方法中, 效果都优于
传统的基于信息检索的缺陷定位方法.
不仅如此, 为了解决使用深度学习带来的局限性, 最早提出针对跨项目缺陷定位的是 Huo 等人 [34] 提出的新型
卷积神经网络 TRANP-CNN 是一种针对跨项目缺陷定位的新研究方向, 使用了迁移学习的方法. 在可转移特征提
取层使用两个卷积神经网络 (CNN) 为缺陷报告和源代码生成可转移特征, 使用由 CNN 来处理缺陷报告的语义特
征称为 N-CNN, 使用 NP-CNN 来学习源代码的语义特征, 称为 P-CNN. 可转移的特征能够代表缺陷报告和源代码
文件中的功能语义, 这样就可以进一步利用语义来识别报告和文件之间的关联模式. 知识最终可以转移到目标项
目中去, 促进目标项目的学习. 为了使学习到的特征可以用在其他项目上, TRANP-CNN 在学习过程中采用了一种
特殊的策略, 在源项目和目标项目的相应网络 (包括 N-CNN 和 P-CNN) 中的学习权重是完全相同的, 更好地提升
了模型的跨项目缺陷定位性能.
将迁移学习直接应用于跨项目缺陷定位容易将噪声带入模型, Zhu 等人 [40] 提出改进了 TRANP-CNN 的
CooBa 为了捕捉到每个项目的特殊性完成源项目和目标项目的转移, 只关注跨项目的共同特征的转移. 源项目和
目标项目共用相同的处理模块, 使用预训练模型 GloVe 编码表征缺陷报告里的单词, 通过双向 LSTM 进行编码.
对于源文件, 先转换成 AST 再通过 GloVe 进行编码表征, 随后分别进行私有特征提取和公共特征提取. 私有特征
采用多层图卷积神经网络 CNN 进行提取, 同时采用多层感知机来判别代码文件
来自哪个项目, 最后融合私有和公共特征.
针对 TRANP-CNN 与 CooBa 模型仍然存在的特征冗余, 无法确定项目特定特征是否包括项目共享特征的问
题, Zhu 等人 [18] 提出的 TROBO 是深度迁移缺陷定位模型. TROBO 在缺陷报告和源文件上都完成了知识迁移. 对
于缺陷报告, 利用 codeBERT 同时选择缺陷报告的标题和描述部分, 并将其视为一个词的序列, 通过完全的知识转