CN113641586B - 软件源代码缺陷检测方法、系统、电子设备及储存介质 - Google Patents

软件源代码缺陷检测方法、系统、电子设备及储存介质 Download PDF

Info

Publication number
CN113641586B
CN113641586B CN202110958006.XA CN202110958006A CN113641586B CN 113641586 B CN113641586 B CN 113641586B CN 202110958006 A CN202110958006 A CN 202110958006A CN 113641586 B CN113641586 B CN 113641586B
Authority
CN
China
Prior art keywords
code
defect
source code
defect detection
data set
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110958006.XA
Other languages
English (en)
Other versions
CN113641586A (zh
Inventor
张世琨
叶蔚
邓枭
高庆
张君福
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Peking University Software Engineering Co ltd
Original Assignee
Beijing Peking University Software Engineering Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Peking University Software Engineering Co ltd filed Critical Beijing Peking University Software Engineering Co ltd
Publication of CN113641586A publication Critical patent/CN113641586A/zh
Application granted granted Critical
Publication of CN113641586B publication Critical patent/CN113641586B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/241Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
    • G06F18/2415Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on parametric or probabilistic models, e.g. based on likelihood ratio or false acceptance rate versus a false rejection rate
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Software Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Molecular Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Evolutionary Biology (AREA)
  • Probability & Statistics with Applications (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Stored Programmes (AREA)

Abstract

发明实施例涉及软件测试领域,公开了一种软件源代码缺陷检测方法、系统、电子设备及计算机可读存储介质,其中方法包括步骤:构建源代码缺陷数据集,基于开源项目缺陷信息构建用于训练的大规模数据集,包括对开源项目存在的缺陷条目进行自动对齐与抽取以及对所述开源项目源代码缺陷进行上下文增广;构建基于代码切片的深度学习源代码缺陷检测模型,包括使用多模态的语义表示对代码片段进行表示与分类;对基于人工智能的源代码缺陷检测结果集成显示;开发者可以使用本发明所述的方法自动构建来源于真实项目的缺陷数据集并借助模型进行自动判断,而不必花费大量的时间与精力人工遍历代码。

Description

软件源代码缺陷检测方法、系统、电子设备及储存介质
技术领域
本发明涉及软件测试领域,尤其是一种面向大规模工程基于多模态代码表示的软件源代码缺陷检测方法、系统、电子设备及存储介质。
背景技术
在源代码缺陷检测是软件开发过程中至关重要的一环,但人工审查代码需要专业知识并消耗巨大的人力成本。如何有效快速识别代码缺陷已经成为重中之重。人工智能方法在该任务上已展现出很大潜力,利用深度神经网络的特征挖掘与表示能力,不仅可以为缺陷检测提供一种有效的技术路径,而且还可能对于解释缺陷机理提供一种新的思路,极大提高人工审查的效率。尽管基于人工智能的源代码缺陷检测具有良好的研究前景和巨大的应用价值,但是依然面临巨大的挑战,在代码缺陷数据集、缺陷预测分类模型等方面的研究都有众多技术难点亟待解决。
基于深度学习的源代码缺陷检测不同于传统的检测流程,其需要大量的缺陷代码数据作为支撑。如何基于开源项目信息生成用于训练模型的代码缺陷数据集,是该研究需要解决的一个难点,也将决定用于缺陷检测的深度学习模型能力。这一困难进一步包含两个部分:构造来源于真实工程、数据规模大、缺陷具体位置明确、缺陷类型与CVE-ID对应准确且包含完整缺陷发生过程的代码缺陷数据集具有很大的挑战性,需要设计精准的<代码,缺陷>对齐算法;基于切片代码路径进一步扩展出粒度适中且语义丰富的代码切片是一个需要大量探索的过程,这将是缺陷检测深度学习模型成功的关键。
缺陷检测的深度学习分类模型需要对代码语义进行精准地表示,深度神经网络一方面需要挖掘传统基于逻辑和规则的检测方法没有覆盖的隐式特征,另一方面也需要部分表达出这部分逻辑与规则的语义。因此,如何设计神经网络结构是一项挑战。需要综合考虑序列、树和图等多种形态的代码表示,探索卷积神经网络、循环神经网络、树形神经网络、图神经网络和注意力机制的多种组合,这部分工作需要创造性的设计,也需要大量的经验性尝试和对神经网络的深度理解。
发明内容
本发明的目的在于提供一种基于深度学习的缺陷检测方法,基于深度学习模型判断源代码切片是否有缺陷。
为实现上述目的,本发明提供一种软件源代码缺陷检测方法,包括:
步骤一:构建源代码缺陷数据集,基于开源项目的缺陷信息构建用于深度学习模型训练的数据集,包括对所述开源项目存在的缺陷条目进行自动对齐的与抽取;
步骤二:构建基于代码切片的深度学习源代码缺陷检测模型,包括使用多模态的语义表示对代码片段进行表示与分类;
步骤三:将源代码缺陷检测结果汇总并显示。
根据本发明的一个方面,根据所述源代码缺陷数据集,检索目标开源项目关键词,得到所述开源项目对应缺陷代码出处与其缺陷类型的匹配,定位所述缺陷代码具体位置行,对所述缺陷代码进行切片操作,以所述具体位置行为起点,通过控制流图回溯缺陷路径,得到真实缺陷对应的<代码切片,缺陷>对,修改所述缺陷代码,对修正后的代码使用所述切片操作并标注是否更改正确,得到真实缺陷源代码数据集。
根据本发明的一个方面,对所述缺陷代码路径进行切片,根据切片中的缺陷发生位置和传播路径,将所述缺陷代码路径扩展为包含更丰富上下文的代码切片,所述代码切片包含多种模态的信息;解析所述代码切片各种元素的结构关系,生成代码知识图谱,用Trans系列方法对知识图谱的节点进行表示学习,得到代码元素的结构语义。
根据本发明的一个方面,根据所述知识图谱,用TransE、TransH和TransR对节点进行学习,得到所述结构语义,完成所述结构语义信息解析。
根据本发明的一个方面,基于序列代码语义建模,利用多种网络结构来捕获代码的信息,使用SBT神经网络表达代码序列信息,所述代码序列信息为代码本身的自然序列,通过层次注意力网络进行建模;
基于树的代码语义建模,切片的抽象语法树使用基于树的卷积神经网络TBCNN和基于树的长短期记忆网络Tree-Based LSTM进行建模;
基于图的代码语义建模,代码切片的图结构,使用图注意力网络GAT建模。
根据本发明的一个方面,所述层次注意力网络第一层为双向循环神经网络构成的语句编码器,包含字符级注意力机制;所述层次注意力网络第二层为双向循环神经网络构成的切片编码器,包含语句级的注意力机制。
根据本发明的一个方面,分别为二分类和多分类模型引入图像分类中的FocalLoss和排序问题中的Ranking Loss作为额外的损失函数。
为实现上述目的,本发明提供一种软件源代码缺陷检测系统,包括:
源代码缺陷数据集构建模块,构建源代码缺陷数据集,基于开源项目缺陷信息构建用于深度学习模型训练的大规模数据集,包括对开源项目存在的缺陷条目进行自动对齐的与抽取;
源代码缺陷检测模型构建模块,构建基于代码切片的深度学习源代码缺陷检测模型,包括使用多模态的语义表示对代码片段进行表示与分类;
缺陷检测结果集成显示模块,将源代码缺陷检测结果汇总并显示。
为实现上述目的,本发明提供一种电子设备,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述针对软件源代码缺陷检测方法。
为实现上述目的,本发明提供一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现上述针对软件源代码缺陷检测方法。
基于此,本发明的有益效果在于:
1.目前学术研究中给出的代码缺陷数据集,只有局部的代码片段,无法在整个大工程的上下文中获取关键代码,难以表达真实的源代码安全评测场景。本项目给出一种开源项目中缺陷与代码的对齐方法,能够得到更加准确的<代码,缺陷>数据;同时利用代码库中存在的缺陷修复代码,构建对应的缺陷修正正确切片;进而对两类数据进行集合,能够得到覆盖常见代码缺陷、面向代码切片缺陷预测的有效数据集。
2.传统的代码-缺陷对齐方法,除人工对齐外,大多依靠简单的CVE-ID字符级匹配,将描述信息中存在CVE编号的一次提交与CVE条目对应起来,提交的Diff信息往往并不能体现缺陷发生的全过程。本项目通过分析缺陷描述文本中的语义,利用启发式规则抽取出与缺陷紧密相关的关键代码,以此作为数据集中的目标缺陷代码片段能够提供更加完整的代码缺陷语义。
3.构建代码知识图谱,并通过知识图谱表示学习得到代码元素的结构语义表示,能够丰富原始输入信息。捕获输入中不同维度的信息是提升神经网络模型性能的常用手段,多模态的语义具有互补性,在缺陷报告分类问题上具有可预见的性能提升潜力。
4.Focal Loss和Ranking Loss在缺陷报告样本的不平衡问题上具有良好的扩展性,面向缺陷报告的特征对相关超参进行微调是一种可行的方法。
附图说明
图1示意性表示根据本发明的软件源代码缺陷检测方法的流程图
图2示意性表示本发明的整体方法框架
图3示意性表示代码缺陷数据构建方法的细节图
图4示意性表示缺陷检测模型的数据处理过程示意图。
图5示意性表示代码片段按照知识图谱的形式表示示意图。
图6示意性表示代码知识图谱表示学习方法示意图,分别为TransE、TransH、TransR。
图7示意性表示针对代码切片的层次注意力网络示意图。
图8示意性表示层次注意力机制的可解释性示意图,通过attention值的分布定位判断依据位置。
图9示意性表示TBCNN网络构架示意图。
图10示意性表示树状卷积神经网络的卷积层和池化层示意图。
图11示意性表示图注意力网络构架示意图。
图12示意性表示缺陷检测系统示意图。
图13示意性表示根据本发明的软件源代码缺陷检测系统流程图。
具体实施方式
现在将参照示例性实施例来论述本发明的内容。应当理解,论述的实施例仅是为了使得本领域普通技术人员能够更好地理解且因此实现本发明的内容,而不是暗示对本发明的范围的任何限制。
如本文中所使用的,术语“包括”及其变体要被解读为意味着“包括但不限于”的开放式术语。术语“基于”要被解读为“至少部分地基于”。术语“一个实施例”和“一种实施例”要被解读为“至少一个实施例”。
图1示意性表示根据本发明的针对一种软件源代码缺陷检测方法的流程图。如图1所示,根据本发明的针对有噪声且参数不明的自行车轨迹数据的路网匹配方法,图2为图1的框架,示意性表示发明细节。包括以下步骤:
101:构建源代码缺陷数据集,基于开源项目的缺陷信息构建用于深度学习模型训练的数据集,包括对所述开源项目存在的缺陷条目进行自动对齐与抽取;
102:构建基于代码切片的深度学习源代码缺陷检测模型,包括使用多模态
的语义表示对代码片段进行表示与分类;
103:将源代码缺陷检测结果汇总并显示。
本发明提供的上述针对软件源代码缺陷检测方法,开发者可以使用本发明所述的方法自动构建来源于真实项目的缺陷数据集并借助模型进行自动缺陷判断,而不必花费大量的时间与精力人工遍历代码。
根据本发明的一个实施方式,图3示意性表示代码缺陷数据构建方法,通过匹配的缺陷代码与缺陷类型,建立源代码缺陷数据集,同时保证代码能够覆盖缺陷的完整路径,包含缺陷从相关变量声明到最终触发的完整代码语句,基于NVD与CNNVD等代码缺陷数据库,使用爬虫检索目标开源项目关键词,得到开源项目存在的缺陷条目及对应代码库的外链链接,NVD等缺陷库中提供外部链接,链接到代码库的外链后,针对不同项目设定对应的解析规则,解析缺陷数据库中的外部链接,爬取指向开源项目代码的缺陷条目,从外链中爬取出缺陷相关源码,通过图4示意性表示源代码缺陷条目网站的数据示意图,得到开源代码库中的缺陷位置示意图的缺陷相关源代码,获得对应缺陷代码出处与其缺陷类型的匹配。
根据本发明的一个实施方式,通过启发式的方法,将缺陷触发位置定位到具体的行,其中,不同缺陷类型通常对应的启发式方法不同,如对于缓冲区溢出类型的缺陷,启发式方法即为要求触发位置为缓冲区操作,根据敏感元素语义匹配的方式进行缺陷定位:对代码的文字描述进行分析,抽取出其主体类型,通过在修复漏洞所修改内容中寻找该主体的实例,对该漏洞的真实触发位置进行定位,得到一个memory buffer缓冲区缺陷,通过语法分析可以得到主体是“缓冲区”类型,关注“缓冲区”类型的变量,得到该缺陷是缓冲区。
根据本发明的一个实施方式,以缺陷触发位置为起点,通过控制流图回溯缺陷路径,用切片的方式提取出该路径,得到真实缺陷对应的<代码切片,缺陷>对,其中,将代码中对某条语句或变量有影响的语句抽取出来,本方法实施例将与保留触发语句中相关变量。
根据本发明的一个实施方式,对代码库中修正后的该缺陷,针对定位的缺陷触发位置,通过控制流图回溯路径,考虑函数调用关系生成代码切片,对得到的真实缺陷与缺陷修复后的<代码切片,缺陷>进行集合,得到可靠性较高且缺陷语义较完整的数据集,数据集是每条代码切片都被标注了是否有缺陷的代码切片集合。
根据本发明的一个实施方式,构建深度学习源代码缺陷检测模型包括:
源代码缺陷的预测通过设计深度学习模型对代码切片进行分类来完成,训练两种分类模型:一种是判断代码切片是否有缺陷的二分类模型,另断代一种是判码切片具有何种缺陷的多分类模型,前者在训练时,输入的切片标签为是否含有缺陷,输出时使用二分类交叉熵作为损失函数,激活函数使用sigmoid函数;后者在训练时,输入的切片标签为缺陷类型,输出时使用多类别交叉熵作为损失函数,激活函数使用Softmax函数。过程如图4示意性表示缺陷检测模型的数据处理过程示意图所。
根据本发明的一个实施方式,对缺陷代码路径扩展并切片,基于代码切片中的缺陷发生位置和传播路径,利用函数调用关系和控制流图等信息将代码路径扩展为包含更丰富上下文的代码切片,代码切片包含多种模态的信息,将构建代码切片的抽象语法树和控制流/数据流图,作为多种维度的输入;每一种信息的来源或者形式,都可以称为一种模态,多模态包含了多种角度多种层次的信息,如自然序列结构(自然顺序体现)、层次结构(代码逻辑体现)、值流结构(值流图体现)、控制流结构(控制流图体现)等。
根据本发明的一个实施方式,图5示意性表示代码片段按照知识图谱的形式表示示意图,解析代码切片各种元素的结构关系,生成代码知识图谱,用Trans系列方法对知识图谱的节点进行表示学习,得到代码元素的结构语义表示,增强代码语义,Trans系列的方法使用TransE、TransH和TransR,如图6示意性表示代码知识图谱表示学习方法示意图。通过知识图谱的表示,将代码的结构语义显式的作为后续模型输入,可以使得模型更好更直接的学习到结构信息。TransE针对关系Vr的两个三元组(Vh1,Vr,Vt1)和(Vh2,Vr,Vt2),让Vh1到Vt1的平移向量和Vh2到Vt2的平移向量保持相同,平移向量能够反应这两个三元组共同联系Vr。TransH为超平面上的转换操作,对每一个关系定义一个超平面Wr,和一个关系向量Vr,Vh⊥、Vt⊥是Vh、Vt在Wr上的投影,使得同一个实体在不同关系中的意义不同,同时不同实体在同一关系中的意义可以相同。TransR为所有实体建立一个共同的语义空间,将实体投影到对应的关系空间中,建立从头实体到尾实体的翻译关系。
根据本发明的一个实施方式,基于序列代码语义建模,利用多种网络结构捕获代码的多模态信息,使用SBT表达代码序列信息,通过层次注意力网络进行建模,如图7示意性表示针对代码切片的层次注意力网络示意图与图8示意性表示层次注意力机制的可解释性示意图所示,层次注意力网络第一层为双向循环神经网络构成的语句编码器,包含了字符级注意力机制;第二层为双向循环神经网络构成的切片编码器,包含了语句级的注意力机制,层次注意力网络本身的目的就是挖掘语句中的层次结构信息。层次注意力网络先通过单词对语句进行编码,再通过语句对整个切片进行编码。
根据本发明的一个实施方式,切片的抽象语法树使用基于树的卷积神经网络TBCNN)和基于树的长短期记忆网络LSTM进行建模,其中,CNN和LSTM是两种基本的深度学习网络,使用深度学习网络的tree-base版本,图9示意性表示TBCNN网络构架示意图,TBCNN包含四层,在卷积层和池化层对树状结构特征进行建模,如图10示意性表示树状卷积神经网络的卷积层和池化层示意图,其中卷积层包含不同深度的树卷积核,池化层直接对全部特征向量选取每一个维度中的最大值作为结果。
根据本发明的一个实施方式,代码切片的图结构,如控制流图和数据流图,使用图注意力网络GAT建模,GAT是图网络的经典模型,可以较好的满足以图作为输入的分类任务,图结构的构造在抽象语法树结构的基础上,通过不同类型的依赖关系,来增加节点之间的连接,基于GAT,针对图模态的代码信息,生成图结点序列所对应的子图集,对于特定结点使用注意力机制计算出其与邻近结点集合的注意力权重分布,得到结点序列的隐状态表示,输入到卷积神经网络进行SoftMax分类,整体网络架构如图11示意性表示图注意力网络构架示意图。
根据本发明的一个实施方式,基序列于、树、图的代码语义模型是模型的主架构,为二分类和多分类模型引入图像分类中的Focal Loss和排序问题中的Ranking Loss作为额外的损失函数,引入这两种损失函数,使得模型可以更多的关注少数类,能够增强负样本的识别能力,提高模型的泛化性能,Focal Loss在标准交叉熵损失基础上修改得到,通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本,在Ranking Loss中,代码的语义表示对针对每一类缺陷计算一个得分,以此来更好地区分代码是否有缺陷。
根据本发明的一个实施方式,对基于人工智能的源代码缺陷检测结果集成显示,开发一个代码浏览器,前端负责浏览代码和展示模型的分析结果,后端为本方法描述的模型,接受输入并对代码片段进行缺陷判断,把结果返回给前端显示,如图12示意性表示缺陷检测系统示意图所示。
本实施方式的有益效果在于:
本方法实施方式的上述建模过程对代码的序列、树、图均进行考虑,构建了代码知识图谱,并通过知识图谱表示学习得到代码元素的结构语义表示,能够丰富原始输入信息;捕获输入中不同维度的信息提升了神经网络模型性能,多模态的语义具有互补性,在缺陷报告分类问题上具有可预见的性能提升潜力。
不仅如此,为实现上述发明目的,本发明还提供一种软件源代码缺陷检测系统,图13示意性表示根据本发明的软件源代码缺陷检测系统流程图,该系统包括:
源代码缺陷数据集构建模块,构建源代码缺陷数据集,基于开源项目的缺陷信息构建用于深度学习模型训练的数据集,包括对所述开源项目存在的缺陷条目进行自动对齐的与抽取;
源代码缺陷检测模型构建模块,构建基于代码切片的深度学习的源代码缺陷检测模型,包括使用多模态的语义表示对代码片段进行表示与分类;
缺陷检测结果集成显示模块,将源代码缺陷检测结果汇总并显示
缺陷代码路径扩展切片子模块,缺陷代码路径扩展并切片,基于所述代码切片中的缺陷发生位置和传播路径,利用函数调用关系和控制流图等信息将代码路径扩展为包含更丰富上下文的代码切片,代码切片包含多种模态的信息;
代码知识图谱表示增强子模块,解析代码切片各种元素的结构关系,生成代码知识图谱,用Trans系列方法对知识图谱的节点进行表示学习,得到代码元素的结构语义表示,所述Trans系列的方法包括TransE、TransH和TransR;
序列代码语义建模子模块,基于序列代码语义建模,利用多种网络结构来捕获代码的多模态信息,其中使用SBT神经网络表达代码序列信息,所述代码序列信息为代码本身的自然序列,通过层次注意力网络进行建模;
树的代码语义建模子模块,基于树的代码语义建模,切片的抽象语法树使用基于树的卷积神经网络TBCNN和基于树的长短期记忆网络Tree-Based LSTM进行建模;
图的代码语义建模子模块,基于图的代码语义建模,代码切片的图结构,使用图注意力网络GAT建模;
额外损失函数设置子模块,分别为二分类和多分类模型引入图像分类中的FocalLoss和排序问题中的Ranking Loss作为额外的损失函数。
根据本发明的一个实施方式,图3示意性表示代码缺陷数据构建方法,根据源代码缺陷数据集构建模块,通过匹配的缺陷代码与缺陷类型,建立源代码缺陷数据集,同时保证代码能够覆盖缺陷的完整路径,包含缺陷从相关变量声明到最终触发的完整代码语句,基于NVD与CNNVD等代码缺陷数据库,使用爬虫检索目标开源项目关键词,得到开源项目存在的缺陷条目及对应代码库的外链链接,NVD等缺陷库中提供外部链接,链接到代码库的外链后,针对不同项目设定对应的解析规则,解析缺陷数据库中的外部链接,爬取指向开源项目代码的缺陷条目,从外链中爬取出缺陷相关源码,获得对应缺陷代码出处与其缺陷类型的匹配。
根据本发明的一个实施方式,通过启发式的方法,将缺陷触发位置定位到具体的行,其中,不同缺陷类型通常对应的启发式方法不同,如对于缓冲区溢出类型的缺陷,启发式方法即为要求触发位置为缓冲区操作,根据敏感元素语义匹配的方式进行缺陷定位:对代码的文字描述进行分析,抽取出其主体类型,通过在修复漏洞所修改内容中寻找该主体的实例,对该漏洞的真实触发位置进行定位,得到一个memory buffer缓冲区缺陷,通过语法分析可以得到主体是“缓冲区”类型,关注“缓冲区”类型的变量,得到该缺陷是缓冲区。
根据本发明的一个实施方式,以缺陷触发位置为起点,通过控制流图回溯缺陷路径,用切片的方式提取出该路径,得到真实缺陷对应的<代码切片,缺陷>对,其中,将代码中对某条语句或变量有影响的语句抽取出来,本方法实施例将与保留触发语句中相关变量。
根据本发明的一个实施方式,对代码库中修正后的该缺陷,针对定位的缺陷触发位置,通过控制流图回溯路径,考虑函数调用关系生成代码切片,对得到的真实缺陷与缺陷修复后的<代码切片,缺陷>进行集合,得到可靠性较高且缺陷语义较完整的数据集,数据集是每条代码切片都被标注了是否有缺陷的代码切片集合。
根据本发明的一个实施方式,构建深度学习源代码缺陷检测模型包括:
根据源代码缺陷检测模型构建模块,源代码缺陷的预测通过设计深度学习模型对代码切片进行分类来完成,训练两种分类模型:一种是判断代码切片是否有缺陷的二分类模型,另断代一种是判码切片具有何种缺陷的多分类模型,前者在训练时,输入的切片标签为是否含有缺陷,输出时使用二分类交叉熵作为损失函数,激活函数使用sigmoid函数;后者在训练时,输入的切片标签为缺陷类型,输出时使用多类别交叉熵作为损失函数,激活函数使用Softmax函数。过程如图4示意性表示缺陷检测模型的数据处理过程示意图所。
根据本发明的一个实施方式,根据缺陷代码路径扩展切片子模块,对缺陷代码路径扩展并切片,基于代码切片中的缺陷发生位置和传播路径,利用函数调用关系和控制流图等信息将代码路径扩展为包含更丰富上下文的代码切片,代码切片包含多种模态的信息,将构建代码切片的抽象语法树和控制流/数据流图,作为多种维度的输入;每一种信息的来源或者形式,都可以称为一种模态,多模态包含了多种角度多种层次的信息,如自然序列结构(自然顺序体现)、层次结构(代码逻辑体现)、值流结构(值流图体现)、控制流结构(控制流图体现)等。
根据本发明的一个实施方式,图5示意性表示代码片段按照知识图谱的形式表示示意图,通过代码知识图谱表示增强子模块,解析代码切片各种元素的结构关系,生成代码知识图谱,用Trans系列方法对知识图谱的节点进行表示学习,得到代码元素的结构语义表示,增强代码语义,Trans系列的方法使用TransE、TransH和TransR,如图6示意性表示代码知识图谱表示学习方法示意图。通过知识图谱的表示,将代码的结构语义显式的作为后续模型输入,可以使得模型更好更直接的学习到结构信息。TransE针对关系Vr的两个三元组(Vh1,Vr,Vt1)和(Vh2,Vr,Vt2),让Vh1到Vt1的平移向量和Vh2到Vt2的平移向量保持相同,平移向量能够反应这两个三元组共同联系Vr。TransH为超平面上的转换操作,对每一个关系定义一个超平面Wr,和一个关系向量Vr,Vh⊥、Vt⊥是Vh、Vt在Wr上的投影,使得同一个实体在不同关系中的意义不同,同时不同实体在同一关系中的意义可以相同。TransR为所有实体建立一个共同的语义空间,将实体投影到对应的关系空间中,建立从头实体到尾实体的翻译关系。
根据本发明的一个实施方式,基于序列代码语义建模,根据序列代码语义建模子模块,利用多种网络结构捕获代码的多模态信息,使用SBT表达代码序列信息,通过层次注意力网络进行建模,如图7示意性表示针对代码切片的层次注意力网络示意图与图8示意性表示层次注意力机制的可解释性示意图所示,层次注意力网络第一层为双向循环神经网络构成的语句编码器,包含了字符级注意力机制;第二层为双向循环神经网络构成的切片编码器,包含了语句级的注意力机制,层次注意力网络本身的目的就是挖掘语句中的层次结构信息。层次注意力网络先通过单词对语句进行编码,再通过语句对整个切片进行编码。
根据本发明的一个实施方式,运用树的代码语义建模子模块,对切片的抽象语法树使用基于树的卷积神经网络TBCNN)和基于树的长短期记忆网络LSTM进行建模,其中,CNN和LSTM是两种基本的深度学习网络,使用深度学习网络的tree-base版本,图9示意性表示TBCNN网络构架示意图,TBCNN包含四层,在卷积层和池化层对树状结构特征进行建模,如图10示意性表示树状卷积神经网络的卷积层和池化层示意图,其中卷积层包含不同深度的树卷积核,池化层直接对全部特征向量选取每一个维度中的最大值作为结果。
根据本发明的一个实施方式,根据图的代码语义建模子模块,对代码切片的图结构,如控制流图和数据流图,使用图注意力网络GAT建模,GAT是图网络的经典模型,可以较好的满足以图作为输入的分类任务,图结构的构造在抽象语法树结构的基础上,通过不同类型的依赖关系,来增加节点之间的连接,基于GAT,针对图模态的代码信息,生成图结点序列所对应的子图集,对于特定结点使用注意力机制计算出其与邻近结点集合的注意力权重分布,得到结点序列的隐状态表示,输入到卷积神经网络进行SoftMax分类,整体网络架构如图11示意性表示图注意力网络构架示意图。
根据本发明的一个实施方式,基序列于、树、图的代码语义模型是模型的主架构,根据额外损失函数设置子模块,为二分类和多分类模型引入图像分类中的Focal Loss和排序问题中的Ranking Loss作为额外的损失函数,引入这两种损失函数,使得模型可以更多的关注少数类,能够增强负样本的识别能力,提高模型的泛化性能,Focal Loss在标准交叉熵损失基础上修改得到,通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本,在Ranking Loss中,代码的语义表示对针对每一类缺陷计算一个得分,以此来更好地区分代码是否有缺陷。
根据本发明的一个实施方式,根据缺陷检测结果集成显示模块,对基于人工智能的源代码缺陷检测结果集成显示,开发一个代码浏览器,前端负责浏览代码和展示模型的分析结果,后端为本方法描述的模型,接受输入并对代码片段进行缺陷判断,把结果返回给前端显示,如图12示意性表示缺陷检测系统示意图所示。
为实现上述发明目的,本发明还提供一种电子设备,该电子设备包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,计算机程序被处理器执行时实现上述软件源代码缺陷检测方法。
为实现上述发明目的,本发明还提供一种计算机可读存储介质,计算机可读存储介质上存储计算机程序,计算机程序被处理器执行时实现上述软件源代码缺陷检测方法。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的模块及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和设备的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明实施例方案的目的。
另外,在本发明实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例节能信号发送/接收的方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
应理解,本发明的发明内容及实施例中各步骤的序号的大小并不绝对意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。发明的目的在于以充分利用共享单车运营平台的轨迹大数据,为城市慢行系统的交通管理应用提供数据基础,提供一种针对有噪声且参数不明的自行车轨迹数据的路网匹配方法、系统、电子设备及计算机可读存储介质。

