CN117951701A - 用于确定软件代码中的缺陷和漏洞的方法 - Google Patents

用于确定软件代码中的缺陷和漏洞的方法 Download PDF

Info

Publication number
CN117951701A
CN117951701A CN202410098789.2A CN202410098789A CN117951701A CN 117951701 A CN117951701 A CN 117951701A CN 202410098789 A CN202410098789 A CN 202410098789A CN 117951701 A CN117951701 A CN 117951701A
Authority
CN
China
Prior art keywords
dbn
code set
training
vulnerabilities
nodes
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
CN202410098789.2A
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.)
Individual
Original Assignee
Individual
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 Individual filed Critical Individual
Publication of CN117951701A publication Critical patent/CN117951701A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • 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/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/214Generating training patterns; Bootstrap methods, e.g. bagging or boosting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N7/00Computing arrangements based on specific mathematical models
    • G06N7/01Probabilistic graphical models, e.g. probabilistic networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

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

Abstract

本公开涉及一种用于确定软件代码中的缺陷和安全漏洞的方法。该方法包括:基于由程序员产生的训练代码集来生成深度置信网络(DBN),并根据相对于DBN的测试代码集来评估DBN的性能。

Description

用于确定软件代码中的缺陷和漏洞的方法
本申请是申请日为2017年4月21日、申请号为201780038210.1、名称为“用于确定软件代码中的缺陷和漏洞的方法”的发明专利申请的分案申请。
相关申请交叉引用
本申请要求于2016年4月22日提交的美国专利申请第62/391,166号的权益,其通过引用并入本文。
技术领域
本公开涉及发现缺陷和漏洞,并且更具体地,本公开涉及用于确定软件代码中的缺陷和安全漏洞的方法。
背景技术
随着技术不断发展,软件开发仍处于这种发展的最前沿。然而,攻击软件的企图也在上升。为了保护软件免受攻击,在开发周期期间定期执行软件测试,以便发现错误、软件漏洞等。任何软件开发的测试和质量保证检查都不是新鲜事务。只要软件已被开发出来,就已经进行了测试,但是,所开发的软件仍然存在瑕疵。
在当前一些解决方案中,无法对具有不同语义的不同软件代码区域加以区分。例如,软件程序文件内的一些代码区域具有带有相同值的传统特征,并且因此,由这些特征生成的特征向量是相同的,并且没有办法对语义差异加以区分。
软件漏洞可被视为一种特殊的缺陷。根据应用程序的不同,这些软件漏洞可能比错误更为重要,并且要求与缺陷完全不同的识别过程。而且,相比于漏洞而言存在着更多的错误(至少每年都报告许多错误)。此外,漏洞是至关重要的,而一些错误并非如此,以至于它们永远不会被修复。最后,大多数开发人员更好地理解如何识别和处理缺陷而不是漏洞。
因此,发现漏洞是一个艰难且昂贵的过程。为了支持这一过程,研究人员已经基于软件度量、文本挖掘和函数调用而开发出了基于机器学习的漏洞预测模型。遗憾的是,以前的研究并未针对软件安全漏洞进行可靠且有效的预测。在这种方法中,我们建议使用深度学习来生成新的语义特征,以帮助构建更准确的安全漏洞预测模型。
因此,提供了一种用于确定软件代码中的缺陷和安全漏洞的新颖方法。
发明内容
本公开涉及一种用于确定软件代码中的缺陷和安全漏洞的方法。该方法包括:基于由程序员产生的训练代码集来生成深度置信网络(DBN);以及根据相对于DBN的测试代码集来评估DBN的性能。
在本公开的一个方面,提供了一种识别软件缺陷和漏洞的方法,该方法包括:基于由程序员产生的训练代码集来生成深度置信网络(DBN);以及相对于DBN来评估测试代码集的性能。
在另一方面,生成DBN包括:从训练代码集中获取令牌;以及基于来自训练代码集的令牌来构建DBN。在可替代方面,构建DBN还包括:构建整型向量与令牌之间的映射;将来自训练代码集的令牌向量转换为训练代码整型向量;以及经由训练代码整型向量来实现DBN。
在另一方面,评估性能包括:使用训练代码整型向量来生成语义特征;根据训练代码集来构建预测模型;以及相对于语义特征和预测模型来评估测试代码集的性能。
在再一方面,获取令牌包括:从训练代码集中提取句法信息。在又一方面,提取句法信息包括:从训练代码集中提取抽象语法树(AST)节点作为令牌。在又一方面,生成DBN包括:对DBN进行训练。在一方面,对DBN进行训练包括:将每层中的节点数设置为相等;重构训练代码集;以及将数据向量归一化。在另一方面,在设置节点之前,对预定参数集进行训练。在可替代方面,参数之一是隐藏层中的节点数。
在又一方面,整型向量与令牌之间的映射包括:执行编辑距离函数;移除具有不正确标签的数据;过滤掉不常见的节点;以及收集错误变化。在另一方面,显示软件缺陷和漏洞的报告。
附图说明
现在将参考附图并且仅通过示例的方式来描述本公开的实施例。
图1是概述确定软件代码中的缺陷和安全漏洞的方法的流程图;
图2是概述开发用于图1的方法的深度置信网络(DBN)的方法的流程图;
图3是概述获取令牌向量的方法的流程图;
图4是概述整数与令牌之间的映射的一个实施例的流程图;
图5是概述对令牌进行映射的方法的流程图;
图6是概述对DBN进行训练的方法的流程图;
图7是概述生成缺陷预测模型的另一方法的流程图;
图8是概述生成预测模型的方法的流程图;
图9是确定软件代码中的错误的另一实施例的示意图;
图10是DBN架构的示意图;
图11是缺陷预测过程的示意图;
图12是概述针对文件级缺陷预测而评估的项目的表格;
图13是概述针对变化级缺陷预测而评估的项目的表格;
图14是概述针对调整隐藏层的数目以及每个隐藏层中的节点数的平均F1分数的图表;
图15是示出迭代次数相对于错误率的图表;以及
图16是解释检查器框架的示意图。
具体实施方式
本公开涉及一种用于确定软件代码中的缺陷和安全漏洞的方法。该方法包括:基于由程序员产生的训练代码集来生成深度置信网络(DBN)以及相对于DBN来评估测试代码集。测试代码集可被看作是由程序员产生的编程代码,该编程代码需要针对缺陷和漏洞而被评估。在一个实施例中,使用由从DBN学习的语义特征所训练的模型来评估测试代码集。
转到图1,提供了一种用于对单个程序员的源代码或软件代码的软件缺陷和漏洞进行识别的方法。在下面的描述中,术语“错误(bug)”将被用于描述软件缺陷和漏洞。最初,基于由程序员产生的训练代码集来开发(100)或生成深度置信网络(DBN)。这种训练代码集可被看作是先前由程序员创建或生成的源代码。训练代码集可以包括在软件开发周期或过程期间的不同时间处的源代码,由此源代码包括缺点或错误。
如将理解的,DBN可被视为生成图形模型,该生成图形模型使用多级神经网络来从训练代码集学习表达,该表达可以重构具有高概率的任何进一步的输入数据(例如,测试代码集)的语义和内容。在优选实施例中,DBN包含一个输入层和若干隐藏层,并且顶层是输出层,该输出层被用作用以对例如在图10中示意性示出的输入数据进行表示的特征。每层优选包括多个或若干随机节点。隐藏层的数目和每层中的节点数根据程序员的需求而改变。在优选实施例中,所学习的语义特征的大小是顶层中的节点数,由此DBN使网络能够通过调整不同层中的节点之间的权重、使用所生成的特征来重构输入数据。
在一个实施例中,DBN对输入层与隐藏层之间的联合分布进行模拟,如下所示:
其中x是来自输入层的数据向量,l是隐藏层的数目,hk是第k层的数据向量(1<k<1)。P(hk|hk+1)是针对相邻的k层和k+1层的条件分布。
为了计算P(hk|hk+1),DBN中每对相邻的两个层被训练为限制型玻尔兹曼机(RBM,Restricted Boltzmann Machines)。RBM是一种双层无向的二分图形模型,其中第一层包括被称为可见节点的观察到的数据变量,并且第二层包括被称为隐藏节点的潜在变量。P(hk|hk+1)可被有效地计算为:
其中nk是k层中的节点数,sigm(c)=1/(1+e-c),b是偏差矩阵,bk j是针对k层的节点j的偏差,以及Wk是k层与k+1层之间的权重矩阵。
DBN使用迭代或迭代过程来自动学习W和b矩阵,其中W和b通过对数似然随机梯度下降来更新:
其中t是第t次迭代,η是学习率,P(v|h)是给定隐藏层的RBM的可见层的概率,i和j是RBM的不同层中的两个节点,Wij是两个节点之间的权重,以及bo k是k层中关于节点o的偏差。
为了对网络进行训练,首先经由RBM来初始化两层之间的所有W矩阵并且将偏差b设置为0。这些可以相对于诸如训练迭代次数、重构的输入数据与原始的输入数据之间的错误率等特定标准来进行调整。在一个实施例中,训练迭代次数可被用作对W和b进行调整的标准。良好调整后的W和b被用于设置DBN,以便针对训练代码集和测试代码集这两者或者数据来生成语义特征。
在已经开发出DBN之后,可以相对于DBN来评估(102)测试代码集(由相同程序员产生)。由于DBN是基于程序员自己的训练代码集而开发的,因此DBN可以更容易地或快速地识别该程序员的测试代码集中的可能缺陷或漏洞。
转到图2,示出了开发DBN的另一方法。开发DBN(100)最初要求获取训练代码集(200)。同时,如果有的话,还可以获取测试代码集,但是测试代码集是用于评估目的的。如上所述,训练代码集表示程序员先前已创建的代码(包括错误等),而测试代码集是将要针对软件缺陷和漏洞进行评估的代码。测试代码集还可被用于执行与所生成的DBN的准确性有关的测试。
最初,获取(202)来自训练代码集的令牌向量以及如果有的话,还获取来自测试代码集的令牌向量。如将理解的,令牌化是用非敏感数据等价物来替换敏感数据元素的过程。在一个实施例中,令牌是由编译器识别的代码元素并且通常是对编译器有意义的程序代码的最小元素。这些令牌向量可被分别视为训练代码令牌向量和测试代码令牌向量。然后,如果需要,针对训练代码集和测试代码集这两者来生成(204)整数与令牌或令牌向量之间的映射。如将理解的,在测试代码集上执行的函数或过程是准备用于测试的代码,并且不是用作开发DBN的过程的一部分。然后将两组令牌向量都映射到整型向量(206),该整型向量可被视为训练代码整型向量和测试代码整型向量。然后将数据向量归一化(207)。然后,训练代码整型向量被用于通过使用训练代码整型向量以对DBN模型的设置(即,层的数目、每层中的节点数以及迭代次数)进行训练来构建DBN(208)。然后,DBN可以根据训练代码整型向量和测试集整型向量来生成语义特征(210)。在对DBN进行训练之后,所有的设置被固定,并且训练代码整型向量和测试集整型向量被输入到DBN模型中。然后可以从DBN的输出中获取针对训练集和测试集这两者的语义特征。基于这些语义特征,根据训练代码集来创建(212)缺陷预测模型,训练代码集的性能可以相对于用于准确性测试的测试代码集来评估。然后所开发的DBN可被用于确定错误(如图1中所概述的)。
转到图3,示出了概述从训练代码集和(如果有的话)测试代码集中获取令牌向量(202)的一个实施例的流程图。最初,从训练代码集中检索句法信息(300),并生成令牌集或令牌向量集(302)。在一个示例中,可以使用Java抽象语法树(AST)。在这种示例中,可以提取三种类型的AST节点作为令牌。第一类节点是方法可被记录为方法名称的方法调用和类实例创建。第二类节点是声明节点,即方法声明、类型声明和/或枚举声明,以及第三类节点是控制流节点,例如while语句、catch子句、if语句、throw语句等。在优选实施例中,控制流节点被记录为其语句类型,例如,if语句被简单记录为“if”。因此,在优选实施例中,对于每个训练代码集或文件,以这三个类别来生成令牌向量集。在另一实施例中,还可以预期和采用其他AST节点的使用,例如分配和内在类型声明等。
在一些情况下,程序员可能正在处理不同的项目,从而使用本公开的方法和系统来检查程序员的代码可能是有益的。为了防止跨项目缺陷预测,对于方法调用的AST节点和声明类型节点,代替使用名称,使用节点类型(例如但不限于方法声明和方法调用)用于标记目的。
转到图4,示出了概述整数与令牌(反之亦然)之间的映射(206)的一个实施例的流程图。为了改进映射,应减少训练代码集内的“噪声”。在这种情况下,“噪声”可被视为缺陷数据或者来自错误标记。在优选实施例中,为了减少或消除错误标记数据,编辑距离函数被执行(400)。编辑距离函数可被视为相似度计算算法,该相似度计算算法被用于对实例之间的距离进行定义。编辑距离敏感于令牌及令牌之间的顺序这两者。给定两个令牌序列A和B,编辑距离d(A,B)是将A变换为B的编辑操作的最小权重系列(minimum-weight series)。d(A,B)越小,则A和B越相似。然后,基于编辑距离测量,可以移除或消除(402)具有不正确标签的数据。例如,尽管可以考虑其他标准,但是用于移除的标准可以是具有高于特定阈值的距离的那些标准。在一个实施例中,这可以使用诸如但不限于最近列表噪声识别(CLNI)等算法来执行。根据系统的目标,可以按照漏洞发现的参数来调整CLNI。
然后,可以滤除掉(404)不频繁的AST节点。这些AST节点可以是针对训练代码集内的特定文件而设计的节点并且不能被推广到该训练代码集内的其他文件。在一个实施例中,如果令牌的出现次数小于3,则过滤掉该节点(或令牌)。换言之,节点被使用小于预定阈值。
如果正在执行变化级缺陷预测,则可以收集(406)错误引入变化。在一个实施例中,这可以通过改进的SZZ算法来执行。这些改进包括但不限于过滤掉测试用例、修复提交的先前提交中的文件逐行追溯(git blame)、代码省略跟踪、以及文本/修饰变化跟踪中的至少一种。如所理解的,git是用于跟踪计算机文件中的变化并且协调多人之间对于这些文件的操作的开源版本控制系统(VCS)。
转到图5,示出了概述对令牌进行映射(206)的方法的流程图。由于DBN通常仅将数值向量作为输入,因此输入向量的长度应当相同。每个令牌都具有唯一的整数标识符,而不同的方法名称和类名称是不同的令牌。然而,如果整型向量具有不同的长度,则将至少一个零附加到(500)该整型向量以使所有长度一致并且长度与最长向量相等。如将理解的,添加零并不会影响结果并且被用作表示转换并使向量可被DBN接受。例如,转到图10,考虑文件1和文件2,用于文件1和文件2的令牌向量分别被映射为[1,2,3,4]和[2,3,1,4]。通过这种映射或编码处理,方法调用信息和类间信息被表示为整型向量。此外,由于令牌的顺序保持不变,因此保留了一些程序结构信息。
转到图6,示出了概述对DBN进行训练的方法的流程图。最初,通过训练代码集来训练和/或生成DBN(600)。在训练的一个实施例中,可以对参数集进行训练。在优选实施例中,对三个参数进行训练。这些参数可以是隐藏层的数目、每个隐藏层中的节点数、以及训练迭代的次数。通过对这些参数进行调整,可以意识到检测错误中的改进。
在优选实施例中,节点数在每层中被设置为相同(602)。通过隐藏层和节点,DBM获取可能难以察觉但可被用于捕获语义差异的属性。例如,对于每个节点,DBN可以学习从该节点到其顶层的其他节点的遍历概率。
由于DBN要求输入数据值的范围为0到1,而输入向量中的数据可以具有任何整数值,为了满足这种要求,训练代码集和测试代码集中的数据向量的值被归一化(604)。在一个实施例中,这可以使用最小-最大归一化来执行。由于针对不同令牌的整数值是标识符,因此具有映射值1的一个令牌和具有映射值2的一个令牌表示这样的两个节点是不同且独立的。因此,归一化的值仍然可被用作令牌标识符,因为相同的标识符仍然保持相同的归一化的值。通过反向传播验证,DBN可以通过调整不同层中的节点之间的权重、使用所生成的特征来重构输入数据(606)。
与标记文件级缺陷数据不同,标记变化级缺陷数据要求错误修复变化与错误引入变化之间的进一步链接。通过错误修复变化而被删除或变化的行是错误行,并且引入错误行的最新变化被视为错误引入变化。错误引入变化可以通过由VCS提供的责任(blame)技术(例如,git算法或SZZ算法)来识别。
转到图7,示出了概述生成缺陷预测模型的另一方法的流程图。当前实施例可被视为软件安全漏洞预测。类似于文件级缺陷预测和变化级缺陷预测,安全漏洞预测的过程包括:特征提取过程(700)。在700中,该方法提取语义特征,用于表示有错误的实例或干净的实例。
转到图8,示出了概述生成预测模型的方法的流程图。最初,正使用的输入数据(或测试代码集内的单个文件)被检查并确定为有错误或干净(800)。这优选地基于针对每个文件的发布后缺陷。在一个实施例中,可以经由将错误报告链接到其错误修复变化来从错误跟踪系统(BTS)中收集缺陷。与这些错误修复变化相关的任何文件都可被标记为有错误。否则,该文件可被标记为干净。
然后可以对将要针对其来测试代码的参数进行调整(802)。下面更详细地公开了该过程。最后,可以训练并随后生成预测模型(804)。
转到图9,示出了确定软件代码中的错误的另一实施例的示意图。如图所示,最初,解析源文件(或训练代码集)以获取令牌。然后使用这些令牌,对AST节点的向量进行编码。然后基于令牌来生成语义特征,并且然后可以执行缺陷预测。
还进行了用于研究本公开的方法的实验。在这些实验中,为了评估本公开的方法的有效性,使用了非努力感知评估方案和努力感知评估方案。
对于非努力感知评估,使用了三个参数。这些参数或度量是精确度、查全率和F1。F1是精度与查全率这两者的调和平均值,用于对模型的预测性能进行测量。如所理解的,F1是一种广泛使用的评价度量。这三个度量被广泛适用于评估缺陷预测技术及其已知过程。对于努力感知评估,采用了两个度量,即B20的N和B20的P。这些先前在由Tian Jiang、LinTan和Sunghun Kim,ASE 2013,Palo Alto,USA所撰写的、题为“个性化缺陷预测(Personalized Defect Prediction)”的文章中公开。
为了便于文件级缺陷预测的实验的复制和验证,使用公共可用的输入数据或代码。在当前的实验中,使用了来自PROMISE数据存储库的数据。来自该数据存储库的所有Java开源项目与特定版本号一起使用以提供本公开的方法,因为需要版本号来从输入数据(被视为源代码或训练代码集)的AST中提取令牌向量。总共收集了10个Java项目。图12中示出的表格示出了每个项目的版本、平均文件数和平均错误率。每个项目内的文件数的范围从150至1046,并且项目的错误率具有13.4%的最小值和49.7%的最大值。
比较了用于评估具有两种不同的传统特征的文件级缺陷预测语义特征的基线。传统特征的第一基线包括20个传统特征,包括代码行、运算对象和运算符计数、类中的方法数、继承树中类的位置、以及McCabe复杂性度量等。对于第二基线,在噪声被修复之后,将AST节点给予DBN模型,即AST节点位于输入数据中。每个实例或AST节点被表示为AST节点的术语频率的向量。
为了便于变化级缺陷预测的实验的复制和验证,收集了来自六个开源项目的700,000多个变化,以使用图13的表格中所示的详细内容来评估变化级缺陷预测。
如上所述,本公开的方法包括:调整参数以便改进对错误的检测。在一个实施例中,正被调整的参数可以包括:隐藏层的数目、每个隐藏层中的节点数、以及迭代的次数。通过分别在ant(1.5,1.6)、camel(1.2,1.4)、jEdit(4.0,4.1)、lucene(2.0,2.2)和poi(1.5,2.5)上以不同的参数值来进行实验,从而对这三个参数进行调整。每个实验都具有三个参数的特定值,并且分别在五个项目上运行。给定一个实验,对于每个项目,使用较旧版本的训练代码来相对于三个参数的特定值对DBN进行训练。然后,训练后的DBN被用于生成较旧版本和较新版本这两者的语义特征。之后,使用较旧版本的训练代码来构建缺陷预测模型并将该缺陷预测模型应用于较新版本。最后,通过缺陷预测中的五个项目的平均F1分数来评估参数的具体值。
更具体地,为了设置隐藏层的数目以及每层中的节点数,由于隐藏层的数目以及每个隐藏层中的节点数彼此交互,因此这两个参数被一起调整。对于隐藏层的数目,使用11个离散值来进行实验,这11个离散值包括2、3、5、10、20、50、100、200、500、800和1,000。对于每个隐藏层中的节点数,实验了8个离散值,这8个离散值包括20、50、100、200、300、500、800和1,000。在评估这两个参数时,迭代次数被设置为50并且保持不变。图14提供了概述针对调整隐藏层的数目和每个隐藏层中的节点数的平均F1分数的图表。在每层中的节点数被固定时,随着隐藏层的数目增加,所有的平均F1分数都是凸曲线。大多数曲线在隐藏层的数目等于10的那一点处达到峰值。如果隐藏层的数目保持不变,则在每层中的节点数为100时(图14中的最上行),会出现最佳的F1分数。结果,隐藏层的数目被选择为10并且每个隐藏层中的节点数被选择为100。因此,针对每个项目的基于DBN的特征的数目为100。
在设置迭代次数时,在训练过程期间,DBN调整权重以缩小每次迭代中重构的输入数据与原始的输入数据之间的错误率。通常,迭代次数越多,则错误率越低。但是,在迭代次数与时间成本之间存在折衷。为了平衡迭代次数与时间成本,选择相同的五个项目来进行实验,其中迭代次数为十个离散值。值范围为1到10,000,并且错误率被用于对该参数进行评估。这在图15中示出,图15示出了随着迭代次数增加,错误率缓慢降低,同时相应的时间成本呈指数增加。在实验中,迭代次数被设置为200,同时平均错误率约为0.098并且时间约为15秒。
为了检查项目内缺陷预测中的语义特征的性能,使用了采用不同的机器学习分类器的缺陷预测模型,该机器学习分类器包括但不限于ADTree(AD树)、Naive Bayes(朴素贝叶斯)和Logistic Regression(逻辑回归)。为了获取训练代码集和测试代码集、或者数据,使用了图12中列出的每个项目的两个连续版本。较旧版本的源代码被用于对DBN进行训练并生成训练数据。然后,训练后的DBN被用于生成针对较新版本的代码或测试数据的特征。为了公平比较,在这些传统特征上使用相同的分类器。由于缺陷数据经常是不平衡的,这可能影响缺陷预测的准确性。图12中的图表显示,大多数检查项目具有低于50%的错误率并且因此是不平衡的。为了获取最佳缺陷预测模型,对针对语义特征和传统特征这两者的训练数据执行诸如SMOTE等重新采样技术。
用于评估变化级缺陷预测的基线还包括了两个不同的基线。第一基线包括了三种类型的变化特征,即元特征、词袋(bag-of-words)、以及诸如在由Tian Jiang、Lin Tan和Sunghun Kim,ASE 2013,Palo Alto所撰写的、题为“个性化缺陷预测”的文章中所公开的特征向量。更具体地,元特征集包括变化的基本信息,例如提交时间、文件名、开发者等。提交时间是开发者将修改后的代码提交给git的时间。它还包含代码变化度量,例如,每次变化所添加的行数、每次变化所删除的行数等。词袋特征集是变化文本中每个单词出现次数的向量。使用snowBall stemmer来对同一词根的词进行分组,然后我们使用Weka来从提交消息和源代码这两者中获取词袋特征。特征向量考虑代码的抽象语法树(AST)表示中节点类型的计数。Deckard被用于获取特征向量属性。
对于跨项目缺陷预测,由于缺乏缺陷数据,通常很难为新项目构建准确的预测模型,因此跨项目缺陷预测技术被用于通过使用来自成熟项目或被称为源项目的数据来对预测模型进行训练,并且使用训练后的模型来预测新项目或被称为目标项目的缺陷。但是,由于源项目和目标项目这两者的特征通常具有不同的分布,因此进行准确且精确的跨项目缺陷预测仍具有挑战性。
本公开的方法和系统捕获缺陷的共同特征,这意味着从项目训练的语义特征可被用于预测不同项目内的错误,并且适用于跨项目缺陷预测。为了测量跨项目缺陷预测中的语义特征的性能,可以使用被称为DBN跨项目缺陷预测(DBN-CP)的技术。给定源项目(或来自训练代码集的源代码)和目标项目(或来自测试代码集的源代码),DBN-CP首先通过使用源项目来对DBN进行训练,并且针对两个项目来生成语义特征。然后,DBN-CP使用来自源项目的数据来对基于ADTree的缺陷预测模型进行训练,并且然后使用所构建的模型来对目标项目执行缺陷预测。在当前的实验中,TCA+被选择作为基线。为了与TCA+进行比较,随机挑选每个项目的一个或两个版本。总共有11个目标项目,并且对于每个目标项目,我们随机选择两个与所选择出的目标项目不同的源项目,并且由此收集了22个测试对。之所以选择TCA+,是因为它在跨项目缺陷预测方面具有很高的性能。
在TCA+系统的当前生产中,五种归一化方法被实施并且分配有与TCA中给出的条件相同的条件。然后,对源项目和目标项目一起执行传输组件分析并将其映射到同一子空间,同时减少或最小化数据差值并增加或最大化数据方差。然后使用源项目和目标项目来构建并评估基于ADTree的预测模型。
对于变化级缺陷预测,将基于DBN的特征的性能与三种类型的传统特征进行比较。为了公平比较,使用Weka中的ADTree作为分类算法来遵循典型的时间敏感实验过程。通过该实验,发现本公开的方法在自动学习语义特征方面是有效的,这提高了项目内缺陷预测的性能。还发现从DBN自动学习到的语义特征改进了项目内缺陷预测并且改进与特定分类算法无关。还发现本公开的方法改进了跨项目缺陷预测的性能并且通过DBN学习到的语义特征是有效的且能够捕获跨项目的缺陷的共同特征。
在另一实施例中,给定输入数据(例如源代码文件、提交或变化等),如果输入数据被声明为有错误(即包含软件错误或安全漏洞),则本公开的方法可以进一步扫描该预测有错误的实例的源代码以寻找常见的软件错误和漏洞模式。在其声明中,执行检查以确定代码中预测有错误的位置以及它们被视为错误的原因。
为了帮助程序员,本公开的系统可以提供解释生成框架,该解释生成框架将现有的错误模式分组并编码到不同的检查器中,并且进一步使用这些检查器来捕获源代码或测试代码中的所有可能的错误代码点。检查器是错误模式或若干类似错误模式的实现。任何检查器都可使用预测有错误的实例中的缺陷违规来生成解释。
这些通常可归入以下两个定义。定义1:错误模式,错误模式描述了一种可能是错误的代码语法或软件行为,以及定义2:解释检查器,解释检查器是错误模式或类似错误模式集的实现,其可被用于检测所涉及的错误模式的实例。
图16示出了解释生成过程或框架的细节。该框架包括两个组成部分:1)可插入解释检查器框架以及2)检查器匹配过程。
可插入解释检查器框架包括被选择以与预测有错误的实例相匹配的检查器集合。通常,现有的常见错误模式集包含200多种不同的模式,用于检测不同类型的软件错误。在当前实施例中,可插入解释检查器框架包括五个检查器(即,NullChecker、ComparisonChecker、CollectionChecker、ConcurrencyChecker和ResourceChecker)的核心集以生成解释,该核心集覆盖超过50%的现有常见错误模式。如将理解的,检查器框架可包括任何数目的检查器。
在使用中,NullChecker优选包含用于检测空点异常错误的错误模式列表,例如,如果方法的返回值为null(空),并且该方法的返回值被用作不接受null作为输入的另一方法调用的参数。在执行该代码时,这可能会导致Null-PointerException(空指针异常)。
ComparisonChecker包含用于对在比较两个对象、变量等期间发生的错误进行检测的错误模式列表。例如,在比较两个对象时,程序员优选使用equals方法而非==。
CollectionChecker包含用于对与Collection(例如,ArrayList、List、Map等)的使用相关的错误进行检测的错误模式集。例如,如果数组的索引超出其界限,则将会出现ArrayIndexOutOfBoundsException(数组越界异常)。
ConcurrencyChecker具有用于检测并发错误的错误模式集,例如,如果lock()方法与unlock()方法之间存在不匹配,就会出现死锁错误。
ResourceChecker具有用于对资源泄漏相关错误进行检测的错误模式列表。例如,如果程序员或开发人员没有关闭类InputStream(输入流)的对象,就会出现内存泄漏错误。
除了上面列出的五种解释检查器之外,程序员还可以根据他们的要求来配置其他检查器。
设置解释检查器之后,下一步是将预测有错误的实例与这些检查器进行匹配。在图16中,第2部分(也被视为检查器匹配)示出了匹配过程。在一个实施例中,系统使用这些检查器来扫描预测有错误的代码片段。如果关于有错误的代码片段向检查器报告了任何违规,则确定有错误的代码片段与检查器之间存在匹配。
在一个实施例中,解释检查器框架的输出是匹配的检查器以及在给定的预测有错误实例上向这些检查器报告的违规。例如,给定源代码文件或者变化,如果本公开的系统将其预测为有错误(即,包含软件错误或安全漏洞),则该技术将使用解释检查器来进一步扫描该预测有错误实例的源代码。如果检查器检测到违规,则该检查器中的规则以及由该检查器在该有错误实例上检测到的违规将被报告给程序员作为预测有错误实例的说明。
在另一实施例中,本公开的方法和系统可以包括基于ADTree的解释生成器,该解释生成器用于具有传统源代码度量的一般缺陷预测模型。更具体地,使用具有一般传统源代码度量的历史数据来生成或构建决策树(ADTree)分类器模型。ADTree分类器为每个度量分配权重,并且将一个变化的所有度量的权重相加。例如,如果一个变化包含函数调用序列,即A->B->C,那么它可以根据ADTree模型来接收0.1的权重。如果权重之和超过阈值,则输入数据(即,源代码文件、提交或变化)被预测为有错误。本公开可以使用具有高权重的度量来解释预测有错误的实例。此外,为了更好地呈现所生成的解释的置信度,该方法还示出了来自ADTree模型的X-out-of-Y数目。X-out-of-Y表示训练数据中的Y个变化满足了特定规则,并且该Y个变化中的X个变化包含真正的错误。
例如,如果变化被预测为有错误,则所生成的可能原因是:1)该变化包含1个或更少个for,或2)该变化包含两个或更多个lock。
在又一实施例中,可以使用新的错误模式来改进当前预测性能和根本原因生成。新错误模式的示例可以包括但并不限于WrongIncrementerChecker、RedundantExceptionChecker、IncorrectMapIteratorChecker、IncorrectDirectorySlashChecker和EqualtoSameExpression模式。
WrongIncrementerChecker也可被视为索引指示器的错误使用。由于程序员在循环语句中使用不同的变量来初始化循环索引并访问集合类(例如List、Set、ArrayList等)的实例来修复由该模式检测到的错误,所以程序员可以使用正确的索引指示器。
在另一个示例中,RedundantExceptionChecker可以被定义为try块之外的不正确的类实例。程序员可以实例化类的对象,该对象可以在try块之外抛出异常。为了修复由该模式检测到的错误,程序员可以将实例移动到try块中。
IncorrectmapItertatorChecker可以被定义为针对Map迭代的方法调用的错误使用。程序员可以通过调用方法values()而不是方法entrySet()来迭代Map实例化。为了修复由该模式检测到的错误,程序员应使用正确的方法entrySet()来迭代Map。
IncorrectDierctorySlashChecker可以被定义为错误地处理不同的dir路径(带有或不带有结尾斜杠,即“/”)。程序员可以通过组合参数和常量字符串来创建带有路径的目录,而参数可以以“\/”结束。这会导致创建意外的文件。为了修复由该模式检测到的错误,程序员应过滤掉参数中不需要的“/”。
最后,EqualToSameExpression可被视为将来自相同方法调用的对象或值与“equals”或“==”进行比较。在该示例中,程序员比较相同的方法调用和运算对象。这会导致逻辑问题而出现意外错误。为了修复由该模式检测到的错误,程序员应对一个运算对象使用正确且不同的方法调用。
注意,安全漏洞预测的标记过程不同于缺陷预测。为了标记安全漏洞数据,收集了美国国家漏洞数据库(NVD)中记录的漏洞。具体而言,收集了NVD中记录的项目的漏洞报告的所有来源。通常,漏洞报告包含在BTS中记录的错误报告。将CVE链接到错误报告之后,可以对安全漏洞数据进行标记。
尽管已经在本公开中提供了若干实施例,但是应当理解,所公开的系统和方法可以在不脱离本公开的范围的情况下以许多其他特定的形式实施。本示例被认为是说明性的而非限制性的,并且旨在不限于本文所给出的细节。例如,各种元件或组件可以组合或集成在另一系统中,或者可以省略或不实现某些特征。
另外,在不脱离本公开的范围的情况下,在各个实施例中描述和示出为离散或分离的技术、系统、子系统和方法可以与其他的系统、模块、技术或方法组合或集成。被示出或讨论为耦接或直接耦接或彼此通信的其他项目可以通过电气、机械或其他方式间接耦接或通过某些接口、设备或中间组件进行通信。本领域技术人员可以确定变化、替换和修改的其他示例,并且可以在不脱离本文公开的一个或多个发明构思的情况下进行变化、替换和改变。

