CN116775121A - 一种程序缺陷数据特征提取方法、电子设备及存储介质 - Google Patents

一种程序缺陷数据特征提取方法、电子设备及存储介质 Download PDF

Info

Publication number
CN116775121A
CN116775121A CN202210239269.XA CN202210239269A CN116775121A CN 116775121 A CN116775121 A CN 116775121A CN 202210239269 A CN202210239269 A CN 202210239269A CN 116775121 A CN116775121 A CN 116775121A
Authority
CN
China
Prior art keywords
information
node
program
normalized
data
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
CN202210239269.XA
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.)
Peking University
ZTE Corp
Original Assignee
Peking University
ZTE Corp
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 Peking University, ZTE Corp filed Critical Peking University
Priority to CN202210239269.XA priority Critical patent/CN116775121A/zh
Priority to PCT/CN2023/079878 priority patent/WO2023169368A1/zh
Publication of CN116775121A publication Critical patent/CN116775121A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/77Software metrics

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例公开了一种程序缺陷数据特征提取方法、电子设备及存储介质,所述方法包括:获取程序代码的抽象语法树信息,其中,程序代码包括缺陷程序代码和补丁程序代码;对抽象语法树信息进行规范化处理,得到规范化信息;根据规范化信息,得到数据流信息;把规范化信息转化为序列信息;根据缺陷程序代码的序列信息和补丁程序代码的序列信息,得到程序补丁信息;根据数据流信息、序列信息和程序补丁信息,提取得到缺陷程序代码的缺陷数据特征。本发明实施例的方案能够提升程序缺陷数据特征提取的效率和精准性,保证后端任务的准确率,提高用户的使用体验。

Description

