Page 138 - 《软件学报》2025年第4期
P. 138
1544 软件学报 2025 年第 36 卷第 4 期
提取代码和缺陷报告序列间复杂的语义信息. 不同的神经网络具有不同的特点和自己独有的优势, 使用不同的深
度学习模型可能会对最后的缺陷定位结果产生很大的影响. 常见的模型有 DNN、CNN、RNN 等. 本节总结了不
同深度学习模型对源文件和缺陷报告的特征提取技术, 以分析各种深度学习模型对缺陷定位的不同优势.
4.2.1 深度神经网络 DNN
最初的方法引入 DNN, 使用全连接层对全局的特征进行提取, 因为 DNN 可以提取不同信息的特征并很好地
进行融合.
Lam 等人 [14] 提出了 HyLoc, 是一种将深度神经网络与信息检索技术 rVSM 结合起来的基于信息检索的缺陷
定位方法, DNN 来学习每个文件与缺陷报告的关联性. HyLoc 的特征提取层由两个 DNN 组成, 第 1 个 DNN 学习
缺陷报告中的文本特征与源代码特征的相关性, 称为 Bug Report-to-Code DNN. 第 2 个 DNN 学习缺陷报告中的文
本特征与源代码中 API 描述里和评论的文本特征的相关性, 称为 Bug Report-to-Text DNN.
Lam 等人 [29] 还在 HyLoc 的基础上提出了一种结合 DNN 和 rVSM 的基于信息检索的缺陷定位方法
DNNLOC. VSM 收集了缺陷报告和源代码之间的文本相似性特征. DNN 被用来学习将缺陷报告中的术语与潜在
的不同代码标记和源代码中的术语联系起来. 最后将 DNN 相关性、文本相似性、元数据整合在一起, 其中元数
合了缺陷报告的修复频次与次数的修复信息来训练.
据包括协同过滤分数 (协同过滤分数旨在衡量一个缺陷报告和以前由同一文件修复的缺陷报告的相似度), 类名相
似性, 缺陷修复频率和经常性得分, 通过 DNN 将这 3 种特征组合在一起.
Anh 等人 [50] 提出一种不平衡的使用深度学习的基于信息检索的缺陷定位方法, 通过结合数据样本处理和敏
感型学习来解决数据不平衡的问题, 重点在于将训练数据集分割成若干小批, 引导方法确保训练集中的每一个阳
性实例都有相同的概率被选中, 避免了在某些小批中没有阳性实例的机会, 并将特征缩放成相同规模, 然后使用焦
点损失函数通过 DNN 不平衡地整合词汇相似性、语义相似性、与历史缺陷报告的相似性、代码变更历史和缺
陷修复频率这 5 个特征.
DNN 的灵活性较高, 能较好地提取和融合多个不同特征, 但 DNN 的参数尺寸固定, 不适合处理变长尺寸的文
本, 也较难处理缺陷报告与源文件中的结构信息.
4.2.2 卷积神经网络 CNN
卷积神经网络 CNN 善于提取源文件和缺陷报告中的深层语义特征, 通过图形式进行编码表征的源文件往往
会将 CNN 引入缺陷定位模型并进行特征提取, 以便提取出正确的语义特征和结构信息.
Huo 等人 [15] 提出了基于 CNN 的缺陷定位深度神经网络 NP-CNN, 目的在于从缺陷报告和源文件中学习一致
的特征, 其设计了与程序结构有关的特殊卷积操作, 它能够从词汇和程序结构的角度捕捉程序的语义. 先在语言内
特征提取层, 通过卷积神经网络从基于独热编码后的缺陷报告中学习报告的词法特征, 从编码后的源文件中学习
程序结构信息, 然后将特征向量连接起来后通过一个全连接层作为跨语言特征融合层对其特征进行融合. 以便根
据缺陷报告自动定位潜在的缺陷源代码.
Xiao 等人 [30] 提出了基于增强 CNN 的缺陷定位模型 DeepLocator, 更好地提取深藏在源代码中的语义信息, 同
时改进了基于深度学习的缺陷定位模型难以准确调整权重的缺点. DeepLocator 中缺陷报告和源文件首先被 rTF-
IduF 预处理, 由 word2vec 进行编码表征获得缺陷报告和源文件之间的映射以训练增强的 CNN. 增强的 CNN 还结
Wang 等人 [41] 提出了用于缺陷定位的多维卷积神经网络模型 MD-CNN, 使用了多个信息检索的特征. 从历史
缺陷报告库、源代码文件库和缺陷修复历史库中提取 5 种特征: 缺陷报告和源文件之间的文本相似性、缺陷报告
的相似性、最近修复的源文件的特征、类名称相似性、结构相似性, 并使用卷积神经网络来取代现有的相似性特
征组合的线性模型来平衡 5 个特征之间的权重.
Yang 等人 [44] 的缺陷定位系统使用卷积神经网络 CNN. 他们的方法先从缺陷报告和程序源代码中提取特征,
然后将提取的特征输入到一个自动编码器算法中, 接下来将自动编码器的输出应用于 CNN 算法, 最后计算出缺陷
报告和程序源代码之间的排名分数.
Yuan 等人 [45] 提出的 DependLoc 加入常用的信息检索特征 TF-IDF 通过一个定制的蚁群算法利用了源代码文