CN111143219A - 一种基于人工智能的软件代码缺陷识别方法及相关装置 - Google Patents
一种基于人工智能的软件代码缺陷识别方法及相关装置 Download PDFInfo
- Publication number
- CN111143219A CN111143219A CN201911380345.3A CN201911380345A CN111143219A CN 111143219 A CN111143219 A CN 111143219A CN 201911380345 A CN201911380345 A CN 201911380345A CN 111143219 A CN111143219 A CN 111143219A
- Authority
- CN
- China
- Prior art keywords
- software code
- detected
- defect
- defective
- defect identification
- 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
Links
- 230000007547 defect Effects 0.000 title claims abstract description 167
- 238000000034 method Methods 0.000 title claims abstract description 57
- 238000013473 artificial intelligence Methods 0.000 title claims abstract description 43
- 239000013598 vector Substances 0.000 claims abstract description 129
- 239000012634 fragment Substances 0.000 claims abstract description 82
- 230000002950 deficient Effects 0.000 claims abstract description 73
- 238000012549 training Methods 0.000 claims description 26
- 230000015654 memory Effects 0.000 claims description 14
- 238000012545 processing Methods 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 4
- 238000006243 chemical reaction Methods 0.000 claims description 3
- 238000004891 communication Methods 0.000 description 7
- 238000007781 pre-processing Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 2
- 238000003062 neural network model Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 230000007787 long-term memory Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种基于人工智能的软件代码缺陷识别方法及相关装置,其中,方法包括:将待检测软件代码拆分为具有依赖关系的多个软件代码碎片;通过词向量算法,将每个软件代码碎片转换为软件代码向量,以得到具有依赖关系的多个软件代码向量;根据待检测软件代码对应的多个软件代码向量,确定待检测软件代码是否为缺陷软件代码。由于本申请在确定待检测软件代码是否为缺陷软件代码时,充分考虑了软件代码向量之间的依赖关系,从而识别待检测软件代码是否为缺陷软件代码时准确性更高。
Description
技术领域
本申请涉及代码缺陷检测技术领域,特别是涉及一种基于人工智能的软件代码缺陷识别方法及相关装置。
背景技术
软件代码缺陷是指隐藏在代码中的安全漏洞,如指针误用、数组误用、缓存溢出等,软件代码缺陷会导致很多安全问题,如信息泄露、系统崩溃、死锁等。因此,如何准确且快速地识别出软件代码中的各种缺陷,成为保障信息安全的重中之重。
目前,通常使用传统的机器学习算法提取待检测软件代码的软件代码特征和缺陷代码的代码缺陷特征,并使用模式匹配的方法,将待检测软件代码的软件代码特征与缺陷代码的代码缺陷特征进行相似度匹配,以确定待检测软件代码是否含有缺陷。但是,此种方式在对待检测软件代码中的缺陷进行识别时的准确性较低。
发明内容
有鉴于此,本申请提供了一种基于人工智能的软件代码缺陷识别方法及相关装置,用以提高待检测软件代码中缺陷识别的准确性。该方案如下:
一种基于人工智能的软件代码缺陷识别方法,包括:
将待检测软件代码拆分为具有依赖关系的多个软件代码碎片;
通过词向量算法,将每个软件代码碎片转换为软件代码向量,以得到具有依赖关系的多个软件代码向量;
根据待检测软件代码对应的多个软件代码向量,确定待检测软件代码是否为缺陷软件代码。
优选地,还包括:
在对待检测软件代码进行拆分前,通过模式匹配算法对待检测软件代码进行处理,得到去除注释、空白行和错误字符的待检测软件代码。
优选地,将待检测软件代码拆分为具有依赖关系的多个软件代码碎片,包括:
通过抽象语法树算法,将待检测软件代码拆分为具有结构依赖关系的多个软件代码碎片;
和/或,
通过程序依赖图,将待检测软件代码拆分为具有语义依赖关系的多个软件代码碎片。
优选地,软件代码向量为数值形式。
优选地,根据多个软件代码向量,确定待检测软件代码是否为缺陷软件代码,包括:
将多个软件代码向量输入预先建立的第一缺陷识别模型,获得第一缺陷识别模型输出的第一缺陷判决结果,第一缺陷判决结果表明待检测软件代码是否为缺陷软件代码;
其中,第一缺陷识别模型为以训练软件代码对应的多个训练软件代码向量为训练样本,以标注的训练软件代码是否为缺陷软件代码的结果为样本标签训练得到。
优选地,根据多个软件代码向量,确定待检测软件代码是否为缺陷软件代码,包括:
将每个软件代码向量输入预先建立的第二缺陷识别模型,获得第二缺陷识别模型输出的第二缺陷判决结果,第二缺陷判决结果表明软件代码向量对应的软件代码碎片是否为缺陷软件代码碎片;其中,第二缺陷识别模型为以训练软件代码对应的每个训练软件代码向量为训练样本,以标注的训练软件代码向量对应的软件代码碎片是否为缺陷软件代码碎片的结果为样本标签训练得到;
根据多个软件代码向量分别对应的第二缺陷判决结果,确定待检测软件代码是否为缺陷软件代码。
优选地,根据多个软件代码向量分别对应的第二缺陷判决结果,确定待检测软件代码是否为缺陷软件代码,包括:
若多个软件代码向量对应的第二缺陷判决结果均表明软件代码向量对应的软件代码碎片不为缺陷软件代码碎片,则确定待检测软件代码不为缺陷软件代码;否则,确定待检测软件代码为缺陷软件代码。
一种基于人工智能的软件代码缺陷识别装置,包括:
拆分模块,用于将待检测软件代码拆分为具有依赖关系的多个软件代码碎片;
转换模块,用于通过词向量算法,将每个软件代码碎片转换为软件代码向量,以得到具有依赖关系的多个软件代码向量;
确定模块,用于根据待检测软件代码对应的多个软件代码向量,确定待检测软件代码是否为缺陷软件代码。
优选地,还包括:
在对待检测软件代码进行拆分前,通过模式匹配算法对待检测软件代码进行处理,得到去除注释、空白行和错误字符的待检测软件代码。
优选地,拆分模块包括:第一拆分单元和/或第二拆分单元;
第一拆分单元,用于通过抽象语法树算法,将待检测软件代码拆分为具有结构依赖关系的多个软件代码碎片;
第二拆分单元,用于通过程序依赖图,将待检测软件代码拆分为具有语义依赖关系的多个软件代码碎片。
优选地,软件代码向量为数值形式。
优选地,确定模块具体用于:将多个软件代码向量输入预先建立的第一缺陷识别模型,获得第一缺陷识别模型输出的第一缺陷判决结果,第一缺陷判决结果表明待检测软件代码是否为缺陷软件代码;
其中,第一缺陷识别模型为以训练软件代码对应的多个训练软件代码向量为训练样本,以标注的训练软件代码是否为缺陷软件代码的结果为样本标签训练得到。
优选地,确定模块包括:模型预测单元和确定单元;
模型预测单元,用于将每个软件代码向量输入预先建立的第二缺陷识别模型,获得第二缺陷识别模型输出的第二缺陷判决结果,第二缺陷判决结果表明软件代码向量对应的软件代码碎片是否为缺陷软件代码碎片;其中,第二缺陷识别模型为以训练软件代码对应的每个训练软件代码向量为训练样本,以标注的训练软件代码向量对应的软件代码碎片是否为缺陷软件代码碎片的结果为样本标签训练得到;
确定单元,用于根据多个软件代码向量分别对应的第二缺陷判决结果,确定待检测软件代码是否为缺陷软件代码。
优选地,确定单元具体用于:若多个软件代码向量对应的第二缺陷判决结果均表明软件代码向量对应的软件代码碎片不为缺陷软件代码碎片,则确定待检测软件代码不为缺陷软件代码;否则,确定待检测软件代码为缺陷软件代码。
一种基于人工智能的软件代码缺陷识别设备,包括存储器和处理器;
存储器,用于存储程序;
处理器,用于执行程序,实现如上任一项所述的基于人工智能的软件代码缺陷识别方法的各个步骤。
一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如上任一项所述的基于人工智能的软件代码缺陷识别方法的各个步骤。
经由上述的技术方案可知,本申请提供的基于人工智能的软件代码缺陷识别方法,能够将待检测软件代码拆分为具有依赖关系的多个软件代码碎片,并通过词向量算法,将每个软件代码碎片转换为软件代码向量,以得到具有依赖关系的多个软件代码向量,进而根据待检测软件代码对应的多个软件代码向量,确定待检测软件代码是否为缺陷软件代码。由于本申请在确定待检测软件代码是否为缺陷软件代码时,充分考虑了软件代码向量之间的依赖关系,从而识别待检测软件代码是否为缺陷软件代码时准确性更高。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的一种基于人工智能的软件代码缺陷识别方法流程图;
图2为本申请实施例提供的一种基于人工智能的软件代码缺陷识别装置的结构示意图;
图3为本申请实施例提供的一种基于人工智能的软件代码缺陷识别设备的硬件结构框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供了一种基于人工智能的软件代码缺陷识别方法、装置、设备及介质。上述基于人工智能的软件代码缺陷识别装置可运行于终端中,也可运行于后台服务器/平台中。
上述终端可以是诸如台式机、移动终端(例如智能手机)、ipad等电子设备。在一个示例中,运行于终端中的基于人工智能的软件代码缺陷识别装置可为运行在终端中的客户端。该客户端可以是应用程序客户端,也可以是网页客户端。
运行于后台服务器/平台中的基于人工智能的软件代码缺陷识别装置可为服务器/平台的一个硬件组成部分,也可为功能模块或组件。
上述后台服务器或平台可以是一台服务器,也可以是由若干台服务器组成的服务器集群,或者是一个云计算服务中心。
接下来,首先对本申请实施例提供的基于人工智能的软件代码缺陷识别方法进行介绍。
请参阅图1,示出了一种基于人工智能的软件代码缺陷识别方法的流程示意图,该方法可以包括:
步骤S100、将待检测软件代码拆分为具有依赖关系的多个软件代码碎片。
在一种可能的实现方式中,可以通过抽象语法树算法,将待检测软件代码拆分为具有结构依赖关系的多个软件代码碎片,即应用抽象语法树算法对待检测软件代码进行表征,可以保留多个软件代码碎片间的结构信息。
在另一种可能的实现方式中,可以通过程序依赖图,将待检测软件代码拆分为具有语义依赖关系的多个软件代码碎片,即应用程序依赖图对待检测软件代码进行表征,可以保留多个软件代码碎片间的抽象语义信息。
当然,本申请还可以同时采用抽象语法树算法和程序依赖图,以得到具有依赖关系的多个软件代码碎片。
需要说明的是,上述通过抽象语法树以及程序依赖图得到具有依赖关系的多个软件代码碎片仅为示例,除此之外也可以利用其它算法得到具有依赖关系的多个软件代码碎片。
在一可选实施例中,在本步骤对待检测软件代码进行拆分前,还可以通过模式匹配算法对待检测软件代码进行去冗余处理,得到去冗余后的待检测软件代码。这里,去冗余处理包括但不限于:去除注释、空白行和错误字符。
以去冗余处理为去除注释(假设待检测软件代码中起始注释标识和结束注释标识都为“***”)为例,则通过模式匹配算法对待检测软件代码进行去注释处理时,可以将检测到的第n个“***”至第n+1个“***”之间的内容去除,以得到去注释后的待检测软件代码。其中,n为大于或等于1的奇数。
步骤S110、通过词向量算法,将每个软件代码碎片转换为软件代码向量,以得到具有依赖关系的多个软件代码向量。
应当理解,计算机无法对文本形式的软件代码碎片进行处理和分析,因此需要将文本形式的软件代码碎片转换为软件代码向量,以使得计算机可以对软件代码碎片对应的软件代码向量进行处理和分析。
本申请实施例中,软件代码碎片与软件代码向量一一对应。并且,针对每一待检测软件代码,得到的软件代码向量具有唯一性。
下面示例性地说明得到多个软件代码向量的过程。
以待检测软件代码共包含5个软件代码碎片为例,则软件代码向量的维度为5。若该待检测软件代码中一软件代码碎片的标签为2,则该软件代码碎片对应的软件代码向量为(0 1 0 0 0)。
需要说明的是,上述软件代码向量的确定方式仅为示例,并不作为本申请的限定。
步骤S120、根据待检测软件代码对应的多个软件代码向量,确定待检测软件代码是否为缺陷软件代码。
可选的,可以基于待检测软件代码对应的多个软件代码向量,确定待检测软件代码对应的软件代码特征,以基于待检测软件代码对应的软件代码特征,确定待检测软件代码是否为缺陷软件代码。
本申请提供的基于人工智能的软件代码缺陷识别方法,能够将待检测软件代码拆分为具有依赖关系的多个软件代码碎片,并通过词向量算法,将每个软件代码碎片转换为软件代码向量,以得到具有依赖关系的多个软件代码向量,进而根据待检测软件代码对应的多个软件代码向量,确定待检测软件代码是否为缺陷软件代码。由于本申请在确定待检测软件代码是否为缺陷软件代码时,充分考虑了软件代码向量之间的依赖关系,从而识别待检测软件代码是否为缺陷软件代码时准确性更高。
在一可选实施例中,上述步骤S120,根据待检测软件代码对应的多个软件代码向量,确定待检测软件代码是否为缺陷软件代码的过程可以通过将软件代码向量输入缺陷识别模型中实现。
由于数值形式的软件代码向量为标准的、能够被缺陷识别模型所使用的向量,基于此,本实施例中待检测软件代码对应的多个软件代码向量可以均为数值形式。
那么,步骤S120,根据待检测软件代码对应的多个软件代码向量,确定待检测软件代码是否为缺陷软件代码的过程可以为:将多个数值形式的软件代码向量输入至预先训练好的缺陷识别模型,以基于模型输出确定待检测软件代码是否为缺陷软件代码。
本实施例中缺陷识别模型可以有多种,基于不同的缺陷识别模型,步骤S120,根据待检测软件代码对应的多个软件代码向量,确定待检测软件代码是否为缺陷软件代码的过程具体可以有多种实现方式,本申请提供但不限于以下两种。
实现方式1:基于第一缺陷识别模型,确定待检测软件代码是否为缺陷软件代码。
第一缺陷识别模型可以是深度神经网络模型,例如,长短时记忆网络(LongShort-Term Memory,LSTM)模型、门循环网络(Gated Recurrent Unit,GRU)模型以及双向长短时记忆网络(Bidirectional Long Short-Term Memory,BLSTM)模型,当然,第一缺陷识别模型也可以为其他,具体可以根据实际情况确定。
可选的,第一缺陷识别模型可以由软件代码库资源中的大规模软件代码训练得到,具体训练过程可以如下:
第一步,对大规模软件代码进行预处理,具体预处理过程为:将软件代码库资源中的大规模软件代码作为训练软件代码,通过模式匹配算法对训练软件代码进行去冗余处理,得到去冗余后的训练软件代码;将每一训练软件代码拆分为具有依赖关系的多个训练软件代码碎片;通过机器自动对拆分得到的多个训练软件代码碎片进行标注,得到正样本数据集和负样本数据集,其中,正样本数据表示训练软件代码碎片包含缺陷,负样本数据表示训练软件代码碎片不包含缺陷,并通过人工对机器标注的正样本数据集和负样本数据集进行修正,得到修正后的正样本数据集和负样本数据集;通过词向量算法,将每个训练软件代码碎片转换为数值形式的训练软件代码向量,以得到具有依赖关系的多个数值形式的训练软件代码向量。
第二步,用训练软件代码对应的多个数值形式的训练软件代码向量训练第一缺陷识别模型,具体过程为:针对每个训练软件代码,将该训练软件代码对应的多个训练软件代码向量输入第一缺陷识别模型,基于该第一缺陷识别模型的输出结果以及标注的训练软件代码是否为缺陷软件代码的结果之间的差距,训练第一缺陷识别模型的参数,以得到训练好的第一缺陷识别模型。
经该两个步骤训练完成第一缺陷识别模型后,可以将多个软件代码向量输入训练好的第一缺陷识别模型,获得第一缺陷识别模型输出的第一缺陷判决结果,该第一缺陷判决结果能够表明待检测软件代码是否为缺陷软件代码。
本实施例中,第一缺陷识别模型根据具有依赖关系的多个软件代码向量,能够提取更准确的待检测软件代码的软件代码特征,从而使得第一缺陷识别模型输出的第一缺陷判决结果更准确。
实现方式2:基于第二缺陷识别模型,确定待检测软件代码是否为缺陷软件代码。
第二缺陷识别模型也可以是深度神经网络模型,例如,LSTM模型、GRU模型以及BLSTM模型,当然,第二缺陷识别模型也可以为其他,具体可以根据实际情况确定。
可选的,第二缺陷识别模型也可以由软件代码库资源中的大规模软件代码训练得到,具体训练过程可以如下:
第一步,对大规模软件代码进行预处理,具体预处理过程与实现方式1中的预处理过程对应,详细可以参见实现方式1中的预处理过程,这里不再重复赘述。
第二步,针对训练软件代码对应的每个训练软件代码向量,将该训练软件代码向量输入第二缺陷识别模型,基于该第二缺陷识别模型的输出结果以及标注的该训练软件代码向量对应的训练软件代码碎片是否为缺陷软件代码碎片的结果之间的差距,训练第二缺陷识别模型的参数,以得到训练好的第二缺陷识别模型。
经该两个步骤训练完成第二缺陷识别模型后,可以针对待检测软件代码对应的每个训练软件代码向量,将该软件代码向量输入训练好的第二缺陷识别模型,获得第二缺陷识别模型输出的第二缺陷判决结果,该第二缺陷判决结果表明输入至第二缺陷识别模型的该软件代码向量对应的软件代码碎片是否为缺陷软件代码碎片。依次将待检测软件代码对应的每个训练软件代码向量输入至第二缺陷识别模型,可以分别得到待检测软件代码对应的每个软件代码碎片是否为缺陷软件代码碎片。
进一步,可以根据待检测软件代码对应的多个软件代码向量分别对应的第二缺陷判决结果,确定该待检测软件代码是否为缺陷软件代码。该过程具体可以包括:若多个软件代码向量对应的第二缺陷判决结果均表明软件代码向量对应的软件代码碎片不为缺陷软件代码碎片,则确定待检测软件代码不为缺陷软件代码;否则,确定待检测软件代码为缺陷软件代码。
应当理解,第二缺陷识别模型的输出能够表明一个软件代码碎片是否为缺陷软件代码碎片,即相比于第一缺陷识别模型而言,第二缺陷识别模型能够对待检测软件代码中的缺陷位置进行定位,从而节省了对有缺陷的待检测软件代码中的缺陷进行定位的时间。
更进一步,本申请实施例还可以依据软件代码的缺陷类型,分别训练不同的缺陷识别模型,以基于各缺陷识别模型的输出确定待检测软件代码是否为缺陷软件代码,以及确定有缺陷的待检测软件代码的缺陷类型。
例如针对指针误用类型的缺陷,训练得到缺陷识别模型1,针对数组误用类型的缺陷,训练得到缺陷识别模型2,针对缓存溢出类型的缺陷,训练得到缺陷识别模型3,则若将待检测软件代码对应的多个软件代码向量输入至缺陷识别模型1,则可以通过缺陷识别模型1的输出,确定待检测软件代码是否为缺陷软件代码,若是,还可以进一步确定其为指针误用类型的缺陷软件代码。
本申请实施例还提供了一种基于人工智能的软件代码缺陷识别装置,下面对本申请实施例提供的基于人工智能的软件代码缺陷识别装置进行描述,下文描述的基于人工智能的软件代码缺陷识别装置与上文描述的基于人工智能的软件代码缺陷识别方法可相互对应参照。
请参阅图2,示出了本申请实施例提供的基于人工智能的软件代码缺陷识别装置的结构示意图,如图2所示,该基于人工智能的软件代码缺陷识别装置可以包括:拆分模块201、转换模块202和确定模块203。
拆分模块201,用于将待检测软件代码拆分为具有依赖关系的多个软件代码碎片。
转换模块202,用于通过词向量算法,将每个软件代码碎片转换为软件代码向量,以得到具有依赖关系的多个软件代码向量。
确定模块203,用于根据待检测软件代码对应的多个软件代码向量,确定待检测软件代码是否为缺陷软件代码。
本申请提供的基于人工智能的软件代码缺陷识别装置,能够将待检测软件代码拆分为具有依赖关系的多个软件代码碎片,并通过词向量算法,将每个软件代码碎片转换为软件代码向量,以得到具有依赖关系的多个软件代码向量,进而根据待检测软件代码对应的多个软件代码向量,确定待检测软件代码是否为缺陷软件代码。由于本申请在确定待检测软件代码是否为缺陷软件代码时,充分考虑了软件代码向量之间的依赖关系,从而识别待检测软件代码是否为缺陷软件代码时准确性更高。
在一种可能的实现方式中,本申请提供的基于人工智能的软件代码缺陷识别装置还可以包括处理模块。
处理模块,用于在对待检测软件代码进行拆分前,通过模式匹配算法对待检测软件代码进行处理,得到去除注释、空白行和错误字符的待检测软件代码。
在一种可能的实现方式中,上述拆分模块可以包括:第一拆分单元和/或第二拆分单元。
第一拆分单元,用于通过抽象语法树算法,将待检测软件代码拆分为具有结构依赖关系的多个软件代码碎片。
第二拆分单元,用于通过程序依赖图,将待检测软件代码拆分为具有语义依赖关系的多个软件代码碎片。
在一种可能的实现方式中,软件代码向量为数值形式。
在一种可能的实现方式中,上述确定模块具体用于:将多个软件代码向量输入预先建立的第一缺陷识别模型,获得第一缺陷识别模型输出的第一缺陷判决结果,第一缺陷判决结果表明待检测软件代码是否为缺陷软件代码。
其中,第一缺陷识别模型为以训练软件代码对应的多个训练软件代码向量为训练样本,以标注的训练软件代码是否为缺陷软件代码的结果为样本标签训练得到。
在一种可能的实现方式中,上述确定模块可以包括:模型预测单元和确定单元。
模型预测单元,用于将每个软件代码向量输入预先建立的第二缺陷识别模型,获得第二缺陷识别模型输出的第二缺陷判决结果,第二缺陷判决结果表明软件代码向量对应的软件代码碎片是否为缺陷软件代码碎片。
其中,第二缺陷识别模型为以训练软件代码对应的每个训练软件代码向量为训练样本,以标注的训练软件代码向量对应的软件代码碎片是否为缺陷软件代码碎片的结果为样本标签训练得到。
确定单元,用于根据多个软件代码向量分别对应的第二缺陷判决结果,确定待检测软件代码是否为缺陷软件代码。
在一种可能的实现方式中,上述确定单元具体用于:若多个软件代码向量对应的第二缺陷判决结果均表明软件代码向量对应的软件代码碎片不为缺陷软件代码碎片,则确定待检测软件代码不为缺陷软件代码;否则,确定待检测软件代码为缺陷软件代码。
本申请实施例还提供了一种基于人工智能的软件代码缺陷识别设备,请参阅图3,示出了该基于人工智能的软件代码缺陷识别设备的硬件结构框图,该基于人工智能的软件代码缺陷识别设备的硬件结构可以包括:至少一个处理器301,至少一个通信接口302,至少一个存储器303和至少一个通信总线304;
在本申请实施例中,处理器301、通信接口302、存储器303、通信总线304的数量为至少一个,且处理器301、通信接口302、存储器303通过通信总线304完成相互间的通信;
处理器301可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路等;
存储器303可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory)等,例如至少一个磁盘存储器;
其中,存储器303存储有程序,处理器301可调用存储器303存储的程序,所述程序用于:
将待检测软件代码拆分为具有依赖关系的多个软件代码碎片;
通过词向量算法,将每个软件代码碎片转换为软件代码向量,以得到具有依赖关系的多个软件代码向量;
根据待检测软件代码对应的多个软件代码向量,确定待检测软件代码是否为缺陷软件代码。
可选的,所述程序的细化功能和扩展功能可参照上文描述。
本申请实施例还提供一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如上述基于人工智能的软件代码缺陷识别方法。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种基于人工智能的软件代码缺陷识别方法,其特征在于,包括:
将待检测软件代码拆分为具有依赖关系的多个软件代码碎片;
通过词向量算法,将每个软件代码碎片转换为软件代码向量,以得到具有依赖关系的多个所述软件代码向量;
根据所述待检测软件代码对应的多个所述软件代码向量,确定所述待检测软件代码是否为缺陷软件代码。
2.根据权利要求1所述的基于人工智能的软件代码缺陷识别方法,其特征在于,还包括:
在对所述待检测软件代码进行拆分前,通过模式匹配算法对所述待检测软件代码进行处理,得到去除注释、空白行和错误字符的待检测软件代码。
3.根据权利要求2所述的基于人工智能的软件代码缺陷识别方法,其特征在于,所述将所述待检测软件代码拆分为具有依赖关系的多个软件代码碎片,包括:
通过抽象语法树算法,将所述待检测软件代码拆分为具有结构依赖关系的多个软件代码碎片;
和/或,
通过程序依赖图,将所述待检测软件代码拆分为具有语义依赖关系的多个软件代码碎片。
4.根据权利要求1所述的基于人工智能的软件代码缺陷识别方法,其特征在于,所述软件代码向量为数值形式。
5.根据权利要求4所述的基于人工智能的软件代码缺陷识别方法,其特征在于,所述根据多个所述软件代码向量,确定所述待检测软件代码是否为缺陷软件代码,包括:
将多个所述软件代码向量输入预先建立的第一缺陷识别模型,获得所述第一缺陷识别模型输出的第一缺陷判决结果,所述第一缺陷判决结果表明所述待检测软件代码是否为缺陷软件代码;
其中,所述第一缺陷识别模型为以训练软件代码对应的多个训练软件代码向量为训练样本,以标注的训练软件代码是否为缺陷软件代码的结果为样本标签训练得到。
6.根据权利要求4所述的基于人工智能的软件代码缺陷识别方法,其特征在于,所述根据多个所述软件代码向量,确定所述待检测软件代码是否为缺陷软件代码,包括:
将每个所述软件代码向量输入预先建立的第二缺陷识别模型,获得所述第二缺陷识别模型输出的第二缺陷判决结果,所述第二缺陷判决结果表明所述软件代码向量对应的软件代码碎片是否为缺陷软件代码碎片;其中,所述第二缺陷识别模型为以训练软件代码对应的每个训练软件代码向量为训练样本,以标注的训练软件代码向量对应的软件代码碎片是否为缺陷软件代码碎片的结果为样本标签训练得到;
根据多个所述软件代码向量分别对应的第二缺陷判决结果,确定所述待检测软件代码是否为缺陷软件代码。
7.根据权利要求6所述的基于人工智能的软件代码缺陷识别方法,其特征在于,所述根据多个所述软件代码向量分别对应的第二缺陷判决结果,确定所述待检测软件代码是否为缺陷软件代码,包括:
若多个所述软件代码向量对应的第二缺陷判决结果均表明软件代码向量对应的软件代码碎片不为缺陷软件代码碎片,则确定所述待检测软件代码不为缺陷软件代码;否则,确定所述待检测软件代码为缺陷软件代码。
8.一种基于人工智能的软件代码缺陷识别装置,其特征在于,包括:
拆分模块,用于将待检测软件代码拆分为具有依赖关系的多个软件代码碎片;
转换模块,用于通过词向量算法,将每个软件代码碎片转换为软件代码向量,以得到具有依赖关系的多个所述软件代码向量;
确定模块,用于根据所述待检测软件代码对应的多个所述软件代码向量,确定所述待检测软件代码是否为缺陷软件代码。
9.一种基于人工智能的软件代码缺陷识别设备,其特征在于,包括存储器和处理器;
所述存储器,用于存储程序;
所述处理器,用于执行所述程序,实现如权利要求1-7中任一项所述的基于人工智能的软件代码缺陷识别方法的各个步骤。
10.一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如权利要求1-7中任一项所述的基于人工智能的软件代码缺陷识别方法的各个步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911380345.3A CN111143219A (zh) | 2019-12-27 | 2019-12-27 | 一种基于人工智能的软件代码缺陷识别方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911380345.3A CN111143219A (zh) | 2019-12-27 | 2019-12-27 | 一种基于人工智能的软件代码缺陷识别方法及相关装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111143219A true CN111143219A (zh) | 2020-05-12 |
Family
ID=70521110
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911380345.3A Pending CN111143219A (zh) | 2019-12-27 | 2019-12-27 | 一种基于人工智能的软件代码缺陷识别方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111143219A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106294156A (zh) * | 2016-08-11 | 2017-01-04 | 北京邮电大学 | 一种静态代码缺陷检测分析方法及装置 |
CN109214191A (zh) * | 2018-09-18 | 2019-01-15 | 北京理工大学 | 一种利用深度学习预测软件安全漏洞的方法 |
CN110543770A (zh) * | 2019-09-02 | 2019-12-06 | 南瑞集团有限公司 | 一种开源软件的漏洞检测方法、装置及系统 |
CN110597735A (zh) * | 2019-09-25 | 2019-12-20 | 北京航空航天大学 | 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法 |
-
2019
- 2019-12-27 CN CN201911380345.3A patent/CN111143219A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106294156A (zh) * | 2016-08-11 | 2017-01-04 | 北京邮电大学 | 一种静态代码缺陷检测分析方法及装置 |
CN109214191A (zh) * | 2018-09-18 | 2019-01-15 | 北京理工大学 | 一种利用深度学习预测软件安全漏洞的方法 |
CN110543770A (zh) * | 2019-09-02 | 2019-12-06 | 南瑞集团有限公司 | 一种开源软件的漏洞检测方法、装置及系统 |
CN110597735A (zh) * | 2019-09-25 | 2019-12-20 | 北京航空航天大学 | 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111145737B (zh) | 语音测试方法、装置和电子设备 | |
CN112070138B (zh) | 多标签混合分类模型的构建方法、新闻分类方法及系统 | |
US11651014B2 (en) | Source code retrieval | |
US10579372B1 (en) | Metadata-based API attribute extraction | |
CN116629275B (zh) | 一种基于大数据的智能决策支持系统及方法 | |
CN107341143B (zh) | 一种句子连贯性判断方法及装置和电子设备 | |
CN111858843B (zh) | 一种文本分类方法及装置 | |
CN108027814B (zh) | 停用词识别方法与装置 | |
CN111079408B (zh) | 一种语种识别方法、装置、设备及存储介质 | |
CN111859093A (zh) | 敏感词处理方法、装置及可读存储介质 | |
CN113627168B (zh) | 一种元器件封装冲突的检查方法、装置、介质及设备 | |
CN111338692A (zh) | 基于漏洞代码的漏洞分类方法、装置及电子设备 | |
CN112559526A (zh) | 数据表导出方法、装置、计算机设备及存储介质 | |
CN105790967B (zh) | 一种网络日志处理方法和装置 | |
CN112148841A (zh) | 一种对象分类以及分类模型构建方法和装置 | |
CN111258905A (zh) | 缺陷定位方法、装置和电子设备及计算机可读存储介质 | |
CN116029280A (zh) | 一种文档关键信息抽取方法、装置、计算设备和存储介质 | |
CN114139636A (zh) | 异常作业处理方法及装置 | |
CN112395880B (zh) | 结构化三元组的纠错方法、装置、计算机设备及存储介质 | |
CN111723182B (zh) | 一种用于漏洞文本的关键信息抽取方法及装置 | |
CN117636368A (zh) | 批改方法、装置、设备及介质 | |
CN115858776B (zh) | 一种变体文本分类识别方法、系统、存储介质和电子设备 | |
CN115203758B (zh) | 一种数据安全存储方法、系统及云平台 | |
CN108021918B (zh) | 文字识别方法及装置 | |
CN107656627B (zh) | 信息输入方法和装置 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200512 |