一种程序缺陷数据特征提取方法、电子设备及存储介质
技术领域
本发明涉及程序修复技术领域,特别是涉及一种程序缺陷数据特征提取方法、电子设备及存储介质。
背景技术
随着深度学习技术的快速发展,软件自动修复技术与深度学习技术的交叉成为了一种趋势。现阶段基于深度学习的软件自动修复技术大多数借鉴了自然语言处理技术将程序简单的看作文本序列,然后利用神经网络来提取其特征并完成后端的缺陷修复。这种方式的缺点也很明显,就是这种表示失去了代码语言自身的特征,如语法特征,数据特征等。因此现有技术提出了采用抽象语法树(Abstract Syntax Tree,AST)作为代码的一种特征表示,这样代码语言的语法特征就能够很好地被AST所表征。但是对软件自动修复来说,仅将语法树作为程序的表征,只能够反应出代码中各个标志符之间的语法结构关系。而对于程序中出现的缺陷,语法错误仅仅是其中的一部分,更多的是程序中隐藏的逻辑错误。为了更好地表示程序中逻辑错误的特征,部分现有技术也提出了将数据流程图(Data FlowGraph,DFG)作为程序的特征。这样通过获取程序中数据流动的过程,能从侧面反映出程序中的逻辑错误。
虽然现阶段有多种方式来表征程序,但是由于不同的编程语言自身的特性各不相同,AST与DFG的表示也没有统一的规范,并且针对不同编程语言或者同一编程语言在实现不同任务时所需要的特征也各不相同的。因此现有的程序缺陷数据特征提取方法无法高效、准确地提取出程序特征,后端任务的准确率也无法得到保证。
发明内容
以下是对本文详细描述的主题的概述。本概述并非是为了限制权利要求的保护范围。
本发明实施例提供一种程序缺陷数据特征提取方法、电子设备及存储介质,能够提升程序缺陷数据特征提取的效率和精准性,保证后端任务的准确率,提高用户的使用体验。
第一方面,本发明实施例提供一种程序缺陷数据特征提取方法,所述方法包括:获取程序代码的抽象语法树信息,其中,所述程序代码包括缺陷程序代码和补丁程序代码;对所述抽象语法树信息进行规范化处理,得到规范化信息;根据所述规范化信息,得到数据流信息;把所述规范化信息转化为序列信息;根据所述缺陷程序代码的所述序列信息和所述补丁程序代码的所述序列信息,得到程序补丁信息;根据所述数据流信息、所述序列信息和所述程序补丁信息,提取得到所述缺陷程序代码的缺陷数据特征。
第二方面,本发明实施例提供一种电子设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现本发明实施例提供的程序缺陷数据特征提取方法。
第三方面,本发明实施例提供一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,实现本发明实施例提供的程序缺陷数据特征提取方法。
本发明实施例,通过获取程序代码的抽象语法树信息;对所述抽象语法树信息进行规范化处理,得到规范化信息;根据所述规范化信息,得到数据流信息;把所述规范化信息转化为序列信息;根据缺陷程序代码的所述序列信息和补丁程序代码的所述序列信息,得到程序补丁信息;根据所述数据流信息、所述序列信息和所述程序补丁信息,提取所述缺陷程序代码的缺陷数据特征。本发明实施例的方案能够快速、精准地提取出程序补丁信息和数据流信息,便于对程序代码进行缺陷修复和分析合成操作,提高用户的使用体验。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和得到。
附图说明
附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。
图1是本发明实施例提供的一种程序缺陷数据特征提取方法的流程示意图;
图2是图1中步骤S2000的另一实施例的具体实现过程示意图;
图3是图2中步骤S2300的另一实施例的具体实现过程示意图;
图4是图1中步骤S3000的另一实施例的具体实现过程示意图;
图5是图1中步骤S4000的另一实施例的具体实现过程示意图;
图6是图1中步骤S5000的另一实施例的具体实现过程示意图;
图7是图1中步骤S6000的另一实施例的具体实现过程示意图;
图8是本发明实施例提供的一种程序缺陷数据特征提取装置的结构图;
图9是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
应了解,在本发明实施例的描述中,如果有描述到“第一”、“第二”等只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示单独存在A、同时存在A和B、单独存在B的情况。其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项”及其类似表达,是指的这些项中的任意组合,包括单项或复数项的任意组合。例如,a,b和c中的至少一项可以表示:a,b,c,a和b,a和c,b和c或a和b和c,其中a,b,c可以是单个,也可以是多个。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明实施例涉及的程序缺陷数据特征提取方法,是基于AST对程序代码的抽象表示,再对AST进行规范化处理,提取出便于神经网络读取和分析的规范化信息。AST以树状的形式表现程序代码的语法结构,树上的每个节点都表示程序代码中的一种结构。其中,字面量、标识符、表达式、语句、模块语法、class语法都有各自的AST。而在程序自动修复的应用中,AST需要与DFG结合使用,才能充分地表征程序代码。因此,采用程序缺陷数据特征提取的方式能快速、精准地提取出程序补丁信息和数据流信息,便于对程序代码进行缺陷修复和分析合成操作,特别适用于程序缺陷的自动分析。
为了保证程序缺陷数据特征的提取精度,现有的程序缺陷数据特征提取方法为:获取表征程序代码特征的AST和DFG,对缺陷程序和补丁程序进行差异查找和区别分析。这种方式并不能根据不同的编程语言自身的特性对程序缺陷数据特征进行提取,而且由于没有对抽象语法树信息进行优化处理,无法在程序缺陷自动修复的场景中实现高效、精准的程序代码特征分析。
基于以上,本发明实施例提供一种程序缺陷数据特征提取方法、装置、电子设备及计算机可读存储介质,通过对抽象语法树信息进行规范化处理,得到规范化信息;并把规范化信息转化为序列信息;根据缺陷程序代码的序列信息和补丁程序代码的序列信息,得到程序补丁信息,最终从序列信息、程序补丁信息和数据流信息中提取缺陷程序代码的缺陷数据特征,以达到快速、精准地提取出程序补丁信息和数据流信息的目的,提高软件缺陷分析的效率和用户的使用体验。
请参见图1,图1示出了本发明实施例提供的一种程序缺陷数据特征提取方法的流程。
如图1所示,本发明实施例的程序缺陷数据特征提取方法包括以下步骤:
S1000,获取程序代码的抽象语法树信息,其中,程序代码包括缺陷程序代码和补丁程序代码。
可以理解的是,在程序缺陷自动修复过程中,程序代码包括缺陷程序代码和补丁程序代码。而程序缺陷数据特征提取的过程,就是通过快速地对比分析缺陷程序代码和补丁程序代码之间的区别特征,进而对缺陷程序代码存在的异常和错误进行快速的修改。因此,需要对缺陷程序代码和补丁程序代码分别进行处理,获取各自的抽象语法树信息,以便进行分析处理。
可以理解的是,通过将代码文件转换为抽象语法树信息,能更方便地对代码文件进行分析、优化、变更等操作。示例性的,把程序代码输入现有的AST前端工具就获取程序代码的抽象语法树信息,例如eslint、tree-sitter等。通过这些前端工具,能把缺陷程序代码和补丁程序代码分别转化为抽象语法树信息。在实际应用中,通过前端工具或者内嵌模块对程序代码进行AST转换,属于现有技术,此处不再赘述。
S2000,对抽象语法树信息进行规范化处理,得到规范化信息。
可以理解的是,从程序代码直接获得的抽象语法树信息存在信息量大、处理时间长的特点。为了更精简地表达程序代码的语法特征,并且提供了统一的形式,能够被不同的后端算法处理,需要对抽象语法树信息进行提炼和优化处理,尤其是在不同的语言环境下,精准地提取出程序代码的语法特征。
请参见图2,图2示出了上述步骤S2000的另一实施例的具体实现过程示意图。如图2所示,步骤S2000至少包括以下步骤:
S2100,先序遍历抽象语法树信息的每个抽象语法树节点。
可以理解的是,为了保证数据的完整性和前后连续性,需要把每个抽象语法树节点进行先序遍历,以避免发生数据丢失和前后关系有误的情况。
S2200,在抽象语法树节点存在语法信息的情况下,创建与抽象语法树节点相对应的规范化节点,其中,规范化节点包括:标识号、父节点指针、子节点指针和节点名称,节点名称与语法信息一致。
可以理解的是,当确定抽象语法树节点中存在语法信息,即可为当前抽象语法树节点创建规范化节点。对于语法相关节点,创建一个规范化节点以存储标识号、父节点指针、子节点指针和节点名。示例性的,标识号是按照先序遍历顺序从0开始对规范化节点进行编号的整数。
此外,当抽象语法树节点为“comment”、“;”、“(”、“)”、“[”、“]”、“{”、“}”、“,”、“\n”、“’”、“””,则表明当前节点是语法无关节点,忽略这些节点,以便去掉程序代码中的无效的信息。
S2300,根据规范化节点,得到规范化信息。
可以理解的是,通过对规范化节点进行进一步的优化处理,以获得更加简练、精准的程序代码规范化节点。把优化处理后的规范化节点进行关联和聚合,得到规范化信息。
请参见图3,图3示出了上述步骤S2300的另一实施例的具体实现过程示意图。如图3所示,步骤S2300至少包括以下步骤:
S2310,在节点名称存在类型名的情况下,在规范化节点和规范化节点的父节点之间插入一个节点名称为类型名的规范化节点。
可以理解的是,类型名为系统或用户已定义的一种数据类型,是函数执行过程中要求返回的值的类型。因此,在节点名称存在类型名的情况下,需要在规范化节点和规范化节点的父节点之间插入规范化节点,以对类型名所对应的返回值进行记录。
S2320,在节点名称存在循环控制指令的情况下,为抽象语法树节点创建与循环控制指令配合的循环控制子节点和条件判断子节点。
可以理解的是,循环控制指令的作用是反复执行相同的任务,直到不满足循环条件为止。因此,循环控制指令规范化节点必须设有与之配合的循环控制子节点和条件判断子节点,以保证循环控制指令相关的数据完整性。
示例性的,对于节点名称为“for_statement”的循环控制规范化节点,创建节点名称为“for_condition”规范化节点,并且将当前节点的节点名称为“for”、“initializer”、“condition”或“update”的子节点放置到“for_condition”节点的子节点列表中。对节点名称为“if_statement”或“while_statement”的带条件判断的规范化节点,创建一个“if_condition”规范化节点,并且将当前节点的节点名称为“if”、“while”或“condition”的子节点放置到“if_condition”节点的子节点列表中。
S2330,在节点名称存在标识符的情况下,为抽象语法树节点创建节点名称与标识符一致的子节点。
可以理解的是,标识符是用来标识某个实体的一个符号,在不同的应用环境下有不同的含义。在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。因此,在节点名称存在标识符的情况下,需要为其创建对应的子节点,以记录与之相关的变量、常量或者函数。
示例性的,对于节点名称为“identifier”、“primitive_type”、“number_literal”、“type_identifier”或“field_identifier”的规范化节点,创建一个规范化子节点,其节点名称从当前规范化节点对应的程序代码中获取。
S2340,在节点名称存在函数指令的情况下,对规范化节点和函数指令进行记录处理。
可以理解的是,函数指令中往往包含各种操作对象和转换关系,通过记录规范化节点和对应的函数名,以便可以按照函数对程序代码进行切分。
示例性的,对节点名称为“function_declaration”的规范化节点,在其子树中找到函数名,并把该规范化节点和函数名记录到一个列表中。
示例性的,为更好地描述各个步骤的具体实现过程,本发明实施例以一组简单的缺陷程序代码和补丁程序代码为例进行描述。具体程序代码如下所示:
缺陷程序代码:
由上可知,缺陷程序代码实现了一个计算阶乘的功能,缺陷是变量production没有被正确的初始化。而补丁程序代码将变量production初始化为1,修复了该缺陷。
可以理解的是,获取规范化信息后,为了便于神经网络直接读取,能采用带回溯符的先序遍历序列和邻接矩阵的方式记录节点关系。
示例性的,通过构建带回溯符的先序遍历序列,对于遍历到的规范化节点,将其节点名存储于列表中,当进行回溯时,即返回到上一层节点时,将一个“^”作为回溯符添加到列表中。以上述缺陷程序代码的规范化信息为例,前6个节点形成序列为:[function_definition,type,primitive_type,int,^,^,^,declarator,function_declarator]。可以理解的是,采用先序遍历序列的方式记录节点关系为现有技术,此处不再赘述。
示例性的,通过获取带节点关系的邻接矩阵,其中矩阵的行数和列数相同,都为规范化节点的数量。矩阵的第i行第j列元素按照如下规则赋值:若第i个节点是第j个节点的父节点,那么赋值为“父子关系”;若第i个节点是第j个节点的子节点,那么赋值为“子父关系”;若第i个节点是第j个节点的左边紧邻的节点,那么赋值为“弟兄关系”;若第i个节点是第j个节点的右边紧邻的节点,那么赋值为“兄弟关系”;若第i个节点和第j个节点不存在上述任何一种关系,那么赋值为“无关系”。可以理解的是,通过邻接矩阵的方式记录节点关系为现有技术,此处不再赘述。
S3000,根据规范化信息,得到数据流信息。
请参见图4,图4示出了上述步骤S3000的另一实施例的具体实现过程示意图。如图4所示,步骤S3000至少包括以下步骤:
S3100,建立数据节点数据集。
可以理解的是,数据节点数据集至少包括变量创建指令、数据转移指令和数据控制指令。其中,变量创建指令通常表示一个新的变量被首次引入到程序代码中。示例性的,比如C语言中的变量声明和参数声明节点,即“declaration”和“parameter_declaration”。这类节点创建无源数据流关系,即变量名创建但数据来源为空。
数据转移指令通常表示一个变量的数据被了另一个或多个变量的某种计算更新。示例性的,比如C语言中的赋值节点,变量定义节点,自增节点和自减节点,即“assignment_expression”、“init_declarator”和“update_expression”。这类节点创建单一数据流关系,即创建的变量数据流来自于原有的一个或者多个变量。
数据控制指令通常表示在不同条件时,数据更新的路径可能会不同。示例性的,比如C语言中的条件语句节点,多分支语句节点,条件循环语句节点,即“if_statement”、“case_statement”“switch_statement”、“for_statement”和“while_statement”。这类节点会建立数据流的多分支流向关系,即该语句后的所有变量的数据,可以来自于当前语句之前的变量,也可以来自于当前语句中的变量。
S3200,先序遍历规范化信息,提取节点名称与数据节点数据集相匹配的规范化信息,得到数据节点信息。
可以理解的是,通过遍历规范化信息,把与上述数据节点相关的规范化信息进行提取,得到能充分体现程序代码中各个数据节点的数据节点信息,保证数据节点的处理和分析效率。
S3300,根据数据节点信息的节点名称,确定多个数据节点信息之间的相邻关系,形成数据流信息。
可以理解的是,根据数据节点信息的节点名称及其多个数据节点信息之间的相邻关系,得到程序代码中各个数据节点之间的转换和逻辑关系,便于根据数据流信息对缺陷程序中的非语法特征缺陷,如逻辑错误、前后顺序有误等缺陷,进行快速的对比和分析处理。
示例性的,对上述缺陷程序代码的规范化信息进行数据流信息提取,得到53:n->17:n,表示了规范化信息中的节点53对应的变量n的数据依赖于节点17对应的变量n;此外,75:production->26:production和75:production->66:production,表示了节点75对应的变量production的数据来自于节点26的变量production或节点66的变量production或者两者的组合。
可以理解的是,与上述规范化信息的存储方式类似,数据流信息同样能通过邻接矩阵的方式存储数据节点信息之间的相邻关系,此处不再赘述。
S4000,把规范化信息转化为序列信息。
请参见图5,图5示出了上述步骤S4000的另一实施例的具体实现过程示意图。如图5所示,步骤S4000至少包括以下步骤:
S4100,建立代码行节点数据集。
可以理解的是,由于规范化信息中存在完整的程序代码语法信息,其中很大部分对程序的正常运行不起关键性作用。为了进一步简化规范化信息,提高系统的处理速度,需要对特殊的规范化节点进行提取处理,得到代码行节点。其中,代码行节点的子树能够表示去掉了格式控制符且语法完整的一行代码。建立代码行节点数据集,即把程序代码中所有代码行节点类型进行收集统计。
示例性的,针对C编程语言,代码行节点包括但不仅限于以下节点名称的节点:“continue_statement”、“break_statement”、“return_statement”、“declaration”、“goto_statement”、“parameters”、“expression_statement”、“for_condition”和“if_condition”。
S4200,先序遍历规范化信息,提取节点名称与代码行节点数据集相匹配的规范化信息,得到代码行节点信息。
可以理解的是,通过提取节点名称与代码行节点数据集相匹配的规范化信息,获得的代码行节点信息表示了整个程序代码,而代码行节点信息中的每一个节点对应了抽象语法树信息的根节点,而代码行节点信息子树表示了程序代码中的一行。
示例性的,上述缺陷程序代码的代码行节点信息Linenodes1为:[9:parameters,20:declaration,28:for_condition,62:expression_statement,72:return_statement];上述补丁程序代码的代码行节点信息Linenodes2为:[9:parameters,20:declaration,34:for_condition,67:expression_statement,78:return_statement]。其中,代码行节点信息中各个数字表示该代码行节点在抽象语法树信息中的标识号。
S4300,根据代码行节点数据集,创建字典序列。
可以理解的是,根据代码行节点数据集,创建字典序列,以便于把代码行节点的类型转化为字典序列中对应的编号,达到进一步简化处理数据的效果。
S4400,根据字典序列,把代码行节点信息转化为序列信息。
可以理解的是,把代码行节点信息转化为序列信息,即把代码行节点信息的元素以字典序列中对应的编号表示出,便于神经网络对序列信息进行数据获取和分析。
示例性的,上述缺陷程序代码的序列信息Dictnodes1为[0,1,2,3,4],补丁程序代码的序列信息Dictnodes2为[0,5,2,3,4]。其中,序列信息中的“0”表示代码行节点“9:parameters”在字典序列中的编号为“0”,如此类推。
S5000,根据缺陷程序代码的序列信息和补丁程序代码的序列信息,得到程序补丁信息。
请参见图6,图6示出了上述步骤S5000的另一实施例的具体实现过程示意图。如图6所示,步骤S5000至少包括以下步骤:
S5100,将缺陷程序代码的序列信息和补丁程序代码的序列信息进行差异对比。
可以理解的是,经过上述步骤S4000的简化处理,使缺陷程序代码的序列信息和补丁程序代码的序列信息能进行快速、准确的差异对比。
S5200,计算缺陷程序代码的序列信息和补丁程序代码的序列信息之间的差异值,得到程序补丁信息;其中,程序补丁信息包括:缺陷程序代码的序列信息标识号、操作指令和补丁程序代码的序列信息标识号。
示例性的,以上述Dictnodes1和Dictnodes2作为例子,通过最小编辑距离算法计算可得Dictnodes1和Dictnodes2最小编辑操作数为1,具体操作为{[1]:1modify 1},即将Dictnodes1中标识号为1的元素(值为1),修改为Dictnodes2中标识号为1的元素(值为5)。相当于把缺陷程序代码的序列信息中标识号为1所对应的代码行节点信息所代表的代码行(缺陷程序代码第三行),修改为补丁程序代码的序列信息中标识号为1所对应的代码行节点信息所代表的代码行(补丁程序代码第三行),这样就能把缺陷程序代码中变量“production”没有被正确初始化的缺陷去除,得到与补丁程序代码一致的结果。其中,通过最小编辑距离算法计算缺陷程序代码的序列信息和补丁程序代码的序列信息之间的差异值为现有技术,此处不再赘述。
可以理解的是,通过对比缺陷程序代码的序列信息和补丁程序代码的序列信息之间的差异值,能快速、准确地得到缺陷程序代码转化为补丁程序代码的最简单快速的方式,进而高效地获取程序补丁信息。
S6000,根据数据流信息、序列信息和程序补丁信息,提取得到缺陷程序代码的缺陷数据特征。
请参见图7,图7示出了上述步骤S6000的另一实施例的具体实现过程示意图。如图7所示,步骤S6000至少包括以下步骤:
S6100,获取与程序补丁信息对应的数据流信息和序列信息。
可以理解的是,通过上述步骤S5200获取程序补丁信息后,通过获取与程序补丁信息对应的数据流信息和序列信息,能快速地查找出缺陷程序代码与补丁程序代码之间的区别特征,并通过数据流信息和序列信息进行表征。获取与程序补丁信息对应的数据流信息和序列信息,能提高缺陷程序代码与补丁程序代码的分析处理效率,避免无效信息的处理和干扰。
S6200,提取数据流信息的区别特征和序列信息的区别特征,得到缺陷数据特征。
可以理解的是,通过程序补丁信息,提取出缺陷程序代码与补丁程序代码之间,数据流信息和序列信息的区别特征,能高效、准确地获取缺陷程序代码的缺陷数据特征,便于后续对缺陷程序代码的进一步分析和修复。
可以理解的是,把上述步骤获取的序列信息、程序补丁信息和数据流信息输入神经网络中,大大地提高了系统的学习效率和准确率。示例性的,序列信息与数据流信息可以作为程序的特征被神经网络所学习;程序补丁信息还能用于程序缺陷的快速修复,示例性的,缺陷行及修复操作等信息可以作为特征。除此之外,缺陷定位,缺陷分类等任务也可以使用相关的缺陷数据特征。
参见图8,图8是本发明实施例提供的程序缺陷数据特征提取装置700的结构示意图,本发明实施例提供的程序缺陷数据特征提取方法的整个流程中涉及程序缺陷数据特征提取装置700中的以下模块:获取模块710、转化模块720、计算模块730和提取模块740。
其中,获取模块710,用于获取程序代码的抽象语法树信息,其中,程序代码包括缺陷程序代码和补丁程序代码;转化模块720,用于对抽象语法树信息进行规范化处理,得到规范化信息;把规范化信息转化为序列信息;根据规范化信息,得到数据流信息;计算模块730,用于根据缺陷程序代码的序列信息和补丁程序代码的序列信息,得到程序补丁信息;提取模块740,用于根据序列信息、程序补丁信息和数据流信息,提取缺陷程序代码的缺陷数据特征。
需要说明的是,上述装置的模块之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
图9示出了本发明实施例提供的电子设备800。该电子设备800包括但不限于:
存储器801,用于存储程序;
处理器802,用于执行存储器801存储的程序,当处理器802执行存储器801存储的程序时,处理器802用于执行上述的程序缺陷数据特征提取方法。
处理器802和存储器801可以通过总线或者其他方式连接。
存储器801作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序,如本发明任意实施例描述的程序缺陷数据特征提取方法。处理器802通过运行存储在存储器801中的非暂态软件程序以及指令,从而实现上述的程序缺陷数据特征提取方法。
存储器801可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储执行上述的程序缺陷数据特征提取方法。此外,存储器801可以包括高速随机存取存储器,还可以包括非暂态存储器,比如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器801可选包括相对于处理器802远程设置的存储器,这些远程存储器可以通过网络连接至该处理器802。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
实现上述的程序缺陷数据特征提取方法所需的非暂态软件程序以及指令存储在存储器801中,当被一个或者多个处理器802执行时,执行本发明任意实施例提供的程序缺陷数据特征提取方法。
本发明实施例还提供了一种存储介质,存储有计算机可执行指令,计算机可执行指令用于执行上述的程序缺陷数据特征提取方法。
在一实施例中,该存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个控制处理器802执行,比如,被上述电子设备800中的一个处理器802执行,可使得上述一个或多个处理器802执行本发明任意实施例提供的程序缺陷数据特征提取方法。
以上所描述的实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统可以被实施为软件、固件、硬件及其适当的组合。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包括计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
以上是对本发明的较佳实施进行了具体说明,但本发明并不局限于上述实施方式,熟悉本领域的技术人员在不违背本发明精神的。共享条件下还可作出种种等同的变形或替换,这些等同的变形或替换均包括在本发明权利要求所限定的范围内。

