温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
基于
混合
注意力
机制
软件
缺陷
预测
方法
刁旭炀
计算机测量与控制 ()测试与故障诊断 收稿日期:;修回日期:。作者简介:刁旭炀(),男,上海奉贤人,工程师,硕士研究生,主要从事软件工程和机器学习方向的研究。引用格式:刁旭炀,吴凯,陈都,等基于混合注意力机制的软件缺陷预测方法计算机测量与控制,():,文章编号:():中图分类号:文献标识码:基于混合注意力机制的软件缺陷预测方法刁旭炀,吴凯,陈都,周俊峰,高璞(上海机电工程研究所,上海 )摘要:软件缺陷预测技术用于定位软件中可能存在缺陷的代码模块,从而辅助开发人员进行测试与修复;传统的软件缺陷特征为基于软件规模、复杂度和语言特点等人工提取的静态度量元信息;然而,静态度量元特征无法直接捕捉程序上下文中的缺陷信息,从而影响了软件缺陷预测的性能;为了充分利用程序上下文中的语法语义信息,论文提出了一种基于混合注意力机制的软件缺陷预测方法();首先从程序模块中提取基于 树的语法语义序列并进行词嵌入编码和位置编码,然后基于多头注意力机制自学习上下文语法语义信息,最后利用全局注意力机制提取关键的语法语义特征,用于构建软件缺陷预测模型并识别存在潜在缺陷的代码模块;为了验证 的有效性,论文选取了个 的开源 数据集,与经典的基于 的静态度量元方法、基于 、无监督学习方法和基于 和 深度学习方法进行对比,实验结果表明,在 值分别提升了 、。关键词:软件缺陷预测;语法语义信息;静态度量元;多头注意力机制;全局注意力机制 ,(,):,(),:;引言软件稳定性是衡量软件质量的重要标准,成千上万行复杂代码往往存在会导致软件失效的风险。为了帮助开发和测试人员更加高效地定位潜在缺陷,软件缺陷预测技术正广泛运用在软件的代码审查阶段,是软件工程研究领域中的重要研究方向之一。软件缺陷预测技术利用软件代码库中的历史项目进行缺陷度量元的设计与提取,并将基于静态度量元的特征放入缺陷预测分类器中进行模型训练,最终得到的缺陷预测模型能够有效识别存在缺陷的代码模块。软件开发与测试人员可根据预测结果对相关模块进行复核校验,从而节省了查找定位缺陷的时间,提升了软件质量维护与保证的效率。软件缺陷预测主要分为同项目软件缺陷预测与跨项目软件缺陷预测两个研究方向。此外,依据提取的程序特征颗粒度,可将软件缺陷预测技术分为基于文件级、函数级、变更级的缺陷预测。传统的缺陷预测方法通常是基于人工设计的静态度量元特征来构建软件缺陷预测模型。相关研究人员已经设计出了相关有辨别度的特征可以有效区分有缺陷和无缺陷的程序模块,主要包括基于运算符和操作数的 特投稿网址:第期刁旭炀,等:基于混合注意力机制的软件缺陷预测方法 征、基于依赖的 特征、基于面向对象程序语言的 特征以及基于多态、耦合的 特征。然而,由于静态度量元特征值是基于专家经验设计的统计值,存在有缺陷代码模块和无缺陷代码模块出现相同值导致无法区分的情况。是一种基于源代码的特征树表示方式,蕴含着丰富的程序上下文信息。通过运用深度学习技术挖掘基于 的语法语义特征,可以得到比静态度量元更具代表性的缺陷特征,从而构建出性能更好的缺陷预测模型。为了充分运用程序上下文中潜在的语法语义信息,论文提出了一种基于混合注意力机制的软件缺陷预测方法。首先,使用词嵌入方法将特征序列表示为可被学习的多维向量,然后使用基于正余弦函数进行位置编码,接着运用多头注意力机制自学习每个位置在上下文中的语法语义信息,最后使用全局注意力机制提取整个程序模块的关键特征,从而构建出更加具有鉴别力的缺陷预测模型。论文选取了个 开源项目作为数据集,与种典型的基于静态度量元和程序语法语义学习的方法进行比较,实验结果表明论文提出的 方法在 上平均提升了 。相关工作在基于静态度量元的方法中,等人使用多目标决策优化算法对软件缺陷预测特征进行筛选;等人采用包裹和 过滤式特征选 择 方 法 识 别 重 要 的 缺 陷 特 征;等人使用贝叶斯网络来分配静态度量元与缺陷倾向性之间的影响概率;此外,等人提出了一种基于图的半监督缺陷预测方法来解决有标签数据不足和噪声问题。在基于程序语法语义学习的方法中,等人使用深度置信网络生产隐式的语法语义特征进行缺陷预测;等人建立了一种基于深度学习树的缺陷预测模型来尽可能多地保留 的初始结构特征信息;等人建立了嵌入静 态 度 量 元 的 卷 积 神 经 网 络 缺 陷 预 测 模 型;此 外,等人基于图神经网络从控制流图中挖掘软件的语法语义特征信息用来构建缺陷预测模型。但是由于存在长期记忆依赖问题,基于 和 生产的语法语义信息可能存在信息的丢失。为了充分挖掘特征序列中每一位置的上下文信息,采用多头注意力机制进行上下文自学习编码,然后将生产的隐式语法语义特征放入全局注意力机制网络中提取关键特征信息,用于缺陷预测模型的训练与预测。总体架构本节对基于混合注意力机制的软件缺陷预测方法 的总体架构进行了详细阐述,详见图。首先,将项目中的每个程序文件提取为 树结构,然后从中选取关键节点并运用深度遍历方法获得序列向量,接着通过字典映射和词嵌入技术扩展为可学习的多维向量,其次运用正余弦函数进行位置编码,将编码后的向量放入多头注意力机制层,进一步挖掘每个位置的上下文语义,最后运用全局注意力机制提取程序文件中关键的语法语义特征,放入预测输出模型进行训练与预测。图 总体架构 基于 的源代码提取为了将程序文件中的源代码用向量形式进行表征,需要选择合适颗粒度,如字符、单词或 等形式对源程序进行特征提取。是源代码语法结构的一种抽象表示,它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的上下文语义信息。基于 的表示形式能映射出源程序中的语法结构和语义信息,具有多维度投稿网址:计算机测量与控制第 卷 的特征信息可供缺陷预测模型进行学习,因此论文采用该形式对源代码程序进行抽象表征。根据先前的研究,论文只提取种类型节点作为 树特征值。第一类为方法和类实例的创建节点,此类提取方法名称和类名称;第二类为声明节点,包括方法、类型、枚举等声明,此类提取它们的具体值;第三类为控制流节点,包括分支、循环、异常抛出等控制流节点用它们的类型值记录。所有被选择的 节点值如图所示。图选取的 节点类型在本次实验中,论文采用基于 的开源数据分析包 对 源代码进行分析提取为 抽象语法树,然后采用深度遍历的方法将提取的节点值转化为一个序列向量,详细描述见算法。算法:将源程序文件提取为 字符向量输入:源程序文件,:选取的节点类型,输出:字符向量,构建源程序的 抽象语法树 ;();序列编码和类不平衡处理 序列向量存储着大量程序模块的语法语义信息,两段代码模块可能具有相同的静态度量元特征值,但它们的 结构存在差异,这使得基于 序列可学习生成更具有辨别力的特征。为了让提取的 序列向量具备可学习性,采用字典映射技术将序列中的节点映射为一个整型数字,假设节点的数量为,每个节点用一个整型数字表示,那么映射范围就是从到。算法为 序列编码的详细描述,首先统计每个节点出现的频率,并按照频率从高到底排序,然后将 字符向量映射成数字向量,接着需要将长短不一的数字向量统一为固定长度,少于固定长度的向量通过填充来补齐长度,超出固定长度的向量将频率低的节点依次剔除直至长度与固定值一致,最终为了使得映射的数字向量具备可学习性,构建可被训练的高维词字典,采用词嵌入技术将每一个数字节点转化为一个多维向量。算法:序列编码输入:字符向量,:字符向量的长度 :字符频率字典 :字符转整型字典 :字符频率列表输出:编码后的整型向量,初始化、和 ();(,);();按频率降序排列 ();();将字符映射为整型,频率高的字符靠前 ()();()()();找到频率最低的字符所对应的序号 删除该字符 ;投稿网址:第期刁旭炀,等:基于混合注意力机制的软件缺陷预测方法 ;软件仓库中的缺陷数据通常是类不平衡的,其中有缺陷的程序文件往往只占据很小的一部分。直接采用原始数据集训练的到模型存在偏向于大多数(无缺陷)类的偏差。为了解决该问题,通常采用过采样或欠采样技术对数据集进行平衡处理。过采样通过复制少数类的实例来实现类间平衡,而欠采样则是将多数类中的实例进行剔除。考虑到欠采样或导致数据信息的丢失,从而导致欠拟合的情况,因此论文采用过采样技术将少数(有缺陷)类的实例进行复制,从而构造出两类平衡的数据集。神经网络构建 神经网络架构如图所示,主要包含节点嵌入层、位置编码层、多头注意力层、全局注意力层和预测输出层。图 神经网络架构 节点嵌入层一维数字符号无法充分描述一个 节点的上下文信息,论文采用词嵌入技术将每一个一维数字向量映射为一个高维向量,详细公式见式()所示。:()其中:代表一个一维 节点向量,代表一个维实数向量空间,代表一个参数化函数,能将中的每个数字符号映射为一个维向量。映射得到维向量紧接着被放入位置编码层学习节点的位置信息。运用词嵌入技术不仅可以将节点的语法语义表示形式限制在有限维度的空间内,节省网络训练的成本,避开维数灾难,而且节点之间的语法语义特征相似度也可以通过余弦距离公式来进行度量,极大地提升了网络学习语法语义特征的效率。位置编码层在 模型中没有涉及到循环和卷积的神经网络,为了充分利用 向量的序列特性,将节点嵌入层输出的向量放入位置编码层进行相对位置关系的学习,位置编码后的向量维度与节点嵌入后的向量维度相同,以便两者相加得到最终包含相对位置关系的高维节点向量,作为多头注意力层的输入。根据先前的研究,论文采用基于正弦和余弦函数进行位置编码,其计算公式如式()、式()所示:(,)()()(,)()()其中:代表第 个向量,代表第 个向量中的第个维度,为节点嵌入的维度。即每个偶数位置的位置编码对应正弦函数,每个奇数位置的位置编码对应余弦函数,函数波长为 到 的几何级数。对于任意固定偏移量,能用 的线性函数所表示,因此采用正余弦函数能较好的表示节点之间的相对位置关系。多头注意力层多头注意力层由()个相同的神经网络层组成。每层由一个多头注意力机制和位置转化前向反馈网络组成,每个子层计算得到的输出与原始输入进行残差连接与正则化处理,其公式表达如式()所示:()()其中:为多头注意力机制和位置转换前向反馈网络两个子层的函数,将 ()与原始输入相加得到残差连接并进行正则化处理,所有子层的输入输出向量维度与初始节点嵌入的维度相同。多头注意力机制由个基于点积的注意力函数组成,首先将节点嵌入的维度缩小 倍,使得神经网络的计算代价与带有整个节点维度的单个头注意力机制的计算代价相同,然后并行应用个注意力函数,得到的输出进行全连接得到最终的上下文语法语义特征,具体机制架构详见图所示。每个点积注意力函数的输入为矩阵,组成,计算公式如式()所示:(,)槡()()其中:为维度 的 矩阵,为维度 的 矩阵,为维度 的 矩阵。将 和 进行点积运算,计算每个位置节点在上下文 的权重,最终进行加权和计算得到每个位置节点经过上下文信息编码后的输出,具体函数架构详见图投稿网址:计算机测量与控制第 卷 图单个多头注意力层所示。此外,由于当的值很大时,点积值往往会增长得很快,使得 函数出现梯度极端小的情况,为了解决梯度消失的问题,将点积结果值放缩槡倍。图多头注意力机制的函数架构在运用多头注意力机制后,采用一个全连接的前向反馈神经网络进行位置转换,该网络层由两个线性函数和一个 激活函数组成,其计算公式如式()所示:()(,)()全局注意力层从多头注意力层中可以得到一个序列所有位置节点的上下文语法语义信息,这些位置节点对整个序列的语法语义贡献是不同的。为了提取其中关键的语法语义特征,采用了全局注意力函数,每个节点都会分配相应权重,进行加权和即可得到关键特征,其具体计算公式如式()()所示:()()()()()()其中,全局注意力机制首先将节点 放入一个多层感知器()来生成 作为节点的隐式特征表示,然后设定一个全局上下文向量,作为在每一个序列中搜寻关键节点信息的高阶表示向量,接着计算 与的点积相似度并通过 函数进行归一化处理。最终计算所有节点的加权和作为学习得到的全局关键语法语义特征向量。预测输出层预测输出层由一