基于常微分方程图神经网络的语句级软件缺陷预测系统

文档序号:34729643发布日期:2023-07-07 23:16阅读:124来源:国知局
基于常微分方程图神经网络的语句级软件缺陷预测系统

本发明涉及软件缺陷预测,尤其涉及到一种基于常微分方程图神经网络的语句级软件缺陷预测系统及方法。


背景技术:

1、代码表示方法和缺陷预测模型是影响语句级软件缺陷预测模型的两个要素,本节介绍了以上两要素的研究进展。

2、代码表示方法:

3、源代码表示的目标是将源代码转换为相应的数值形式,可以用作缺陷预测模型的输入。由于其与缺陷预测模型的性能密切相关,该任务近年来受到了广泛关注。

4、缺陷预测中最常用的表示技术是度量元,它是评估源代码质量属性的指标。由于抽象程度高,它只能表示代码的全局统计特性,如语句数量、复杂度、软件开发过程等。导致区分缺陷语句与非缺陷语句之间细小的局部差异的能力不足。另外,我们希望选择的度量元集合具有正交性,即每个度量元能独立刻画代码的某一质量属性。当前常用的度量元集合有ck、mood等,这些度量元之间通常存在较强的相关性。如何从这些集合中挑选出适应于代码特点的度量元是当前研究的一个难点。针对该问题研究人员提出了filter-based,wrapper-based和embedded-based的度量元选择方法。然而实验结果发现这些技术对提高度量元之间的正交性贡献并不大。在极端的情况下经过特征选择的度量元集合共线性高达100%。

5、近年来,研究人员从代码的语义和结构两方面提出了新的表示方法。代码是编程语言书写的文本的集合,如同自然语言一样代码具有完备的语法规则,同时变量、关键词等代码实体包含着丰富的功能语义。因此自然语言处理中许多成熟的技术可应用于代码表示。bag-of-words是缺陷预测领域常用的一种代码表示方法,该方法通过统计关键词的词频将代码转化为对应的向量表达。然而bag-of-words 技术假设关键词之间具有独立同分布假设,即假设代码关键词没有上下文信息。代码和自然语言一样拥有完备的语法规则,并且基于此定义代码语句的生成规则,保证语义的正确性。语法规则的存在导致关键词之间不可能服从独立同分布假设。另外相较于自然语言,代码的字符集较自然语言要大很多,因此使用bag-of-words技术生成代码向量通常具有高维稀疏特性,导致预测模型预测性能下降明显。神经语言模型打破了关键词之间的独立同分布假设,认为代码关键词之间具有上下文。同时神经语言模型可将代码映射成为实值短向量,有效解决了针对词袋模型生成代码向量的高维稀疏问题。code2vec将代码分解为路径集合和实体集合,通过路径注意力机制实现代码的分布式表示。实验结果显示该方法能有效捕获代码携带的语义信息,对提升下游应用(变量名预测)有显著作用。deepjit将提交报告和源代码作为两个独立卷积神经网络的输入,将其携带的语义信息抽象为特征向量。对上述两向量进行拼接作为缺陷预测网络的输入。cc2vec通过构造层次化注意力网络生成变更对应的向量表示,并将其与deepjit 生成的特征向量相拼接作为预测网络的输入。

6、软件缺陷通常是由无数个不连续的语句相互作用产生的,因此语句之间的结构依赖关系与软件缺陷密切相关。构建结构依赖性的强大表示对于提高缺陷预测模型的功效至关重要。现有模型主要遵循深度学习模型+抽象语法树(ast)范式来捕捉结构依赖。具体来说,代码结构可以表示为从 ast遍历的token序列。 然后将此类序列输入到基于递归神经网络(rnn)的网络中以生成结构嵌入。但是,由于ast使用token作为节点,节点数量庞大,输入序列的长度变得非常大。基于rnn的模型可能无法捕获令牌之间的长期依赖关系。