Claims (10)

1.一种程序缺陷数据特征提取方法,所述方法包括:
获取程序代码的抽象语法树信息,其中,所述程序代码包括缺陷程序代码和补丁程序代码;
对所述抽象语法树信息进行规范化处理,得到规范化信息;
对所述规范化信息进行提取处理,得到数据流信息;
把所述规范化信息转化为序列信息;
根据所述缺陷程序代码的所述序列信息和所述补丁程序代码的所述序列信息,得到程序补丁信息;
根据所述数据流信息、所述序列信息和所述程序补丁信息,提取得到所述缺陷程序代码的缺陷数据特征。
2.根据权利要求1所述的方法,其特征在于,所述对所述抽象语法树信息进行规范化处理,得到规范化信息,包括:
遍历所述抽象语法树信息的每个抽象语法树节点;
在所述抽象语法树节点存在语法信息的情况下,创建与所述抽象语法树节点相对应的规范化节点,其中,所述规范化节点包括:标识号、父节点指针、子节点指针和节点名称,所述节点名称与所述语法信息一致;
根据所述规范化节点,得到所述规范化信息。
3.根据权利要求2所述的方法,其特征在于,所述根据所述规范化节点,得到所述规范化信息,包括:
在所述节点名称存在类型名的情况下,在所述规范化节点和所述规范化节点的父节点之间插入一个所述节点名称为所述类型名的所述规范化节点;或,
在所述节点名称存在循环控制指令的情况下,为所述抽象语法树节点创建与所述循环控制指令配合的循环控制子节点和条件判断子节点;或,
在所述节点名称存在标识符的情况下,为所述抽象语法树节点创建所述节点名称与所述标识符一致的子节点;或,
在所述节点名称存在函数指令的情况下,对所述规范化节点和所述函数指令进行记录处理。
4.根据权利要求2所述的方法,其特征在于,所述对所述规范化信息进行提取处理,得到数据流信息,包括:
建立数据节点数据集;
遍历所述规范化信息,提取所述节点名称与所述数据节点数据集相匹配的所述规范化信息,得到数据节点信息;
根据多个所述数据节点信息的所述节点名称,确定所述数据节点信息之间的相邻关系,形成所述数据流信息。
5.根据权利要求4所述的方法,其特征在于,所述数据节点数据集至少包括:变量创建指令、数据转移指令和数据控制指令。
6.根据权利要求2所述的方法,其特征在于,所述把所述规范化信息转化为序列信息,包括:
建立代码行节点数据集;
遍历所述规范化信息,提取所述节点名称与所述代码行节点数据集相匹配的所述规范化信息,得到代码行节点信息;
根据所述代码行节点数据集,创建字典序列;
根据字典序列,把所述代码行节点信息转化为所述序列信息。
7.根据权利要求2所述的方法,其特征在于,所述根据所述缺陷程序代码的所述序列信息和所述补丁程序代码的所述序列信息,得到程序补丁信息,包括:
将所述缺陷程序代码的所述序列信息和所述补丁程序代码的所述序列信息进行差异对比;
计算所述缺陷程序代码的序列信息和所述补丁程序代码的序列信息之间的差异值,得到所述程序补丁信息;其中,所述程序补丁信息包括:所述缺陷程序代码的序列信息标识号、操作指令和所述补丁程序代码的序列信息标识号。
8.根据权利要求1所述的方法,其特征在于,所述根据所述数据流信息、所述序列信息和所述程序补丁信息,提取得到所述缺陷程序代码的缺陷数据特征,包括:
根据与所述程序补丁信息对应的所述数据流信息和所述序列信息,提取所述缺陷程序代码的所述数据流信息与所述缺陷程序代码的所述序列信息的区别特征,得到所述缺陷数据特征。
9.一种电子设备,其特征在于,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如权利要求1至8任意一项所述的程序缺陷数据特征提取方法。
10.一种计算机可读存储介质,其特征在于,存储有计算机程序,所述计算机程序被处理器执行时,实现如权利要求1至8任意一项所述的程序缺陷数据特征提取方法。
CN202210239269.XA 2022-03-08 2022-03-08 一种程序缺陷数据特征提取方法、电子设备及存储介质 Pending CN116775121A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202210239269.XA CN116775121A (zh) 2022-03-08 2022-03-08 一种程序缺陷数据特征提取方法、电子设备及存储介质
PCT/CN2023/079878 WO2023169368A1 (zh) 2022-03-08 2023-03-06 一种程序缺陷数据特征提取方法、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210239269.XA CN116775121A (zh) 2022-03-08 2022-03-08 一种程序缺陷数据特征提取方法、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN116775121A true CN116775121A (zh) 2023-09-19