Claims (13)

1.一种识别软件缺陷和漏洞的方法,包括:
基于由程序员产生的训练代码集来生成深度置信网络DBN;以及
相对于所述DBN来评估测试代码集的性能,
其中,所述训练代码集与所述测试代码集不同,
其中,生成DBN包括:
从所述训练代码集和所述测试代码集中获取令牌;以及
基于来自所述训练代码集的所述令牌来构建DBN,
其中构建DBN进一步包括:
构建整型向量与所述令牌之间的映射;
将来自所述训练代码集的令牌向量转换为训练代码整型向量;以及
经由所述训练代码整型向量来实现所述DBN,并且
其中评估性能包括:
将来自所述测试代码集的令牌向量转换为测试代码整型向量;
使用所述训练代码整型向量和所述测试代码整型向量来生成语义特征;
基于所述语义特征、根据所述训练代码集来构建预测模型;以及
相对于所述语义特征和所述预测模型来评估所述测试代码集的性能。
2.根据权利要求1所述的方法,其中获取令牌包括:
从所述训练代码集中提取句法信息。
3.根据权利要求2所述的方法,其中提取句法信息包括:
从所述训练代码集中提取抽象语法树AST节点作为令牌。
4.根据权利要求1所述的方法,其中生成DBN包括对所述DBN进行训练。
5.根据权利要求4所述的方法,其中对所述DBN进行训练包括:
将每层中的节点数设置为相等;
重构所述训练代码集;以及
将数据向量归一化。
6.根据权利要求5所述的方法,进一步包括在设置所述节点之前:
对预定参数集进行训练。
7.根据权利要求6所述的方法,其中所述参数中的一个参数是隐藏层中的节点数。
8.根据权利要求1所述的方法,其中整型向量与所述令牌之间的映射包括:
执行编辑距离函数;
移除具有不正确标签的数据;
过滤掉不常见的节点;以及
收集错误变化。
9.根据权利要求1所述的方法,进一步包括显示关于软件缺陷和漏洞的报告。
10.根据权利要求9的方法,其中显示关于软件缺陷和漏洞的报告包括:
生成解释检查器框架;以及
执行检查器匹配过程。
11.根据权利要求10所述的方法,其中生成解释检查器框架包括:
选择检查器集合;以及
配置所述检查器集合。
12.根据权利要求11所述的方法,其中执行检查器匹配过程包括:
将确定的软件缺陷和漏洞与所述检查器集合中的一个检查器相匹配;
显示匹配的检查器;以及
报告软件缺陷和漏洞。
13.根据权利要求11的方法,其中所述检查器集合包括:
WrongIncrementerChecker、RedundantExceptionChecker、IncorrectMapIteratorChecker、IncorrectDirectorySlashChecker、及EqualToSameExpressionChecker。
CN202410098789.2A 2016-04-22 2017-04-21 用于确定软件代码中的缺陷和漏洞的方法 Pending CN117951701A (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201662391166P 2016-04-22 2016-04-22
US62/391,166 2016-04-22
PCT/CA2017/050493 WO2017181286A1 (en) 2016-04-22 2017-04-21 Method for determining defects and vulnerabilities in software code
CN201780038210.1A CN109416719A (zh) 2016-04-22 2017-04-21 用于确定软件代码中的缺陷和漏洞的方法

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201780038210.1A Division CN109416719A (zh) 2016-04-22 2017-04-21 用于确定软件代码中的缺陷和漏洞的方法

Publications (1)

Publication Number Publication Date
CN117951701A true CN117951701A (zh) 2024-04-30

Family

ID=60115521

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202410098789.2A Pending CN117951701A (zh) 2016-04-22 2017-04-21 用于确定软件代码中的缺陷和漏洞的方法
CN201780038210.1A Pending CN109416719A (zh) 2016-04-22 2017-04-21 用于确定软件代码中的缺陷和漏洞的方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201780038210.1A Pending CN109416719A (zh) 2016-04-22 2017-04-21 用于确定软件代码中的缺陷和漏洞的方法

Country Status (4)

Country Link
US (1) US20190138731A1 (zh)
CN (2) CN117951701A (zh)
CA (1) CA3060085A1 (zh)
WO (1) WO2017181286A1 (zh)

Families Citing this family (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108459955B (zh) * 2017-09-29 2020-12-22 重庆大学 基于深度自编码网络的软件缺陷预测方法
CN108040073A (zh) * 2018-01-23 2018-05-15 杭州电子科技大学 信息物理交通系统中基于深度学习的恶意攻击检测方法
CN108446214B (zh) * 2018-01-31 2021-02-05 浙江理工大学 基于dbn的测试用例进化生成方法
US11416622B2 (en) 2018-08-20 2022-08-16 Veracode, Inc. Open source vulnerability prediction with machine learning ensemble
US10733075B2 (en) * 2018-08-22 2020-08-04 Fujitsu Limited Data-driven synthesis of fix patterns
US11520900B2 (en) * 2018-08-22 2022-12-06 Arizona Board Of Regents On Behalf Of Arizona State University Systems and methods for a text mining approach for predicting exploitation of vulnerabilities
US10929268B2 (en) * 2018-09-26 2021-02-23 Accenture Global Solutions Limited Learning based metrics prediction for software development
CN109783361A (zh) * 2018-12-14 2019-05-21 平安壹钱包电子商务有限公司 确定代码质量的方法和装置
CN111338692B (zh) * 2018-12-18 2024-04-16 北京奇虎科技有限公司 基于漏洞代码的漏洞分类方法、装置及电子设备
CN111611586B (zh) * 2019-02-25 2023-03-31 上海信息安全工程技术研究中心 基于图卷积网络的软件漏洞检测方法及装置
CN110349120A (zh) * 2019-05-31 2019-10-18 湖北工业大学 太阳能电池片表面缺陷检测方法
US11620389B2 (en) * 2019-06-24 2023-04-04 University Of Maryland Baltimore County Method and system for reducing false positives in static source code analysis reports using machine learning and classification techniques
CN110286891B (zh) * 2019-06-25 2020-09-29 中国科学院软件研究所 一种基于代码属性张量的程序源代码编码方法
CN110349477B (zh) * 2019-07-16 2022-01-07 长沙酷得网络科技有限公司 一种基于历史学习行为的编程错误修复方法、系统及服务器
CN110442523B (zh) * 2019-08-06 2023-08-29 山东浪潮科学研究院有限公司 一种跨项目软件缺陷预测方法
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
US11144429B2 (en) * 2019-08-26 2021-10-12 International Business Machines Corporation Detecting and predicting application performance
CN110579709B (zh) * 2019-08-30 2021-04-13 西南交通大学 一种有轨电车用质子交换膜燃料电池故障诊断方法
CN110751186B (zh) * 2019-09-26 2022-04-08 北京航空航天大学 一种基于监督式表示学习的跨项目软件缺陷预测方法
US11948118B1 (en) * 2019-10-15 2024-04-02 Devfactory Innovations Fz-Llc Codebase insight generation and commit attribution, analysis, and visualization technology
CN111143220B (zh) * 2019-12-27 2024-02-27 中国银行股份有限公司 一种软件测试的训练系统及方法
CN111367798B (zh) * 2020-02-28 2021-05-28 南京大学 一种持续集成及部署结果的优化预测方法
CN111367801A (zh) * 2020-02-29 2020-07-03 杭州电子科技大学 一种面向跨公司软件缺陷预测的数据变换方法
CN113360364B (zh) * 2020-03-04 2024-04-19 腾讯科技(深圳)有限公司 目标对象的测试方法及装置
CN111427775B (zh) * 2020-03-12 2023-05-02 扬州大学 一种基于Bert模型的方法层次缺陷定位方法
CN111400180B (zh) * 2020-03-13 2023-03-10 上海海事大学 一种基于特征集划分和集成学习的软件缺陷预测方法
US11768945B2 (en) * 2020-04-07 2023-09-26 Allstate Insurance Company Machine learning system for determining a security vulnerability in computer software
CN111753303B (zh) * 2020-07-29 2023-02-07 哈尔滨工业大学 一种基于深度学习和强化学习的多粒度代码漏洞检测方法
CN111949535B (zh) * 2020-08-13 2022-12-02 西安电子科技大学 基于开源社区知识的软件缺陷预测装置及方法
US11775414B2 (en) * 2020-09-17 2023-10-03 RAM Laboratories, Inc. Automated bug fixing using deep learning
CN112199280B (zh) * 2020-09-30 2022-05-20 三维通信股份有限公司 软件的缺陷预测方法和装置、存储介质和电子装置
US11106801B1 (en) * 2020-11-13 2021-08-31 Accenture Global Solutions Limited Utilizing orchestration and augmented vulnerability triage for software security testing
CN112597038B (zh) * 2020-12-28 2023-12-08 中国航天系统科学与工程研究院 软件缺陷预测方法及系统
CN112905468A (zh) * 2021-02-20 2021-06-04 华南理工大学 基于集成学习的软件缺陷预测方法、存储介质和计算设备
CN112579477A (zh) * 2021-02-26 2021-03-30 北京北大软件工程股份有限公司 一种缺陷检测方法、装置以及存储介质
US11609759B2 (en) * 2021-03-04 2023-03-21 Oracle International Corporation Language agnostic code classification
CN113326187B (zh) * 2021-05-25 2023-11-24 扬州大学 数据驱动的内存泄漏智能化检测方法及系统
CN113434418A (zh) * 2021-06-29 2021-09-24 扬州大学 知识驱动的软件缺陷检测与分析方法及系统
CN117616439A (zh) * 2021-07-06 2024-02-27 华为技术有限公司 用于检测软件漏洞修复的系统和方法
CN113946826A (zh) * 2021-09-10 2022-01-18 国网山东省电力公司信息通信公司 一种漏洞指纹静默分析监测的方法、系统、设备和介质
CN113835739B (zh) * 2021-09-18 2023-09-26 北京航空航天大学 一种软件缺陷修复时间的智能化预测方法
CN114064472B (zh) * 2021-11-12 2024-04-09 天津大学 基于代码表示的软件缺陷自动修复加速方法
CN114219146A (zh) * 2021-12-13 2022-03-22 广西电网有限责任公司北海供电局 一种电力调度故障处理操作量预测方法
CN114707154B (zh) * 2022-04-06 2022-11-25 广东技术师范大学 一种基于序列模型的智能合约可重入漏洞检测方法及系统
CN115454855B (zh) * 2022-09-16 2024-02-09 中国电信股份有限公司 代码缺陷报告审计方法、装置、电子设备及存储介质
CN115455438B (zh) * 2022-11-09 2023-02-07 南昌航空大学 一种程序切片漏洞检测方法、系统、计算机及存储介质
CN115983719B (zh) * 2023-03-16 2023-07-21 中国船舶集团有限公司第七一九研究所 一种软件综合质量评价模型的训练方法及系统

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102141956B (zh) * 2010-01-29 2015-02-11 国际商业机器公司 用于开发中的安全漏洞响应管理的方法和系统
CN102411687B (zh) * 2011-11-22 2014-04-23 华北电力大学 未知恶意代码的深度学习检测方法
EP3155758A4 (en) * 2014-06-10 2018-04-11 Sightline Innovation Inc. System and method for network based application development and implementation
CN104809069A (zh) * 2015-05-11 2015-07-29 中国电力科学研究院 一种基于集成神经网络的源代码漏洞检测方法
CN105205396A (zh) * 2015-10-15 2015-12-30 上海交通大学 一种基于深度学习的安卓恶意代码检测系统及其方法

Also Published As

Publication number Publication date
CN109416719A (zh) 2019-03-01
CA3060085A1 (en) 2017-10-26
US20190138731A1 (en) 2019-05-09
WO2017181286A1 (en) 2017-10-26

Similar Documents

Publication Publication Date Title
CN117951701A (zh) 用于确定软件代码中的缺陷和漏洞的方法
Russell et al. Automated vulnerability detection in source code using deep representation learning
Harer et al. Automated software vulnerability detection with machine learning
CN109426722B (zh) Sql注入缺陷检测方法、系统、设备及存储介质
CN111259394B (zh) 一种基于图神经网络的细粒度源代码漏洞检测方法
Saccente et al. Project achilles: A prototype tool for static method-level vulnerability detection of Java source code using a recurrent neural network
CN116305158A (zh) 一种基于切片代码依赖图语义学习的漏洞识别方法
Wu et al. A survey of constrained combinatorial testing
Rabin et al. Syntax-guided program reduction for understanding neural code intelligence models
CN116383833A (zh) 软件程序代码的测试方法及其装置、电子设备、存储介质
CN116578980A (zh) 基于神经网络的代码分析方法及其装置、电子设备
CN114969755A (zh) 一种跨语言的未知可执行程序二进制漏洞分析方法
CN116702160B (zh) 一种基于数据依赖增强程序切片的源代码漏洞检测方法
CN116702157B (zh) 一种基于神经网络的智能合约漏洞检测方法
Ngo et al. Ranking warnings of static analysis tools using representation learning
Lee et al. A multi-reasoner, justification-based approach to reasoner correctness
Juliet Thessalonica et al. Intelligent mining of association rules based on nanopatterns for code smells detection
CN116361806A (zh) 基于多示例和注意力机制的智能合约分析方法及装置
Zhou et al. Deeptle: Learning code-level features to predict code performance before it runs
CN112464237B (zh) 一种静态代码安全诊断方法及装置
Fan et al. High-frequency keywords to predict defects for android applications
Chauhan et al. Vulnerability Detection in Source Code using Deep Representation Learning
Zakurdaeva et al. Detecting architectural integrity violation patterns using machine learning
Srivastava et al. Software Vulnerabilities Detection in Agile Process using graph method and Deep Neural Network
Tian et al. Ethereum Smart Contract Representation Learning for Robust Bytecode-Level Similarity 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