7、为了解决这些问题,研究人员利用图神经网络(gnn)来捕获源代码中的结构依赖性。为了捕获长期依赖,基于gnn的方法必须堆叠多个gnn层以扩大感受野,这通常会导致过度平滑,并且gnn的表达能力会降低。在实际应用中,堆叠gnn层的数量不应超过两个,这意味着基于gnn的方法只能捕获二阶邻域内的结构依赖性。

8、缺陷预测模型:

9、按照预测结果的粒度,缺陷预测模型大致可以分为粗粒度缺陷预测模型和细粒度缺陷预测模型。传统缺陷预测技术主要针对粗粒度软件实体,例如文件、类、包的预测,产生了大量的研究成果。然而这些针对粗粒度软件实体的预测模型在实际应用中遇到了挑战。首先,由于粒度较大,导致开发者需要对预测结果进行测试以及复审来定位产生缺陷的具体位置,后续开销大。另外,一个大粒度的软件实体可能被很多开发人员修改过,难以找到一个合适的开发者对存在的缺陷进行修复。

10、随着研究的深入,面向语句级别的缺陷预测模型逐渐成为研究的热点。由于预测粒度小,不仅开发者可以花费更少的时间和精力去审查被预测为有缺陷的代码行,而且项目管理人员可以更准确地找到引入缺陷的开发者,有助于有效分析缺陷引入的原因,提高工程师修复缺陷的效率。近年来面向语句级别的缺陷预测模型相继提出。

11、为应对上述挑战,研究者提出了面向细粒度软件实体的缺陷预测模型。其中即时缺陷预测是在提交代码时对是否存在缺陷进行的预测。与模块、文件等粗粒度缺陷预测相比,提交仅包含有限行代码,对预测结果进行代码复审和测试的开销得到有效降低。同时,代码变更提交后立即执行缺陷预测这有利于追踪缺陷的来源以及缩短缺陷修复的时间。

12、jitline基于词袋模型将代码抽象为向量。使用差分演化和 smote 技术解决了代码向量的数据不平衡问题。将经过处理的代码向量作为随机森林算法的输入,构建提交级别缺陷预测模型。将提交缺陷预测结果作为输入,使用可解释学习模型lime分析每一行代码存在缺陷的可能性。

13、line-dp使用词袋模型将代码抽象成为向量,将其作为logistic模型的训练数据,构建文件级缺陷预测模型。将文件级缺陷预测结果作为可解释学习模型 lime 的输入,分析每个代码行存在缺陷的概率分布。

14、deeplinedp提出了一种“端到端”的缺陷预测模型。该模型使用 word2vec 将每个语句中的标记编码为短密集向量并利用 bi-gru 和注意机制来捕获标记和语句之间的长期依赖关系,实现文件级缺陷预测,最终通过缺陷文件评估token注意力来间接获得语句级缺陷预测结果,token注意力量化了对缺陷文件预测的贡献。

15、即时缺陷预测统计数据显示平均每个提交包含3.7个文件,每个文件包含73-190行代码。预测为缺陷的提交中仅43%的文件存在缺陷。代码复审开销依旧很大,即时缺陷预测粒度还需进一步细化。

16、jitline和line-dp将提交级或文件级缺陷预测结果作为可解释学习模型 lime的输入,这些模型都采用了“分层”的结构,即首先生成提交级或文件级缺陷预测结果,再使用可解释机器学习算法对预测结果进行细化以确定存在缺陷的语句。然而以lime为代表的可解释算法存在解释结果不稳定和解释结果受超参数影响大的问题,导致对同一个缺陷使用同一方法执行多次解释,输出结果不一致;对同一缺陷使用不同局部解释方法,输出结果不一致的问题。

17、deeplinedp严重依赖文件级缺陷预测效果,如果在无缺陷文件中有较高token注意力那么会很大程度上会影响语句级缺陷预测效果。同时该方法并没有考虑语句间结构特性,直接通过邻接语句来捕获长程依赖。


技术实现思路

1、本发明的主要目的在于提供一种基于常微分方程图神经网络的语句级软件缺陷预测系统及方法,旨在解决以往缺陷预测只能在粗粒度级别实现的问题,通过图结构直接实现了语句级缺陷预测并具有高准确度,高稳定性等特点。

