当前位置: 首页 > 专利查询>南京大学专利>正文

一种基于图神经网络的通用缺陷检测方法技术

技术编号:33480494 阅读:27 留言:0更新日期:2022-05-19 00:54
本发明专利技术公开一种基于图神经网络的通用缺陷检测方法,包括以下步骤:程序预处理,提取程序语义信息图节点的语义特征值,并对图形表示向量化,生成模型需要的输入形式;构建基于图神经网络的通用缺陷预测模型,用标签标记缺陷样本分布,训练图神经网络的缺陷预测能力,将训练过程中的最优模型作为通用缺陷检测模型;使用通用缺陷检测模型对待测程序进行预测,自定义目标缺陷类型,通用缺陷基于距离排名的缺陷预测方法进行预测。特定缺陷为人工确认预测结果,为待测程序添加标签并使用模型进行学习,强化模型预测能力。本发明专利技术有效解决了目前的基于机器学习的缺陷预测方法需要大量训练数据学习缺陷特征,无法预测不在训练集中的缺陷类型的问题。陷类型的问题。陷类型的问题。

【技术实现步骤摘要】
一种基于图神经网络的通用缺陷检测方法


[0001]本专利技术涉及软件工程领域的缺陷检测技术,具体是一种基于图神经网络的通用缺陷检测方法

技术介绍

[0002]缺陷检测是保证软件质量的重要方法之一,静态分析是目前最常用的缺陷检测手段。静态分析方法需要对缺陷进行精确建模,但由于缺陷成因复杂,静态分析方法难以有效解决误报和漏报的问题;静态分析方法可扩展性较低,在面对大规模程序时,往往难以达到规定的时间、内存消耗等性能要求。由于缺陷特征复杂,现有基于机器学习进行缺陷预测的方法需要大量训练数据来学习缺陷特征,且无法应对不在训练集中的缺陷类型。同时缺陷特征越复杂,模型就需要越多数据集来进行学习,因此降低缺陷特征复杂度可以降低模型学习的难度;缺陷代码通常只占所在函数的一小部分,如果模型可以关注缺陷相关代码,弱化无关代码,则可提高模型的能力,降低学习成本,减少训练集数据量;尽管缺陷并不相同,但是不同缺陷之间存在一些共性,借助静态缺陷检测中异常检测的思想可以发现缺陷之间的共性,使得模型可以检测不在训练集中的缺陷。
[0003]本专利技术提出了基于图神经网络的方法来学习缺陷特征,相比于使用基于transformer的Bert模型来学习程序纯文本信息,图神经网络可以学习更多语义信息。同时本专利技术采用多种优化方法来降低模型所需训练集的数量,提出新的损失函数和缺陷预测方法,使得模型可以不受缺陷类型限制、检测不在训练集中的缺陷类型。

技术实现思路