Family

ID=87937262

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210239269.XA Pending CN116775121A (zh) 2022-03-08 2022-03-08 一种程序缺陷数据特征提取方法、电子设备及存储介质

Country Status (2)

Country Link
CN (1) CN116775121A (zh)
WO (1) WO2023169368A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117056940B (zh) * 2023-10-12 2024-01-16 中关村科学城城市大脑股份有限公司 服务器系统漏洞修复方法、装置、电子设备和介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8266594B2 (en) * 2008-08-20 2012-09-11 International Business Machines Corporation System, method and program product for correcting semantic errors in code using peer submitted code snippets
US20170212829A1 (en) * 2016-01-21 2017-07-27 American Software Safety Reliability Company Deep Learning Source Code Analyzer and Repairer
CN108932192B (zh) * 2017-05-22 2020-01-14 南京大学 一种基于抽象语法树的Python程序类型缺陷检测方法
CN110597735B (zh) * 2019-09-25 2021-03-05 北京航空航天大学 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法
CN112181428B (zh) * 2020-09-28 2021-10-22 北京航空航天大学 一种基于抽象语法树的开源软件缺陷数据分类方法及系统

Also Published As

Publication number Publication date
WO2023169368A1 (zh) 2023-09-14

Similar Documents

Publication Publication Date Title
CN111522816A (zh) 基于数据库引擎的数据处理方法、装置、终端及介质
US10289541B2 (en) Source code flow analysis using information retrieval
CN111382070B (zh) 兼容性测试方法、装置、存储介质和计算机设备
US20180268081A1 (en) Data extraction
CN115309451A (zh) 代码克隆检测方法、装置、设备、存储介质及程序产品
CN114153980A (zh) 知识图谱构建方法和装置、检查方法、存储介质
US20110153311A1 (en) Method and an apparatus for automatically providing a common modelling pattern
WO2023169368A1 (zh) 一种程序缺陷数据特征提取方法、电子设备及存储介质
CN113190220A (zh) Json文件差异化对比方法及装置
CN111190880A (zh) 一种数据库检测方法、装置和计算机可读存储介质
US10402303B2 (en) Determining similarities in computer software codes for performance analysis
CN113760891A (zh) 一种数据表的生成方法、装置、设备和存储介质
CN110309214A (zh) 一种指令执行方法及其设备、存储介质、服务器
CN111026736B (zh) 数据血缘管理方法及装置、数据血缘解析方法及装置
CN112434831A (zh) 故障排查方法、装置、存储介质及计算机设备
CN113704519B (zh) 一种数据集的确定方法、装置、计算机设备以及存储介质
CN112069052A (zh) 一种异常对象检测方法、装置、设备及存储介质
CN114153447B (zh) 一种自动化生成ai训练代码的方法
CN115221047A (zh) 测试用例自动生成方法及电子设备
CN112905232B (zh) 一种基于语法分析树的程序代码平行语料挖掘方法及系统
US20130042224A1 (en) Application analysis device
CN113704108A (zh) 一种相似代码检测方法及装置、电子设备、存储介质
CN113849392A (zh) 分析函数调用的方法和装置
CN113220800B (zh) 基于antlr的数据字段血缘分析方法及装置
CN115310407B (zh) 一种Excel模型的解析方法及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication