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

1542                                                       软件学报  2025  年第  36  卷第  4  期


                 移来学习源项目和目标项目的所有缺陷报告的知识, 并使用注意力机制过滤噪音. 对于源代码的特征迁移, 使用生
                 成对抗网络    GAN  来完成. 最后通过相关性预测器来完成缺陷定位.
                    总的来说, 使用深度学习技术后, 缺陷定位的效果更加优异, 但使用深度学习技术会影响基于信息检索的缺陷
                 定位方法的可迁移性, 因此需要使用特定方法针对迁移性进行改进. 改进后的方法仍可以在跨项目缺陷定位的上
                 取得优于传统基于信息检索缺陷定位的效果.
                    使用深度学习技术能全方面提升基于信息检索的缺陷定位方法的效果, 但由于目前没有行级别的使用深度学
                 习的基于信息检索的缺陷定位方法, 难以进行行级别缺陷定位方法的效果比较.

                 4   信息编码表征与特征提取方案

                    为回答   RQ3, 本文从信息编码表示的具体方案、特征提取的具体方案、不同方案之间的差别这                              3  个方面对
                 统计的   52  篇论文进行汇总与阐述, 在第       4.1、4.2  节中分别罗列了论文中信息编码与特征提取的方式, 并在第                  4.3
                 节对方法进行分析与总结. 缺陷报告主要由标题和描述组成, 包含的其他信息较难进行统一, 多数直接作为文本序
                 列信息直接进行编码表征, 但代码包含文本信息, 还包含结构信息, 如函数间的依赖信息等, 除了序列外, 也会通过
                                                      等人
                 树和图对代码进行表征, 其常用的表征方式及对应的特征提取采用的深度模型如图                           7  所示.

                         信息表征
                                     缺陷报告                                  代码



                                       序列                       序列          图           树



                         特征提取
                                CNN        RNN        GRU        LSTM       GCN        GAN


                         图 7 使用深度学习的基于信息检索的缺陷定位方法中常用的信息表征和特征提取方案汇总

                 4.1   信息编码表征
                    在使用深度学习的基于信息检索的缺陷定位方法中, 要学习项目中的已经确定关联的缺陷报告和源文件之间
                 关系对的联系, 需要对缺陷报告和代码模块进行信息编码. 本节从对缺陷报告的编码方式和对代码的编码方式两
                 方面进行整理与叙述.

                 4.1.1    缺陷报告编码方式
                    缺陷报告可以直接作为文本信息使用预训练嵌入模型进行编码表征.
                    Xiao  等人  [16]  提出  CNN-Forest 使用预训练模型  word2vec  完成缺陷报告的编码表征. Han      等人  [19]  提出的
                 bjXnet 直接将缺陷报告作为自然语言, 使用与           word2vec 类似的预训练模型     GloVe 进行编码表征. Lam    等人  [29]  提
                 出的  DNNLOC  使用   autoencoder, 对缺陷报告的文本进行编码, 完成缺陷报告的向量化. Zhu                等人  [47]  提出的
                 DEMOB  使用预训练模型      ELMo  完成缺陷报告的编码表征, 将缺陷报告转化为向量. Zhu               等人  [50]  提出的  TROBO
                 使用  codeBERT  对缺陷报告进行编码表征. Luo           [55] 提出的  CoLoc 通过堆叠  Transformer 层完成构建. 针对缺
                 陷报告的编码表征, 在自己的模型中使用             skip-gram  模型进行编码表征. 上述方法使用了常见的对于缺陷报告文本
                 编码表征的    6  种技术.
                    缺陷报告包括对缺陷信息的标题和描述, 标题中的词汇重要性更高, 每个词包含的语义信息更多, 但缺陷描述
                 中会包含许多的无用信息, 每个词包含的语义信息就更少. Liu                 等人  [37]  提出的  SLS-CNN  通过两个模块两次将缺陷
                 报告进行编码表征, 第      1  个模块仅将缺陷报告和源文件连接起来通过              word2vec 编码表征, 第  2  个模块对缺陷报告
   131   132   133   134   135   136   137   138   139   140   141