Claims (9)

1.一种软件源代码缺陷检测方法,其特征在于,包括:
步骤一:构建源代码缺陷数据集,基于开源项目的缺陷信息构建用于深度学习模型训练的数据集,包括对所述开源项目存在的缺陷条目进行自动对齐与抽取,根据所述源代码缺陷数据集,检索目标开源项目关键词,得到所述开源项目对应缺陷代码出处与其缺陷类型的匹配,通过启发式的方法,对所述缺陷代码的文字描述进行分析,根据语法分析得到主体类型,定位所述缺陷代码具体位置行,对所述缺陷代码进行切片操作,以所述具体位置行为起点,通过控制流图回溯缺陷路径,得到真实缺陷对应的<代码切片,缺陷>对,修改所述缺陷代码,对修正后的代码使用所述切片操作并标注是否更改正确,得到真实缺陷源代码数据集;
步骤二:构建基于代码切片的深度学习源代码缺陷检测模型,包括使用多模态的语义表示对代码片段进行表示与分类;
步骤三:将源代码缺陷检测结果汇总并显示。
2.根据权利要求1所述软件源代码缺陷检测方法,其特征在于,步骤二中,进一步包括:
对所述缺陷代码路径进行切片,根据切片中的缺陷发生位置和传播路径,将所述缺陷代码路径扩展为包含更丰富上下文的代码切片,所述代码切片包含多种模态的信息;解析所述代码切片各种元素的结构关系,生成代码知识图谱,用Trans系列方法对知识图谱的节点进行表示学习,得到代码元素的结构语义。
3.根据权利要求2所述软件源代码缺陷检测方法,其特征在于,所述Trans系列方法包括:
根据所述知识图谱,用TransE、TransH和TransR对节点进行学习,得到所述结构语义,完成所述结构语义信息解析。
4.根据权利要求3所述软件源代码缺陷检测方法,其特征在于,根据不同种类的建模方式对所述结构语义进行建模:
基于序列代码语义建模,利用多种网络结构来捕获代码的信息,使用SBT神经网络表达代码序列信息,所述代码序列信息为代码本身的自然序列,通过层次注意力网络进行建模;
基于树的代码语义建模,切片的抽象语法树使用基于树的卷积神经网络TBCNN和基于树的长短期记忆网络Tree-Based LSTM进行建模;
基于图的代码语义建模,代码切片的图结构,使用图注意力网络GAT建模。
5.根据权利要求4所述软件源代码缺陷检测方法,其特征在于,所述层次注意力网络第一层为双向循环神经网络构成的语句编码器,包含字符级注意力机制;所述层次注意力网络第二层为双向循环神经网络构成的切片编码器,包含语句级的注意力机制。
6.根据权利要求5所述软件源代码缺陷检测方法,其特征在于,分别为二分类和多分类模型引入图像分类中的Focal Loss和排序问题中的Ranking Loss作为额外的损失函数。
7.一种软件源代码缺陷检测系统,其特征在于,包括:
源代码缺陷数据集构建模块,构建源代码缺陷数据集,基于开源项目缺陷信息构建用于深度学习模型训练的大规模数据集,包括对开源项目存在的缺陷条目进行自动对齐与抽取,根据所述源代码缺陷数据集,检索目标开源项目关键词,得到所述开源项目对应缺陷代码出处与其缺陷类型的匹配,通过启发式的方法,对所述缺陷代码的文字描述进行分析,根据语法分析得到主体类型,定位所述缺陷代码具体位置行,对所述缺陷代码进行切片操作,以所述具体位置行为起点,通过控制流图回溯缺陷路径,得到真实缺陷对应的<代码切片,缺陷>对,修改所述缺陷代码,对修正后的代码使用所述切片操作并标注是否更改正确,得到真实缺陷源代码数据集;
源代码缺陷检测模型构建模块,构建基于代码切片的深度学习源代码缺陷检测模型,包括使用多模态的语义表示对代码片段进行表示与分类;
缺陷检测结果集成显示模块,将源代码缺陷检测结果汇总并显示。
8.一种电子设备,其特征在于,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,计算机程序被所述处理器执行时实现如权利要求1至6中任一项所述的软件源代码缺陷检测方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6中任一项所述的软件源代码缺陷检测方法。
CN202110958006.XA 2021-02-26 2021-08-20 软件源代码缺陷检测方法、系统、电子设备及储存介质 Active CN113641586B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN2021102131089 2021-02-26
CN202110213108.9A CN112579477A (zh) 2021-02-26 2021-02-26 一种缺陷检测方法、装置以及存储介质