[0004]本专利技术提出一种基于图神经网络的通用缺陷检测方法,可以解决目前的基于机器学习的缺陷预测方法需要大量训练数据学习缺陷特征,无法预测不在训练集中的缺陷类型的问题。
[0005]为解决上述技术问题,本专利技术通过以下技术方案实现:一种基于图神经网络的通用缺陷检测方法,包括如下步骤:
[0006]步骤一,程序预处理,以程序源码为输入,基于静态分析构建过程间程序语义信息图,在此基础上,提取程序语义信息图节点的语义特征值,并对图形表示向量化,生成模型需要的向量表示;
[0007]步骤二,构建基于图神经网络的通用缺陷预测模型,基于基准程序的缺陷报告,在程序向量表示上用标签标记缺陷样本分布,使用带标签的基准程序向量表示为输入,训练图神经网络的缺陷预测能力,将训练过程中的最优模型作为通用缺陷检测模型;
[0008]步骤三,使用通用缺陷检测模型对待测程序进行预测,用户自定义目标缺陷类型,筛选包含特定缺陷类型对应敏感操作的待测样本作为输入;加载通用缺陷检测模型生成待测样本特征向量,基于距离排名的缺陷预测方法进行预测。针对特定缺陷输出预测结果,人工确认预测结果,为待测程序添加标签并使用模型进行学习,强化模型预测能力。
[0009]上述的基于图神经网络的通用缺陷检测方法,其特征在于,所述步骤一的程序预处理包括:
[0010]·
生成程序源码对应的语句级别程序依赖图,以程序中每一条语句为节点,以数据依赖和控制依赖为两种类型的边;
[0011]·
将程序依赖图中的节点通过抽象语法树进行扩展,即程序依赖图中每一个节点为一个抽象语法树的根节点,扩展后形成新的图,图中包含程序依赖图节点和抽象语法树节点两种节点,包含数据依赖边、控制依赖边和抽象语法树边三种边;
[0012]·
保持语句级别的控制依赖边不变,将语句级别的数据依赖边下放到抽象语法树的叶子结点,形成变量级别的数据依赖边;
[0013]·
在基准程序的预处理过程中,对于缺陷程序,提取导致缺陷的完整函数调用链;对于正确程序,提取可以证明程序正确的完整函数调用链;将调用链中的所有函数的程序语义信息图使用数据依赖边和控制依赖边连接;
[0014]·
在待测程序的预处理过程中,每个函数为一个待测样本。对于每一个待测样本,使用其上下两层调用函数作为其上下文,使用程序语义信息图的函数上下文连接方法将对应程序语义信息图连接起来;
[0015]·
在图中添加一个元节点,并增添一种新的边,该边连接元节点到图中每一个节点,该节点用于模型计算其他节点权重;
[0016]·
图中节点转化为一维状态向量,向量大小为图中节点的数目,向量每一位取值为表示节点语句类型的整数值;
[0017]·
图中边转化为由源节点、边类型、目标节点组成的三元组,节点使用从0递增的整数值进行编号,边的类型使用从1递增的整数值进行编号;
[0018]上述的基于图神经网络的通用缺陷检测方法,其特征在于,所述步骤二中的构建基于门控图神经网络的通用缺陷预测模型包括:
[0019]·
根据基准程序的缺陷报告对程序向量表示添加标签,标记缺陷样本分布。正确样本添加0标签,缺陷样本添加1标签;
[0020]·
以门控图神经网络为基础,引入节点权重机制。定义元节点,元节点连接图中所有节点,元节点用于学习其他节点的权重,在图神经网络的信息传递过程中为每个节点的信息附加此权重,使得模型可以强化关键节点,弱化无关节点;
[0021]·
图神经网络通过多轮迭代生成每个样本的特征向量,将每个样本的特征向量映射到坐标系中,使用欧式距离来表示两个样本点之间的距离,该距离表示样本之间的相似性。通过定义的基于图神经网络的通用缺陷预测模型损失函数,使得所有正确样本之间的距离降至最低,所有缺陷样本和正确样本之间的距离大于距离阈值,使模型获得区分正确样本和缺陷样本的能力,保存多轮迭代中损失最低的模型为最优模型,用作缺陷预测阶段的通用缺陷检测模型;
[0022]·
不同缺陷类型的基准程序分别进行训练,提高模型泛化能力。
[0023]上述的基于图神经网络的通用缺陷检测方法,其特征在于,所述步骤三使用通用缺陷检测模型对待测程序进行预测包括:
[0024]·
用户自定义要预测的缺陷类型,筛选包含缺陷对应的敏感操作的待测样本。如针对空指针解引用缺陷,则筛选包含解引用操作的待测样本;针对数组越界缺陷,则筛选包
含数组操作的待测样本。如无针对特定缺陷,则使用所有待测样本作为输入;
[0025]·
加载通用缺陷预测模型,以待测样本的向量表示为输入,通过模型计算样本特征向量,将特征向量映射到坐标系中,计算所有样本到样本集合中心点的距离;
[0026]·
定义阈值M,即距离最远的M个样本为缺陷样本,报告预测结果;
[0027]·
人工确认模型预测结果,对待测样本添加标签,将添加标签后的待测样本用作训练数据来提高模型预测能力。
[0028]上述的基于图神经网络的通用缺陷检测方法,其特征在于,所述步骤一中定义程序语义信息图的函数上下文连接方法包括:
[0029]·
使用控制依赖边连接调用函数的函数调用语句和对应被调函数的入口节点;
[0030]·
使用控制依赖边连接被调函数的出口节点和调用函数的函数调用语句;
[0031]·
使用数据依本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于图神经网络的通用缺陷检测方法,其特征在于,包括如下步骤:步骤一,程序预处理,以程序源码为输入,基于静态分析构建过程间程序语义信息图,在此基础上,提取程序语义信息图节点的语义特征值,并对图形表示向量化,生成模型需要的向量表示;步骤二,构建基于图神经网络的通用缺陷预测模型,基于基准程序的缺陷报告,在程序向量表示上用标签标记缺陷样本分布,使用带标签的基准程序向量表示为输入,训练图神经网络的缺陷预测能力,将训练过程中的最优模型作为通用缺陷检测模型;步骤三,使用通用缺陷检测模型对待测程序进行预测,用户自定义目标缺陷类型,筛选包含特定缺陷类型对应敏感操作的待测样本作为输入;加载通用缺陷检测模型生成待测样本特征向量,基于距离排名的缺陷预测方法进行预测。针对特定缺陷输出预测结果,人工确认预测结果,为待测程序添加标签并使用模型进行学习,强化模型预测能力。2.根据权利要求1所述的基于图神经网络的通用缺陷检测方法,其特征在于,所述步骤一的程序预处理包括:
·
生成程序源码对应的语句级别程序依赖图,以程序中每一条语句为节点,以数据依赖和控制依赖为两种类型的边;
·
将程序依赖图中的节点通过抽象语法树进行扩展,即程序依赖图中每一个节点为一个抽象语法树的根节点,扩展后形成新的图,图中包含程序依赖图节点和抽象语法树节点两种节点,包含数据依赖边、控制依赖边和抽象语法树边三种边;
·
保持语句级别的控制依赖边不变,将语句级别的数据依赖边下放到抽象语法树的叶子结点,形成变量级别的数据依赖边;
·
在基准程序的预处理过程中,对于缺陷程序,提取导致缺陷的完整函数调用链;对于正确程序,提取可以证明程序正确的完整函数调用链;将调用链中的所有函数的程序语义信息图使用数据依赖边和控制依赖边连接;
·
在待测程序的预处理过程中,每个函数为一个待测样本。对于每一个待测样本,使用其上下两层调用函数作为其上下文,使用程序语义信息图的函数上下文连接方法将对应程序语义信息图连接起来;
·
在图中添加一个元节点,并增添一种新的边,该边连接元节点到图中每一个节点,该节点用于模型计算其他节点权重;
·
图中节点转化为一维状态向量,向量大小为图中节点的数目,向量每一位取值为表示节点语句类型的整数值;
·
图中边转化为由源节点、边类型、目标节点组成的三元组,节点使用从0递增的整数值进行编号,边的类型使用从1递增的整数值进行编号。3.根据权利要求1所述的基于图神经网络的通...

【专利技术属性】
技术研发人员:王豫张弛徐安孜陈谦王林章
申请(专利权)人:南京大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1