基于抽象语法树的软件缺陷预测方法探究

(整期优先)网络出版时间:2023-09-02
/ 2

基于抽象语法树的软件缺陷预测方法探究

杨欢

山东建筑大学  山东省济南市  250000

摘要本研究提出了一种基于抽象语法树的缺陷预测模型。该模型使用代码的结构信息和特征信息作为输入,使用注意力机制自适应的选择关键的特征,更准确地预测缺陷。实验证明,模型比传统的模型更有效、更准确,能够在不同的数据集上实现更高的预测准确率。模型能够用于特征选择和代码质量分析等方面的应用。

关键词:抽象语法树;注意力机制;缺陷预测

1引言

随着智能终端和个人计算机数量的飞速增长,在现有的软件开发模式中, 使用软件缺陷预测技术完全替代人工的缺陷检测 活动是不现实的, 为了保证软件质量, 现有的软件测试技术必不可少, 软件缺陷 预测技术一般用来协助项目组在测试和开发过程中分配资源, 为测试人员在测试 时提供较为准确的预测结果, 从而引起项目组技术人员的注意, 排查缺陷的可能, 因此, 软件缺陷预测模型的准确性就显得尤为重要。本文在抽象语法树的基础上, 结合以上软件缺陷预测技术在实际生产落地过 程中所遇到的阻碍, 提出了一种基于注意力机制的缺陷预测方法,对程序语义进行自动抽取, 提升模型的准确率, 并实现了模型的工具化, 推进缺陷预测工业化的落地。

2 基于抽象语法树的缺陷预测模型

本文构建的基于抽象语法树的软件缺陷预测模型架构。受益 于 Transformer 网络架构, 本文结合 Transformer 网络中的编码器部分以及解码器 部分的遮罩理念, 构建适用于软件缺陷预测的模型。

该模型主要由三个部分构成, 分别是抽象语法树编码、语义特征提取和缺陷预测。

2.1  抽象语法树编码

本文采用深度学习网络对语义特征进行提取, 因此网络的输入必须要求是向量形式而不能是序列化数据, 因此将抽象语法树序列转化为向量数据是一项重要的前期准备工作。本文在编码层采用的是词嵌入层 (Embedding Layer) 和位置编码层 (Position Layer)共同组成。

(1) 词嵌入层

词在网络的学习过程中就能够包含大量的抽象语法树 节点与节点之间的关系, 在训练模型的反向传播过程中, 也能够一直更新, 这种 编码方式更加成熟也更符合软件缺陷预测场景。

(2) 位置编码层

模型在网络中观察到的是全局信息而非顺序信息, 但程序 的运行和阅读过程大多都是顺序的, 因此, 对抽象语法树序列而言, 其顺序信息 也是程序语义中重要的一环。

2.2 语义特征提取

语义特征提取部分是为了抓取程序中的语义信息。其他以抽象语法树为基础 构建的缺陷预测模型在提取程序语义的过程中暴露出了模型层面上的两个问题:

(1) 模型对于较长的抽象语法树序列的处理能力较差

(2) 模型均未考虑程序的具体运行逻辑

在语义特征提取部分, 堆 叠多个基础网络层

2.3 缺陷预测

在分类预测时,只需要计算各个类别上的概率即可,因此,模型采用一个线性全连接层将语义特征向量再次变换维度,并连接一个SoftMax层输出样本有无缺陷的概率,

实验评估

3.1 数据集

本文选取了其中8个由Apache开源的软件项目以及其不同版本的缺陷信息作为本实验的数据来源,并将PROMISE数据集中的缺陷数据标签信息与对应的软件项目源代码对应起来。

3.2实验评估

本文选择了相同的 PROMISE 数据集作为实验数据来源, 构建多组同项目缺陷预测任务和多组跨项目缺陷预测任务。

(1)跨项目缺陷预测评估

为了模 拟在工业生产中的使用方式, 每一组实验都应当在相同的软件项目下进行, 应 当将版本号较小的作为训练样本, 版本号较大的作为测试样本集合。下表中列 出了本文选取的 12 组实验数据结果, 其中, 为了更加贴合预测的实际情况, 因 此将同项目内版本号相连的软件项目作为一组实验。通过将低版本的软件项目 作为训练集构建对应的抽象语法树序列并编码输入网络后训练整个模型, 然后 将高版本的软件项目作为测试集输入模型中预测其标签值并与真实标签值比对, 并根据预测结果计算查准率、召回率。

(2) 跨项目缺陷预测评估

为了评估基于注意力机制的缺陷预测方法在跨项目缺陷预测中的表现, 。与同项目软件缺陷预测任务类似, 本文随机选取了 PROMISE 数据集中不 同的项目中的任一版本两两组合构成训练集和测试集。

与同项目缺陷预测不同, 当前任务中的训练集和测试集之间的分配可以是 随机的。下表中列出了本文选取的 8 组实验数据结果, 其中, 表格前两列中软件名称与其版本号用 “-” 分隔开, 例如 log 表示 的 1.1 版本的项目。 实验中, 在数据不平衡问题上保持与同项目软件缺陷预测任务相同的处理方式。

本文基于注意力机制的缺陷预测方法在跨项目缺陷预测任务中的实验数据。表中展示了两个模型在查准率、 召回率以及 值上的表现, 且将较高的 值进行了加粗的展示。

总结

本文认为主动的缺陷预测方法更能在技术上保证软件的质量,并最后将研究目标锁定在基于抽象语法树的缺陷预测研究上,对该类方法的原理进行深入探究和思考,总结了其中的不足,并结合新兴模型的相关特点,提出了一种基于注意力机制的缺陷预测模型捕捉程序语义特征,最终以此预测软件项目中文件级别的缺陷信息。

参考文献

[1] 张芸. 软件工程缺陷分析关键技术研究[D]. 浙江大学, 2018.
[2] Jones C, Bonsignour O. The economics of software quality[M]. Addison-Wesley Professional, 2011.
[3]Boehm B, Basili V R. Top 10 list [software development][J]. Computer, 2001, 34(1): 135-137.
[4] Menzies T, Milton Z, Turhan B, et al. Defect prediction from static code features: current results, limitations, new approaches[J]. Automated Software Engineering, 2010, 17(4): 375-407.
[5]李勇, 黄志球, 王勇, 等. 数据驱动的软件缺陷预测研究综述 . 电子学 报, 2017, 45(04) : 982-988.