2、为实现上述目的,本发明提供基于常微分方程图神经网络的语句级软件缺陷预测系统,所述系统,具有:

3、输入模块;

4、语义特征表示模块;

5、结构特征表示模块;

6、缺陷分类模块;

7、其中,所述输入模块用于对源代码进行语句解析,根据解析后的语句建立语句依赖图;

8、其中,所述语义特征表示模块用于生成语句的语义表示;

9、其中,所述结构特征表示模块用于根据语句依赖图和语句的语义表示,利用常微分方程图神经网络捕获长程数据依赖关系,并控制语句之间的依赖关系,以生成语句的结构表示;

10、其中,所述缺陷分类模块用于采用多层感知器生成每个语句的分类结果。

11、可选的,所述输入模块,还用于对解析后的语句进行关键词拆分处理。

12、可选的,所述关键词拆分处理包括停用词删除处理、分段处理和词干提取处理。

13、可选的,所述输入模块,还用于分析语句间的控制依赖和数据依赖,构建语句依赖图;其中:每个节点代表源代码中的一条语句;边集表示语句之间的数据依赖或控制依赖,语句依赖图的邻接矩阵描述了语句空间的拓扑结构;表示节点i和节点j之间没有边,否则表示节点i和节点j之间有边。

14、可选的,所述控制依赖和所述数据依赖,具体为:

15、当且仅当满足以下条件时,节点和之间存在数据依赖关系:

16、(1)变量包含在语句中;

17、(2)语句使用变量;

18、(3)和之间有一条路径;

19、当且仅当满足以下条件时,语句和之间存在控制依赖关系:

20、(1)语句和之间存在路径;

21、(2)语句和之间没有数据依赖。

22、可选的,所述语义特征表示模块用于在接收到语句序列输入时,将每条语句转换为矩阵,利用双向gru捕获关键词的依赖关系,获得语义依赖项,并对每条语句进行语义依赖编码,再对语义依赖编码进行嵌入定义,生成语句的语义表示。

23、可选的,对语义依赖编码进行嵌入定义,生成语句的语义表示,具体采用自注意力机制动态地为每条语句分配合适的权重,以生成语句的语义表示。

24、可选的,所述结构特征表示模块利用空间图神经网络,对给定的语句依赖图和语句的语义表示,生成语句的结构表示。

25、可选的,所述结构特征表示模块,具有:

26、邻居节点采样单元;

27、常微分方程图神经网络单元;

28、所述邻居节点采样单元通过选择语句依赖图中与目标节点相关性最大的n个节点生成目标节点的表示;

29、所述常微分方程图神经网络单元捕获语句的语义表示中长程数据依赖关系并控制语句之间的依赖关系,以生成每条语句的结构表示。

30、此外,为了实现上述目的,本发明还提供了一种基于常微分方程图神经网络的语句级软件缺陷预测方法,所述方法包括:

31、s1:对源代码进行语句解析,根据解析后的语句建立语句依赖图;

32、s2:生成语句的语义表示;

33、s3:根据语句依赖图和语句的语义表示,利用常微分方程图神经网络捕获长程数据依赖关系,并控制语句之间的依赖关系,以生成语句的结构表示;

34、s4:采用多层感知器生成每个语句的分类结果。

35、本发明的有益技术效果在于:提出的一种基于常微分方程图神经网络的语句级软件缺陷预测系统及方法,所述系统具有:输入模块;语义特征表示模块;结构特征表示模块;缺陷分类模块;其中,所述输入模块用于对源代码进行语句解析,根据解析后的语句建立语句依赖图;所述语义特征表示模块用于生成语句的语义表示;所述结构特征表示模块用于根据语句依赖图和语句的语义表示,生成语句的结构表示;所述缺陷分类模块用于采用多层感知器生成每个语句的分类结果。本发明提出了一种基于常微分方程图神经网络的方法来捕获语句中的长程依赖关系,使预测结果有更高的准确性、稳定性,解决以往缺陷预测只能在粗粒度级别实现的问题,直接在语句级别实现细粒度的缺陷预测。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1