Page 139 - 《软件学报》2025年第4期
P. 139
曹帅 等: 深度学习在基于信息检索的缺陷定位中的应用综述 1545
件之间的依赖关系. 先通过类依赖图定义类之间的引用, 再通过两个 CNN 进行特征提取. CNN4TFIDF 从缺陷报
告和源文件的 TF-IDF 中提取出除了文本相似性之外的特征, CNN5RefHI 提取经 RefhI 编码器提取的类间依赖特
征和缺陷报告的 RefHI 特征, 最后将两个特征进行融合给出相关分数.
Xiao 等人 [16] 提出的 CNN-Forest 使用级联森林学习缺陷报告和源代码之间的关系. 在使用 CNN 提取缺陷报
告和源代码特征后将 k 维向量降维送入两个由完全随机树状森林 CRF 和随机森林 RF 组成的组件来学习进一步
的特征并分类.
Polisetty 等人 [38] 构建了一个卷积神经网络模型来进行缺陷定位, 通过对比一个传统的机器学习模型 (Logistic
模型), 检验深度学习模型在定位缺陷方面的有效性.
CNN 能够以较少的参数有效提取文本中的局部语义与结构信息, 然而在卷积与池化步骤中, CNN 可能会导
致一部分文本序列中的顺序信息丢失. 如果模型层数较少, 较小的感受也会使 CNN 丧失对全局信息的判断能力.
4.2.3 循环神经网络 RNN
循环神经网络 RNN 对具有序列特性的数据非常有效, 因此在机器翻译领域有着良好的表现. 在缺陷定位的任
务里, 缺陷报告和源文件中的语义信息都有助于定位导致缺陷的程序模块. Xiao 等人 [31] 提出的 BugTranslator 将
需要注意的是, 尽管
缺陷定位问题表述为一个机器翻译问题, 从缺陷文件中解析出来的抽象语法树节点对、API 注释和相应的 API 序
列中得到他们的深度语义相似性和相关性, 再通过一个注意力机制的 RNN 编码器和解码器将缺陷文件翻译成缺
陷代码, 从根本上弥补词汇差距完成缺陷定位.
Yang 等人 [48] 提出的 MRAM 使用 RNN 和软注意力来合并源方法的额外结构信息, 以获得它们与缺陷报告的
隐性相关性, 这解决了语义差距问题. MARM 分成语义匹配网络 SMNN、方法扩展网络 MENN 和缺陷定位网络
FLNN. SMNN 的标记序列、API 调用序列和方法注释 3 个结构特征被双向 RNN 分别编码表征为一个向量表示.
然后, 以缺陷报告为参考, 使用软注意机制从 3 个特征的向量中检索关键信息来表示整个方法. 缺陷报告的向量与
方法的向量通过 MLP 进行匹配. MENN 通过检索其相关方法的信息丰富长度较短的方法, 最后通过 FLNN 结合
3 个缺陷修复特征和前两个网络提取的特征来进行缺陷定位.
RNN 也存在难以处理长文本的问题, 如源文件中的代码通常都很长, 使用 RNN 仅能处理短期依赖, 过长的源
代码会导致 RNN 梯度消失的问题. 门控循环单元 GRU 是一种解决 RNN 梯度消失问题的办法. Ma 等人 [57] 主张源
代码应明确考虑流的性质, 提出了 cFlow. 控制流图 CFG 中的相邻节点可能在语义上完全不相关并且前面的语句
可能会沿着执行路径影响后面语句的语义, 因此 cFlow 对于源代码的编码表征与特征处理分成了 3 个子层, 第 1
层用来预处理源代码的无用字符, 第 2 层采用了特殊设计的基于流的门控制单元 GRU 进一步利用程序结构来增
强饱和级特征, 从 CFG 中学习特征. 基于流程的 GRU 利用 CFG 所代表的程序结构, 沿着执行路径传递语句的语
义. 第 3 个子层将所有增强的语句级特征合并为代码级语义特征.
除了 GRU, 长短期记忆网络 LSTM 通过增加细胞状态, 也使得 LSTM 相较于 RNN 更擅长处理长序列的数据.
NPCNN 在语句之间的长期依赖性, 还没有得到很好的建模, 会导致源代码中语义信息的丢失. 为了更好地表现程
序功能和行为, 考虑具有长期依赖性的语句的顺序性也非常重要. 为此, Huo 等人 [28] 提出的 LS-CNN 在 NPCNN
的基础上结合 LSTM, 利用源代码的顺序性来增强统一的特征, 以定位有缺陷的源文件. 因此 Huo 等人在 NPCNN
的基础上, 在语言内特征提取层结合 LSTM 提出了新的方法. LS-CNN 利用源代码的顺序性来增强统一的特征, 以
定位有缺陷的源文件.
RNN、GRU 与 LSTM 适合处理使用缺陷报告与源文件这类长序列文本作为输入的基于
信息检索的缺陷定位任务, 但这类模型的训练过程难以并行化, 对方法的实际应用带来了阻碍.
4.2.4 生成对抗网络 GAN
GAN 通常是由一个生成模型 G 和一个检测模型 A 组成的网络, 通过辨别器不断辨别生成器生成的用来欺骗
辨别器的假内容完成对特征的辨别. 相较于其他深度学习模型, GAN 在仅有少量数据样本的情况下, 也能让生成
器较好地学习到缺陷报告与源文件间的相关性分布, 从而提高鉴别器的缺陷定位能力.
Zhu 等人 [53] 提出了一个半监督的缺陷定位模型 BL-GAN. 使用对抗神经网络 GAN, 以半监督的方式学习缺陷