Publications (2)

Publication Number Publication Date
CN113641586A CN113641586A (zh) 2021-11-12
CN113641586B true CN113641586B (zh) 2022-04-15

Family

ID=75113966

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202110213108.9A Withdrawn CN112579477A (zh) 2021-02-26 2021-02-26 一种缺陷检测方法、装置以及存储介质
CN202110958006.XA Active CN113641586B (zh) 2021-02-26 2021-08-20 软件源代码缺陷检测方法、系统、电子设备及储存介质

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202110213108.9A Withdrawn CN112579477A (zh) 2021-02-26 2021-02-26 一种缺陷检测方法、装置以及存储介质

Country Status (1)

Country Link
CN (2) CN112579477A (zh)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113128229B (zh) * 2021-04-14 2023-07-18 河海大学 一种中文实体关系联合抽取方法
CN113138924B (zh) * 2021-04-23 2023-10-31 扬州大学 一种基于图学习的线程安全代码识别方法
CN115237743A (zh) * 2021-04-24 2022-10-25 华为云计算技术有限公司 代码处理方法、系统、集群、介质及程序产品
CN113326198B (zh) * 2021-06-15 2024-06-14 深圳前海微众银行股份有限公司 一种代码缺陷状态确定方法、装置、电子设备及介质
CN113946826A (zh) * 2021-09-10 2022-01-18 国网山东省电力公司信息通信公司 一种漏洞指纹静默分析监测的方法、系统、设备和介质
CN113918171A (zh) * 2021-10-19 2022-01-11 哈尔滨理工大学 一种新的使用扩展控制流图的反汇编方法
CN113901177B (zh) * 2021-10-27 2023-08-08 电子科技大学 一种基于多模态属性决策的代码搜索方法
CN113886277B (zh) * 2021-12-07 2022-02-22 云账户技术(天津)有限公司 一种软件缺陷报告合规性的检测方法及装置
CN114416421B (zh) * 2022-01-24 2024-05-31 北京航空航天大学 一种代码缺陷的自动定位与修复方法
CN114647762B (zh) * 2022-03-23 2023-01-24 中国水利水电科学研究院 一种基于图谱对比的堤坝探测方法
CN114936158B (zh) * 2022-05-28 2024-06-04 南通大学 一种基于图卷积神经网络的软件缺陷定位方法
CN115454855B (zh) * 2022-09-16 2024-02-09 中国电信股份有限公司 代码缺陷报告审计方法、装置、电子设备及存储介质
CN115617352B (zh) * 2022-12-02 2023-03-28 中汽研软件测评(天津)有限公司 基于安全编码标准的c代码检测方法、设备和存储介质
CN116302043B (zh) * 2023-05-25 2023-10-10 深圳市明源云科技有限公司 代码维护问题检测方法、装置、电子设备及可读存储介质
CN116361815B (zh) * 2023-06-01 2023-08-15 北京比瓴科技有限公司 基于机器学习的代码敏感信息及硬编码检测方法及装置
CN116662206B (zh) * 2023-07-24 2024-02-13 泰山学院 计算机软件在线实时可视化调试方法及装置
CN117408974B (zh) * 2023-10-26 2024-04-26 广州欧派集成家居有限公司 一种板式集成家具封边自动检测方法、装置及存储介质
CN117714051B (zh) * 2023-12-29 2024-10-18 山东神州安付信息科技有限公司 一种密钥自校验、自纠错、自恢复的管理方法及系统

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014097379A1 (ja) * 2012-12-17 2014-06-26 三菱電機株式会社 プログラム解析支援装置及び制御装置
KR101623174B1 (ko) * 2014-08-27 2016-05-20 주식회사 파수닷컴 소스 코드 분석 장치, 이를 위한 컴퓨터 프로그램, 그 기록매체
WO2017181286A1 (en) * 2016-04-22 2017-10-26 Lin Tan Method for determining defects and vulnerabilities in software code
US20190317879A1 (en) * 2018-04-16 2019-10-17 Huawei Technologies Co., Ltd. Deep learning for software defect identification
CN109063483B (zh) * 2018-06-21 2020-05-12 北京大学 一种基于路径追踪的漏洞检测方法及系统
CN109697162B (zh) * 2018-11-15 2021-05-14 西北大学 一种基于开源代码库的软件缺陷自动检测方法
CN109885482A (zh) * 2019-01-16 2019-06-14 重庆大学 基于少样本数据学习的软件缺陷预测方法
CN110162478B (zh) * 2019-05-28 2021-07-30 南京大学 一种基于缺陷报告的缺陷代码路径定位方法
US11568055B2 (en) * 2019-08-23 2023-01-31 Praetorian System and method for automatically detecting a security vulnerability in a source code using a machine learning model
CN110597735B (zh) * 2019-09-25 2021-03-05 北京航空航天大学 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法
CN111274134B (zh) * 2020-01-17 2023-07-11 扬州大学 基于图神经网络的漏洞识别与预测方法、系统、计算机设备和存储介质
CN111459799B (zh) * 2020-03-03 2023-03-10 西北大学 一种基于Github的软件缺陷检测模型建立、检测方法及系统
CN112035345A (zh) * 2020-08-20 2020-12-04 国家电网有限公司信息通信分公司 一种基于代码片段分析的混合深度缺陷预测方法
CN112306494A (zh) * 2020-12-03 2021-02-02 南京航空航天大学 一种基于卷积和循环神经网络的代码分类及聚类方法

