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, 以半监督的方式学习缺陷
   134   135   136   137   138   139   140   141   142   143   144