Page 141 - 《软件学报》2025年第4期
P. 141

曹帅 等: 深度学习在基于信息检索的缺陷定位中的应用综述                                                    1547


                 为行动, 行动最多      31  次, 通过  CNN  捕捉源文件和缺陷报告的相关性以及不同串联编码表征之间的关系, 用
                 LSTM  记录已经选择过的文件. 最后通过将相关文件位置和相关文件在排名列表中的距离设计奖励机制, 完成训
                 练. 不同于常用的监督学习、无监督学习和半监督学习, RLocator 有着更好的性能.
                    Huang  等人  [62] 提出的  SbugLocater 将转换为  AST  的源文件通过    word2vec  编码表征, 缺陷报告也通过
                 word2vec 进行编码表征. 再通过两个       ALBERT  分别对缺陷报告和源文件进行编码并进行最大池化后进行语义匹
                 配. 最后全连接层组合学习到的语义特征与协同过滤分数进行相关性匹配完成缺陷定位.

                 4.3   信息编码表征与特征提取方案发展趋势
                    无论是信息编码表示还是特征提取, 使用深度学习的基于信息检索的缺陷定位方法提出或使用的方法都相比
                 传统的基于信息检索的缺陷定位方法实现了设计改进与定位效果提升, 随着深度学习技术的发展, 更多创新而有
                 效的第   3  代基于信息检索的缺陷定位方法被提出. 早期使用深度学习的基于信息检索的缺陷定位方法使用                              DNN、
                 CNN  和  RNN  等深度学习模型的基于信息检索的缺陷定位方法大多只是替换了传统基于信息检索的缺陷定位方
                 法的一个模块, 利用深度学习深度语义特征提取的能力提高方法的性能. 而在更多研究提出利用代码模块结构信
                 抽象语法树表示的结构信息以外代码的数据流、语法、第三方包使用等其他维度信息, 会丢失源文件中较深层的
                 息后, 深度学习在特征提取模块中的应用逐渐成为多数方法的重点. 因此, 目前使用深度学习的基于信息检索的缺
                 陷定位方法不仅对源文件的深度语义信息有很好的提取能力, 而且已经尝试对更多信息, 如代码结构等, 进行编码
                 表征. 在定位性能上, 使用深度学习的基于信息检索的缺陷定位方法相较于传统的第二代基于信息检索的缺陷定
                 位方法也有所提升.
                    众多使用深度学习的基于信息检索的缺陷定位方法已经针对信息编码表示与特征提取提出了多种有效方案,
                 而基于信息检索的缺陷定位方法在表征缺陷报告和源文件中更多的深层信息后, 针对特定的信息表征形式选择有
                 效的深度学习模型进行特征提取, 可以有效地提升缺陷定位方法的效果. 在信息编码的方案上, 由于缺陷报告间会
                 差异较大, 较难提取共同部分, 少有方法仅针对缺陷报告进行处理并通过特定得分信息编码方式进行信息编码, 因
                 此大多数方法集中对源代码模块进行处理. 信息编码表征的方式影响着基于信息检索的缺陷定位方法提取特征时
                 选用的深度学习模型, 对源代码编码表征的不同方式会选用不同的深度学习模型, 如使用                            CNN  模型进行特征提取
                 的方法往往比较依赖        word2vec 对代码转换的抽象语法树编码表征. 根据第            4.1  节的介绍, 需要编码表征的信息会
                 被处理成图, 序列, 树等方式. 若将源文件作为图进行编码表征时, 通常会选择                      CNN、GCN   等便于处理图的神经
                 网络进行特征提取, 这样可以保留源文件转化为图时的结构特征. 当缺陷报告和源文件的信息直接以序列嵌入时,
                 会选择   RNN、GRU、LSTM    等对序列处理能力强的深度学习模型, 针对               RNN  处理长文本能力差的问题, 也有方
                 法选用   CNN  完成对长文本的特征提取. 同时, 也有方法通过堆叠              Transformer 层建立自己的模型对序列进行处理.
                 当使用抽象语法树或改良的抽象语法树等树结构进行编码表征时, 方法通常选择                           CNN  或者双向   LSTM  等可以保
                 留抽象语法树层次与结构特征的深度模型提取特征. 除此之外, 也有方法以自己的方式组合深度学习模型, 针对自
                 己方法的信息编码表征进行特征提取. 总之, 使用深度学习的基于信息检索的缺陷定位方法由于其在语义特征方
                 面优秀的提取能力, 改善了传统基于信息检索的缺陷定位方法中词汇鸿沟的问题, 通过特殊的编码表征方式与深
                 度学习模型的结合, 提高了缺陷定位的效率.
                    尽管近年来使用深度学习的基于信息检索的缺陷定位方法的定位效果逐渐提升, 但是现有方法在表征信息、
                 深度学习模型上仍然有改进空间. 本文调研的论文在对源文件进行编码表征时, 只有部分方法考虑了源文件内除


                 信息. 同时, 传统的基于信息检索的缺陷定位方法中, 常用的与时间相关的信息以及堆栈踪迹等信息检索特征没能
                 在很多方法中被融合. 在进行特征提取时, 目前的使用深度学习的基于信息检索的缺陷定位方法缺乏最新深度学
                 习模型的应用, 在对深层特征和复杂代码语义特征的提取上能力可以进一步提升.

                 5   最先进方法汇总

                    针对  RQ4, 同时为了在后续的研究中更好地将深度学习应用在基于信息检索的缺陷定位方法中, 如图                              8  所示,
   136   137   138   139   140   141   142   143   144   145   146