Also Published As

Publication number Publication date
CN113641586A (zh) 2021-11-12
CN112579477A (zh) 2021-03-30

Similar Documents

Publication Publication Date Title
CN113641586B (zh) 软件源代码缺陷检测方法、系统、电子设备及储存介质
Wu et al. A survey of human-in-the-loop for machine learning
Bui et al. Infercode: Self-supervised learning of code representations by predicting subtrees
Wallace et al. AllenNLP interpret: A framework for explaining predictions of NLP models
CN111985245B (zh) 基于注意力循环门控图卷积网络的关系提取方法及系统
CN108446540B (zh) 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
CN114417004A (zh) 一种知识图谱和事理图谱的融合方法、装置和系统
CN113204649A (zh) 基于实体关系联合抽取的法律知识图谱构建方法及设备
CN114861194B (zh) 一种基于bgru与cnn融合模型的多类型漏洞检测方法
CN109918505B (zh) 一种基于文本处理的网络安全事件可视化方法
CN105393265A (zh) 人机交互学习中的主动特征化
Narodytska Formal Analysis of Deep Binarized Neural Networks.
CN112507699A (zh) 一种基于图卷积网络的远程监督关系抽取方法
Yang et al. Omnixai: A library for explainable ai
Wang et al. Explainable apt attribution for malware using nlp techniques
CN113157859A (zh) 一种基于上位概念信息的事件检测方法
Pei et al. A two-stream network based on capsule networks and sliced recurrent neural networks for DGA botnet detection
CN115098857B (zh) 一种可视化恶意软件的分类方法及装置
Ouared et al. Capitalizing the database cost models process through a service‐based pipeline
Tsai et al. Generating construction safety observations via CLIP-based image-language embedding
Althar et al. Software Source Code: Statistical Modeling
Yu et al. Information Security Field Event Detection Technology Based on SAtt‐LSTM
Du et al. A vulnerability severity prediction method based on bimodal data and multi-task learning
Zhan et al. Crafting textual adversarial examples through second-order enhanced word saliency
Sarbakysh et al. A1BERT: A Language-Agnostic Graph Neural Network Model for Vulnerability Detection

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: Software source code defect detection methods, systems, electronic devices, and storage media

Effective date of registration: 20230921

Granted publication date: 20220415

Pledgee: Zhongguancun Beijing technology financing Company limited by guarantee

Pledgor: BEIJING PEKING UNIVERSITY SOFTWARE ENGINEERING CO.,LTD.

Registration number: Y2023990000470

PE01 Entry into force of the registration of the contract for pledge of patent right