CN115437952A - 一种基于深度学习的语句级软件缺陷检测方法 - Google Patents

一种基于深度学习的语句级软件缺陷检测方法 Download PDF

Info

Publication number
CN115437952A
CN115437952A CN202211198034.7A CN202211198034A CN115437952A CN 115437952 A CN115437952 A CN 115437952A CN 202211198034 A CN202211198034 A CN 202211198034A CN 115437952 A CN115437952 A CN 115437952A
Authority
CN
China
Prior art keywords
node
nodes
subgraph
vector representation
code
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.)
Pending
Application number
CN202211198034.7A
Other languages
English (en)
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.)
China University of Petroleum East China
Original Assignee
China University of Petroleum East China
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 China University of Petroleum East China filed Critical China University of Petroleum East China
Priority to CN202211198034.7A priority Critical patent/CN115437952A/zh
Publication of CN115437952A publication Critical patent/CN115437952A/zh
Pending legal-status Critical Current

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
    • 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)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Quality & Reliability (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种基于深度学习的语句级软件缺陷检测方法,本方法可以实现语句级的软件缺陷检测,并提供缺陷报告。本发明首先提取源代码的代码属性图,获取代码内部的语法结构和语义结构;然后选择若干中心结点,对每个中心结点构建子图,并嵌入得到向量表示;其次将生成的向量表示输入图神经网络学习并更新向量表示;最后将更新后的向量表示输入分类层,获取分类结果,针对有缺陷的结点,生成缺陷报告,报告具体行号和相关代码。通过实验证明,本发明提供的技术方案相比于传统的软件缺陷检测方法以及现有的基于深度学习的软件缺陷检测方法,能实现更细粒度的检测和更高的检测准确率。

Description

一种基于深度学习的语句级软件缺陷检测方法
技术领域
本发明涉及软件缺陷检测领域,具体地说,是涉及基于深度学习的语句级别的软件缺陷检测方法。
背景技术
传统的软件缺陷检测主要采用程序静态分析、动态分析、符号执行等方法,这些方法需要手工操作,耗费大量人力,且效率不高。近年来采用深度学习检测软件缺陷的方法成为软件缺陷检测领域的主要研究方向之一。其主要思想就是将源代码转换成向量表述,输入深度学习的神经网络中,通过分类层输出分类结果(通常为二分类),来判断源代码是否有缺陷。但是目前相关技术存在一些问题。首先,大部分的检测方法只能实现文件级或函数级,即判断该文件或函数是否有缺陷,并不能定位缺陷到某一个语句或某一行,为缺陷修复带来了困难;其次,在把代码转换为向量表示的过程中,一部分的检测方法将代码简单的视为自然语言处理,忽略了代码内部的语法结构和语义结构,不能很好提取代码信息,导致神经网络只能学习部分代码特征,降低了模型的性能。
发明内容
为了解决上述问题,本发明提出一种基于深度学习的语句级软件缺陷检测方法,通过代码属性图和子图嵌入,实现语句级的缺陷预测。
为了达到上述目标,本发明采用的技术方案包括如下步骤:
步骤(1):提取源代码的代码属性图。
步骤(2):选择中心结点,并为其构建子图。针对中心结点的选择,我们以结点类型为标准,确定了若干个更能揭示软件缺陷的结点类型,组成集合T。若某结点的类型属于T,则被确定为中心结点。
部分中心结点类型如表1。
表1部分中心结点类型
Figure BDA0003871272670000011
Figure BDA0003871272670000021
步骤(3):对步骤(2)构建的子图进行嵌入,获取向量表示。
步骤(4):将步骤(3)获得的向量表示输入RGCN,学习代码特征,更新并输出结点表示。
步骤(5):将步骤(4)获得的结点表示输入分类层,进行分类,最后得到分类结果。
附图说明
图1为本发明的流程说明图。
具体实施方式
下面将结合本发明实例中的附图,,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图所示,对具体流程进行详细说明:
步骤(1):提取源代码的代码属性图G={V,E}。
步骤(2):针对当前的代码属性图的每个结点,若该结点的类型属于T,则为中心结点。对每个中心结点构建子图。具体操作是,寻找该结点的所有邻接点,构成集合V’,V’中的所有相连的边构成集合E’。最终该结点的子图为G’={V’,E’}。
步骤(3):对步骤(2)构建的子图进行嵌入,获取向量表示。具体的操作是,针对子图中的每个结点,分别用label encoding和Word2vec对其类型和代码进行嵌入,随后拼接,得到该结点的向量表示;针对子图中的每条边,分别创建稀疏矩阵存储其方向(即入结点和出结点的序号)和边的类型(即由抽象语法树、控制流图、程序依赖图代表的语法关系、控制关系和依赖关系)。最终组合结点和边的向量表示,得到该子图的向量表示。
步骤(4):将步骤(3)获得的向量表示输入RGCN,学习代码特征,更新并输出结点表示。RGCN可用于处理异构图数据。针对每个边的类型,RGCN会通过不断叠加邻接点的信息更新当前边类型下每个结点的向量表示。
步骤(5):将步骤(4)获得的结点表示输入MLP层进行分类,最后得到分类结果。针对有缺陷的结点,会提供相关缺陷报告,报告缺陷所在的具体位置(行号)及相关代码元素。
本发明的基于深度学习的语句级软件缺陷检测方法,通过提取代码属性图来获取代码的语法结构和语义结构,随后通过中心结点选择和子图嵌入,关注于缺陷本身及其代码上下文,通过图嵌入和神经网络特征学习,不断更新结点的向量表示。最终通过分类层输出分类结果,实现了语句级的软件缺陷检测。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (4)

1.一种基于深度学习的语句级软件缺陷检测方法,包括以下部分:
A、对源代码提取其代码属性图,选择若干与缺陷更加相关的结点作为中心结点;
B、为选取的每个中心结点构建子图;
C、为构建的子图进行嵌入,并输入图神经网络进行特征学习;
D、根据深度学习神经网络中分类层的返回结果(0表示无缺陷,1表示有缺陷),判断当前子图里各个结点是否有缺陷,实现语句级的缺陷检测,并提供检测报告,给出缺陷具体位置及相关代码。
2.根据权利要求1所述的根据代码属性图和中心结点选择构建子图,其特征在于,所述的部分A中,在代码属性图中,源代码中的代码元素被转换为结点,代码之间的语法或语义关系,比如数据依赖、控制依赖等,转换为结点之间的边。为了提高效率且避免提取过多无用信息,我们事先选出若干中心结点,即与缺陷更加相关的结点,为这些中心结点构建子图。
3.根据权利要求1所述的子图构建和嵌入阶段,其特征在于,所述的部分B中,针对某个特定结点,寻找它的所有邻接点及这些结点之间相连的所有边,作为该结点的子图。其次,为构建好的子图获取向量表示,以输入图神经网络学习。子图的向量表示由结点的向量表示和边的向量表示构成。其中结点的向量表示包括结点类型和结点代表的代码;边的向量表示由边的方向和边的类型构成。子图嵌入阶段,我们使用关系图卷积神经网络(RGCN)对不同类型的边做不同处理。
4.根据权利要求1所述的根据分类结果获取检测结果,并得到检测报告,其特征在于,所述的部分D中,因为一个结点代表一行代码中的某个元素,通过语句划分和结点分类可以实现语句级的缺陷检测。通过输出缺陷结点的相关信息,比如相应代码、行号等可以得到更具体的缺陷报告,便于日后的缺陷修复。
CN202211198034.7A 2022-09-29 2022-09-29 一种基于深度学习的语句级软件缺陷检测方法 Pending CN115437952A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211198034.7A CN115437952A (zh) 2022-09-29 2022-09-29 一种基于深度学习的语句级软件缺陷检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211198034.7A CN115437952A (zh) 2022-09-29 2022-09-29 一种基于深度学习的语句级软件缺陷检测方法

Publications (1)

Publication Number Publication Date
CN115437952A true CN115437952A (zh) 2022-12-06

Family

ID=84250355

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211198034.7A Pending CN115437952A (zh) 2022-09-29 2022-09-29 一种基于深度学习的语句级软件缺陷检测方法

Country Status (1)

Country Link
CN (1) CN115437952A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115629995A (zh) * 2022-12-21 2023-01-20 中南大学 基于多依赖lstm的软件缺陷定位方法、系统及设备
CN116383089A (zh) * 2023-05-29 2023-07-04 云南大学 基于常微分方程图神经网络的语句级软件缺陷预测系统

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115629995A (zh) * 2022-12-21 2023-01-20 中南大学 基于多依赖lstm的软件缺陷定位方法、系统及设备
CN116383089A (zh) * 2023-05-29 2023-07-04 云南大学 基于常微分方程图神经网络的语句级软件缺陷预测系统
CN116383089B (zh) * 2023-05-29 2023-08-04 云南大学 基于常微分方程图神经网络的语句级软件缺陷预测系统

Similar Documents

Publication Publication Date Title
CN113420296B (zh) 一种基于Bert模型与BiLSTM的C源代码漏洞检测方法
Xu et al. Defect prediction with semantics and context features of codes based on graph representation learning
CN115437952A (zh) 一种基于深度学习的语句级软件缺陷检测方法
CN111459799B (zh) 一种基于Github的软件缺陷检测模型建立、检测方法及系统
CN109325040B (zh) 一种faq问答库泛化方法、装置及设备
CN112463424B (zh) 一种基于图的端到端程序修复方法
CN111316296A (zh) 学习层级提取模型的结构
US11269760B2 (en) Systems and methods for automated testing using artificial intelligence techniques
CN112394973B (zh) 一种基于伪孪生网络的多语言代码剽窃检测方法
CN115495755A (zh) 一种基于CodeBERT和R-GCN的源代码漏洞多分类检测的方法
CN112364352A (zh) 可解释性的软件漏洞检测与推荐方法及系统
CN111680506A (zh) 数据库表的外键映射方法、装置、电子设备和存储介质
CN113849162A (zh) 一种利用模型驱动和深度神经网络相结合的代码生成方法
CN117215935A (zh) 一种基于多维度代码联合图表示的软件缺陷预测方法
CN115757695A (zh) 一种日志语言模型训练方法及系统
CN114444484A (zh) 一种基于双层图的文档级事件抽取方法及系统
CN116702160B (zh) 一种基于数据依赖增强程序切片的源代码漏洞检测方法
CN117010373A (zh) 一种电力设备资产管理数据所属类别和组的推荐方法
CN116882402A (zh) 基于多任务的电力营销小样本命名实体识别方法
CN116166789A (zh) 一种方法命名精准推荐和审查方法
CN106648636A (zh) 一种基于图挖掘的软件函数变更预测系统及方法
CN114780403A (zh) 基于增强代码属性图的软件缺陷预测方法及预测装置
CN111159424A (zh) 标注知识图谱实体的方法,装置,存储介质及电子设备
CN115525899A (zh) 面向持续集成平台的漏洞误报消除方法
CN115422349A (zh) 一种基于预训练生成模型的层次文本分类方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication