一种基于深度神经网络的Python资源敏感缺陷代码检测方法转让专利

申请号 : CN201610915633.4

文献号 : CN107967208B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈林潘陶陈芝菲李言辉徐宝文

申请人 : 南京大学

摘要 :

本发明为一种基于深度神经网络的Python资源敏感缺陷代码检测方法,包括下列步骤:1)获取同一软件的历史版本的源代码和待测版本的源代码;2)利用类型推断抽取各版本的资源敏感代码模式;3)抽取资源敏感代码模式的相关特征;4)计算缺陷代码模式和安全代码模式、缺陷代码模式和待测代码模式之间的各个特征相似度,生成特征向量,并得到训练集和测试集;5)用训练集训练深度神经网络模型进行特征合并,然后对测试集中的模式对用深度神经网络模型计算相关度并排序;6)在程序开发和维护阶段,根据相关度排序结果对可能发生错误的资源对象操作进行提醒,辅助开发和维护;本发明解决了目前存在缺乏针对Python语言资源敏感代码识别和缺陷代码检测的自动化方法等问题,进而降低软件风险,提高软件质量,从而提高开发者和维护者开发和维护软件的效率。

权利要求 :

1.一种基于深度神经网络的Python资源敏感缺陷代码检测方法,其特征在于,从软件版本控制系统,收集同一个Python软件的历史版本和待测版本;对于历史版本,接着通过类型推断识别出资源敏感代码模式,并提取对应的模式特征,根据历史修复信息将上述缺陷代码模式和安全代码模式组成相关模式对和非相关模式对,并计算特征相似度生成特征向量,得到训练集;对于待测版本,使用相同的方法提取不同模式和相应特征,将历史版本缺陷代码模式和待测版本模式组成模式对,并计算特征相似度生成特征向量,得到测试集;然后,使用训练集训练深度神经网络模型,将训练好的深度神经网络模型对测试集进行特征合并,得到待测代码与缺陷代码之间的相关度;最后,根据相关度进行排序,选择前k个相关的代码对作为结果,将代码对中的待测代码标注为有潜在缺陷的资源敏感代码,检测出危险资源对象操作,并提供辅助信息;该方法包括下列步骤:

1)获取同一软件的历史版本的源代码和待测版本的源代码;软件版本控制系统中保存了软件的所有版本提交,并标准化了版本号;可以根据制定的版本号,获取同一Python软件的历史版本和待测版本源代码;

2)利用类型推断抽取各版本的资源敏感代码模式;对步骤1中已经收集好的历史版本和待测版本源代码进行词法和语法分析,利用Python标准库中的ast模块生成对应的抽象语法树,将Python类型进行抽象化,并对每个节点设置type和value,再使用全局类型推断的方法,抽取资源敏感代码模式;

资源敏感代码模式,资源敏感代码模式是指对资源对象进行操作的代码片段;

定义1:Python标准库随Python语言一起发行,包含了提供各种系统级功能的内建模块;

定义2:类型推断是一种通过对源代码进行静态分析,推断动态语言中变量类型的方法;

定义3:type用于标识抽象语法树中的节点类型信息,type的具体取值来自Python定义的抽象语法;

定义4:value是抽象语法树中的节点内容的文本表示;

3)抽取资源敏感代码模式的相关特征;通过步骤2,我们已从源代码中抽取了资源敏感代码模式;本方法抽取的资源敏感代码模式的相关特征为:API(参数类型,参数顺序)、资源名、调用结构和函数结构;最后,将抽取的特征命名规范化;

定义1:对于API特征,使用参数类型和参数顺序计算特征相似度;

定义2:对于资源名特征,使用资源名中的词序列计算特征相似度;

定义3:对于调用结构特征,使用调用结构相似度作为特征相似度;

定义4:对于函数结构特征,使用函数结构特征作为特征相似度;

4)计算缺陷代码模式和安全代码模式、缺陷代码模式和待测代码模式之间的各个特征相似度,生成特征向量,并得到训练集和测试集;对于历史版本,根据历史修复信息将相似的缺陷代码模式两两配对,组成相关模式对;将缺陷代码模式和与其相似的安全代码模式两两配对,组成非相关模式对;对于待测版本,将缺陷代码模式和待测代码模式两两配对,组成待测模式对;然后,根据步骤3抽取的各个特征信息,计算不同模式对的各个特征相似度,并生成特征向量;最后,由历史版本的代码模式对组成的特征向量集得到训练集,由待测版本的代码模式对组成的特征向量集得到测试集;

定义1:缺陷代码模式是指历史修复信息中随后被修复的资源敏感缺陷代码模式;

定义2:安全代码模式是指与缺陷代码模式相似但是没有发现缺陷的资源敏感代码模式;

定义3:API的特征相似度采用VSM算法,其中对于参数类型,采用TF-IDF的算法计算权重,公式如下所示:其中TF为该类型出现在API中的频数,Totalapi为API总数,Containtype为包含该类型的API数量;本方法采用上述方法作为API组成的特征向量的权重,同时,对于类型顺序采用2-Grams进行度量,该方法对于类型顺序的改变具有鲁棒性,将类型顺序和参数类型的度量组成一个特征向量;对于两个版本的生成的特征向量,采用VSM算法计算相似度;在该方法中,历史版本特征向量a和待测版本特征向量b之间的余弦距离来表示相似度,公式如下:其中, 和 分别表示历史版本特征向量a和待测版本特征向量b, 表示两个特征向量的内积;

定义4:资源名的特征相似度采用文本相似度算法;首先,将资源名解析成由一序列词组合而成的形式;接下来,对于历史版本中的资源名和待测版本中的资源名,计算公式如下:其中,lcs(R1 R2)表示R1中所有的子词在R2中的出现的个数,从而可以得到资源名的量化值,生成相关的向量;

定义5:VSM算法为空间向量模型,是计算相似度的一种算法;

5)用训练集训练深度神经网络模型进行特征合并,然后对测试集中的模式对用深度神经网络模型计算相关度并排序;使用步骤2)生成的训练集合训练深度神经网络模型,然后将步骤2)生成的测试集合使用训练好的深度神经网络模型进行特征合并,并计算相关度;

最后将缺陷代码模式和待测代码模式间的相关度值按照从大到小进行排序,并选取k个代码对作为输出结果;

6)在程序开发和维护阶段,根据相关度排序结果对可能发生错误的资源对象操作进行提醒,辅助开发和维护;根据得到的相关度很大的待测资源敏感代码,提醒开发和维护人员出现的位置和与此相关的历史资源操作,并给出之前对此资源的异常处理方案,并发出警告;对于已经检测过的Python源代码作为历史版本数据用于下一次检测,以此提高检测准确率;对于刚提交的Python源代码,自动进行检测,并根据结果向开发和维护人员发出告警。

说明书 :

一种基于深度神经网络的Python资源敏感缺陷代码检测方法

技术领域

[0001] 本发明属于计算机技术领域,尤其是软件技术领域,且特别是有关于一种基于深度神经网络的Python资源敏感代码缺陷代码检测方法。

背景技术

[0002] 随着软件应用技术的不断发展,用户对软件质量的要求越来越高,软件开发者也在通过各种技术满足用户的需求。资源敏感代码是一个处理资源对象的代码块或者语句。在软件的开发和维护阶段,很多资源敏感代码都存在异常隐患,往往在维护过程中才有可能被发现。随着敏捷开发技术的不断流行,版本更替频繁,导致资源敏感代码突然引发异常的情况时时发生。对于资源敏感代码异常处理最传统的解决方法是:使用try-except关键字进行捕获和处理。然而,开发者在开发阶段,往往忽视异常处理,从而导致程序出现突发性异常,导致应用崩溃。因而对资源对象危险操作的识别与检测是程序开发和维护阶段必不可少的步骤,它可以有效地提高程序质量,帮助开发和维护人员及时发现程序问题,从而制定更有效的解决方案。
[0003] 目前,Python已经成为开发者十分青睐的编程语言。现在,各大开源社区Python应用不断涌现,形成了一个庞大的生态系统。Python是一种面向对象的、解释型程序语言,具有简洁、优雅、实用的特征。作为一种动态语言,Python更多地应用于设计互联网应用、图形用户界面和脚本植入等方面,从而涉及各种类型的资源。由于Python语言的动态语言特性,开发者往往动态改变变量类型,导致不安全操作众多。另一方面,Python在对资源对象进行操作时,常常由于资源配置等原因出现各种异常,而这种资源敏感操作产生的问题不容易被发现。目前,开发者采用条件检测、异常处理等方式来控制这些代码缺陷。
[0004] 现阶段,识别和检测资源对象的方法大致可以分为两类。一类是基于程序分析数据的方法,它可以根据逻辑和语义分析定位资源对象危险操作。与之相反,另一类是使用信息检索的方法,借助于机器学习的方式识别资源对象和检测缺陷代码。第一种方法基于语义分析,可以很快的产生结果,但是具有准确率低、语义规则难以定义等问题。而第二种方法,通过上下文等方式抽取特征,然后利用机器学习的方式进行学习和预测,虽然产生结果较慢,但具有准确率高、实用性强等特点。本发明就是采用机器学习的方式进行检测。
[0005] 在维护阶段,开发者每次提交可能会同时修复多处相同的缺陷,从而同一版本的缺陷代码具有很强的相关性。本发明根据历史修复信息分辨出缺陷代码和安全代码,且利用缺陷代码之间的相关性,推测同历史缺陷代码相似的代码也很有可能存在缺陷,进一步提供了一种基于深度神经网络的Python资源敏感缺陷代码检测方法。

发明内容

[0006] 本发明提供了一种基于深度神经网络的Python资源敏感缺陷代码检测方法。本方法通过挖掘和比较历史版本中被修复的缺陷代码,找出待测代码中与其相似的代码,提醒开发者和维护者注意可能存在相同的问题,以便尽早修复。该方法从软件版本控制系统中收集同一个Python软件的历史版本和待测版本;对于历史版本,接着通过类型推断识别出资源敏感代码模式,并提取对应的模式特征,根据历史修复信息将上述缺陷代码模式和安全代码模式组成相关模式对和非相关模式对,并计算特征相似度生成特征向量,得到训练集;对于待测版本,使用相同的方法提取不同模式和相应特征,将历史版本缺陷代码模式和待测版本模式组成模式对,并计算特征相似度生成特征向量,得到测试集。然后,使用训练集训练深度神经网络模型,将训练好的深度神经网络模型对测试集进行特征合并,得到待测代码与缺陷代码之间的相关度。最后,根据相关度进行排序,识别出待测代码中与历史版本被修复的资源敏感代码非常相似的潜在危险代码,从而对程序开发者和维护者提出建议,防止异常的产生。本发明旨在解决目前存在缺乏针对Python语言资源敏感代码识别和缺陷代码检测的自动化方法等问题,进而降低软件风险,提高软件质量,从而提高开发者开发软件的效率。
[0007] 为达成上述目的,本发明提出一种基于深度神经网络的Python资源敏感缺陷代码检测方法方法包括下列步骤:
[0008] 1)获取同一软件的历史版本的源代码和待测版本的源代码;
[0009] 2)利用类型推断抽取各版本的资源敏感代码模式;
[0010] 3)抽取资源敏感代码模式的相关特征;
[0011] 4)计算缺陷代码模式和安全代码模式、缺陷代码模式和待测代码模式之间的各个特征相似度,生成特征向量,并得到训练集和测试集;
[0012] 5)用训练集训练深度神经网络模型进行特征合并,然后对测试集中的模式对用深度神经网络模型计算相关度并排序;
[0013] 6)在程序开发和维护阶段,根据相关度排序结果对可能发生错误的资源对象操作进行提醒,辅助开发和维护。
[0014] 进一步,其中上述步骤1)的具体步骤如下:
[0015] 步骤1)-1:起始状态;
[0016] 步骤1)-2:根据文件名和版本信息,从开源版本控制系统获取同一软件的历史版本中被修复的源程序和待测版本的源程序;
[0017] 步骤1)-3:软件不同版本源程序采集完毕。
[0018] 进一步,其中上述步骤2)的具体步骤如下:
[0019] 步骤2)-1:起始状态;
[0020] 步骤2)-2:分别对各版本的源程序进行词法分析和语法分析,使用Python标准库中的ast模块生成各版本对应的抽象语法树;
[0021] 步骤2)-3:根据Python标准库中定义的抽象语法,封装Python的每个类型,每个类型有一个映射表table,包含该类型的内部属性名或者API接口名。
[0022] 步骤2)-4:遍历抽象语法树,并根据封装的类型和模块,推断每个变量的可能类型。抽取出资源对象类型的变量。
[0023] 步骤2)-5:对于未识别类型,如果该变量是一个接口名,且其参数中有资源对象类型,则识别为资源对象类型,如果不是,则如果该变量为其他变量成员;若调用变量为资源对象类型,也标识为资源对象类型。
[0024] 步骤2)-6:将调用资源对象类型变量的代码片段作为敏感资源代码模式。
[0025] 步骤2)-8:资源敏感代码模式信息收集完毕。
[0026] 进一步,其中上述步骤3)的具体步骤如下:
[0027] 步骤3)-1:起始状态;
[0028] 步骤3)-2:根据资源代码模式信息,定位资源对象操作位置,提取API(参数类型,参数顺序)、资源名、调用结构和函数内部结构等作为特征。
[0029] 步骤3)-3:将API(参数类型,数量)、资源名、调用结构和函数结构统一化命名。
[0030] 步骤3)-4:资源代码模式特征信息抽取完毕。
[0031] 进一步,其中上述步骤4)的具体步骤如下:
[0032] 步骤4)-1:起始状态;
[0033] 步骤4)-2:将识别出的资源敏感代码模式分为三类,分别为缺陷代码模式、安全代码模式和待测代码模式;
[0034] 步骤4)-3:对于历史版本,根据历史修复信息将相似的缺陷代码模式两两配对,组成相关模式对;将缺陷代码模式和与其相似的安全代码模式两两配对,组成非相关模式对;
[0035] 步骤4)-4:对于待测版本,将缺陷代码模式和待测代码模式两两配对,组成待测模式对;
[0036] 步骤4)-5:计算不同模式对的各个特征相似度,并生成特征向量;
[0037] 步骤4)-6:由历史版本的代码模式对组成的特征向量集得到训练集,由待测版本的代码模式对组成的特征向量集得到测试集;
[0038] 步骤4)-7:训练集合测试集信息收集完毕;
[0039] 进一步,其中上述步骤5)的具体步骤如下:
[0040] 步骤5)-1:起始状态;
[0041] 步骤5)-2:用步骤4)中生成的训练集相似度数据训练深度神经网络,得到模型的各参数值;
[0042] 步骤5)-3:将步骤4)中生成的测试集作为输入,通过已训练好的深度神经网络模型,得到相关度值;
[0043] 步骤5)-4:根据计算出来的相关度值,将所有代码对间的相关度从大到小进行排序,取前k个测试模式对作为资源敏感代码检测结果,把其中的待测版本代码标注为可能的资源敏感缺陷代码。
[0044] 步骤5)-5:可能的资源敏感缺陷代码标注完毕。
[0045] 进一步,其中上述步骤6)的具体步骤如下:
[0046] 步骤6)-1:起始状态;
[0047] 步骤6)-2:对于标注为敏感资源的代码,提示开发和维护人员与此相关的历史版本中出现的位置,建议令其进行修改,并给出一种修复方案。
[0048] 步骤6)-3:在程序开发和维护阶段,系统自动对提交代码进行检测,对于存在潜在危险资源的操作,给出警告。
[0049] 步骤6)-4:将新提交的版本程序作为历史版本数据,用于下一次比对,使得检测结果更加精准。
[0050] 步骤6)-5:待测代码中的资源敏感缺陷代码提示完毕。
[0051] 本发明基于深度神经网络进行特征合并,采用一个标准的度量值来衡量待测代码和历史版本中的缺陷代码之间的相关度水平,从而可以定位到资源敏感缺陷代码块,深入到基本语句层级。在根据类型推断识别出资源敏感代码后,根据与其相似的历史版本中解决方案,进行自动修复并提示开发者和维护者。通过上述方法,识别出了资源敏感代码及其危险操作,提高了软件开发的效率,有益于开发出高质量的软件应用产品。

附图说明

[0052] 图1为本发明实施例的一种基于深度神经网络的Python资源敏感缺陷代码检测方法的总体架构图。
[0053] 图2为本发明实施例的一种基于深度神经网络的Python资源敏感缺陷代码检测方法的流程图。
[0054] 图3为一个循环控制结构可能的抽象语法树示意图。

具体实施方式

[0055] 本发明方法首先通过CVS等软件版本控制系统,收集了同一个Python软件的所有历史版本被修复的源代码。接着对历史版本和待测版本的源代码进行词法分析和语法分析,根据生成的抽象语法树,进行类型推断,标注出资源对象操作的变量,识别出资源代码模式,并且根据历史修复信息从历史各版本的资源敏感代码模式中挑选出缺陷代码模式和安全代码模式,组成相关模式对和非相关模式对。接着,将待测版本资源敏感代码模式和历史缺陷代码模式组成测试模式对。然后,根据提取的模式特征,计算每个模式对各个特征的相似度,并生成特征向量,得到相应的训练集和测试集。然后,使用上述训练集训练深度神经网络模型,将训练好的深度神经网络模型对测试集进行特征合并,得到待测代码模式与历史缺陷代码模式之间相应的相关度。最后,根据相关度进行排序,选择前k个相关的模式对作为结果,将代码对中的待测代码标注为敏感有潜在缺陷的资源敏感代码,以此在程序开发和维护过程中辅助开发和维护人员进行开发和维护,杜绝异常发生。
[0056] 为了更好地说明本发明的技术内容,特配合所附图示作如下说明。
[0057] 本发明的总体架构图如图1所示,流程图如图2所示。本发明提出的一种基于深度神经网络的Python资源敏感缺陷代码检测方法,包括下列6个步骤:
[0058] 步骤1:获取同一软件历史版本被修复的源代码和待测版本程序的源代码。CVS等软件版本控制系统中保存了该程序的所有版本,并标注了版本号。可以根据制定的版本号,获取同一Python软件的历史版本和待测版本源代码。
[0059] 步骤2:使用类型推断方式抽取各版本程序源代码的资源代码模式。首先,先对步骤1中获取的各版本的源代码进行词法分析和语法分析,利用Python标准库中的ast模块相应函数生成抽象语法树。在抽象语法树中,每一个树中节点和子树都对应一个源代码实体。为了更好地进行类型推断,我们根据Python定义的类型,封装了若干个抽象类型Types。每个Types中有一个table属性,表示与当前类型属性或者调用相关的抽象语法树中的名称,如append;对于抽象语法树中的每个节点,我们设置了type和value,同时设置了节点的唯一标识符id。对于每个树中节点,t(x)表示节点的type,即节点的类型,如赋值语句。v(x)表示节点的value,是该节点的文本表示,如该赋值语句的具体内容。Id(x)表示节点的唯一标识符,用来区分节点。
[0060] 例如:赋值语句是一个简单的语句,对应于抽象语法树中的一个叶子节点,该叶子节点的type为“assign statement”,value为赋值语句的内容;While循环语句对应于抽象语法树中的一棵子树,该子树的根节点的type为“while statement”,value为while语句的判断条件,孩子节点为while内部语句内容和跳出循环的语句内容。图3为一个循环语句结构可能的抽象语法树。
[0061] 最后,后序遍历整个抽象语法树,根据抽象语法树的类型信息和节点中table映射的每个类型相关的属性等信息,推断变量的类型,将推断出的调用资源对象变量的代码片段标注为资源敏感代码模式。资源敏感代码模式是指对资源对象(文件对象、图形用户接口对象等)进行操作的代码片段。
[0062] 例如:
[0063]
[0064]
[0065] 该代码片段中,self为一个资源对象,调用了switch_backends函数对其进行了操作。因此,这里是一个资源敏感代码模式。
[0066] 步骤3:通过步骤2,我们已从源代码中抽取了资源代码模式。本发明抽取的资源敏感代码模式的相关特征为:API(参数类型,参数顺序)、资源名、调用结构和函数结构。
[0067] 然后,将抽取的特征命名规范化。其中,对于API特征,使用参数类型和参数顺序计算特征相似度;对于资源名特征,使用资源名中的词序列计算特征相似度;对于调用结构特征,使用调用结构相似度作为特征相似度;对于函数结构特征,使用函数结构特征作为特征相似度。
[0068] 步骤4:首先,对于历史版本,根据历史修复信息将相似的缺陷代码模式两两配对,组成相关模式对;将缺陷代码模式和与其相似的安全代码模式两两配对,组成非相关模式对。对于待测版本,将缺陷代码模式和待测代码模式两两配对,组成待测模式对。通过步骤3,我们可以抽取模式的特征信息,计算不同模式对的各个特征相似度。
[0069] API的特征相似度采用rVSM算法,其中对于参数类型,采用TF-IDF的算法计算权重,公式如下所示:
[0070]
[0071] 其中TF为该类型出现在API中的频数,Totalapi为API总数,Containtype为包含该类型的API数量。本发明采用上述方法作为API组成的特征向量的权重,同时,对于类型顺序采用2-Grams进行度量,该方法对于类型顺序的改变具有鲁棒性。将类型顺序和参数类型的度量组成一个特征向量。对于两个版本生成的特征向量,采用rVSM算法计算相似度。在该方法中,历史版本特征向量a和待测版本特征向量b之间的余弦距离来表示相似度,公式如下:
[0072]
[0073] 其中, 和 分别表示历史版本特征向量a和待测版本特征向量b, 表示两个特征向量的内积。
[0074] 资源名特征相似度采用文本相似度算法。首先,将资源名解析成由一序列词组合而成的形式。接下来,对于历史版本中的资源名R1和待测版本中的资源名R2,计算公式如下:
[0075]
[0076] 其中,lcs(R1,R2)表示R1中所有的子词在R2中的出现的个数,从而可以得到资源名的量化值,生成相关的向量。例如“length”和“getLength”,其 而“getLength”“getlength”,其
[0077] 对于函数结构特征相似度和调用结构特征相似度,根据步骤2中得到的抽象语法树,遍历树结构,由树节点相同的个数、计算概率得到相应的相似度,即为所求。最后,由历史版本的代码模式对组成的特征向量集得到训练集,由待测版本的代码模式对组成的特征向量集得到测试集。
[0078] 步骤5:通过步骤4,我们可以得到由特征向量组成的训练集和测试集。由于其无法整体表示是否与某个危险资源对象操作相关,因而,这里我们采用深度神经网络的算法来实现特征合并,并计算相关度。
[0079] 首先,使用生成的训练集合训练深度神经网络。本发明设计的神经网络分为三层,分别为输入层,隐藏层-1,隐藏层-2和输出层。其中隐藏层-1是输入层节点个数的两倍,隐藏层-2节点是输入层节点个数的一半。隐藏层-1每个节点H1i的计算公式如下:
[0080]
[0081] 其中w1i,b为需要训练的参数,Inputi为输入节点值。同理隐藏层-2通过该公式由隐藏层-1推导得出。对于w和b的训练,本发明采用批量梯度下降的方法,步骤如下:
[0082] 1)初始化:Δw(l)=0,Δb(l)=0,w和b则随机初始化为比较小的数值;
[0083] 2)假设迭代次数为m,对于i从1到m,使用BP算法计算出梯度并进行累加:
[0084]
[0085]
[0086] 其中,
[0087] 3)更新参数:
[0088]
[0089]
[0090] 其中,λ为可选参数,在本发明中取2。通过上述训练方法,训练出深度神经网络模型。
[0091] 在检测阶段,将测试集合中每个模式对的特征向量作为输入,通过上述节点公式进行计算。最后的输出为一个相关度值,表示该模式对的相关程度。这里使用非线性的神经网络方法要比使用线性的信息检索方法,效果显著,且可以更好地反应相关度水平。
[0092] 在深度神经网络中,中间层与输入层的每个链接的权值通过历史版本的数据训练得到,相应的权值亦然。同时,通过大量的训练,改变神经元中间的部分链接和权值,从而优化输出结果。
[0093] 对于得到的相关度值,我们按照从大到小进行排序,并选取前k个模式对作为输出结果。
[0094] 步骤6:根据得到的相关度很大的待测敏感代码,提醒开发和维护人员出现的位置和与此相关的历史资源操作,并给出之前对此资源的异常处理方案,并发出警告。对于已经检测过的Python源代码作为历史版本数据用于下一次检测,以此提高检测准确率。对于刚提交的Python源代码,自动进行检测,并根据结果向开发和维护人员发出告警。
[0095] 例如:在历史版本中,某一处的对资源对象的操作如下所示:
[0096]
[0097] 在该历史版本中,self变量是一个资源对象,这里是对该对象进行读入操作。开发者为了防止出现异常,在语句外围加上了try_catch异常处理。
[0098] 而待测版本的源代码中出现如下所示的语句:
[0099] def read_bytes(self,num_bytes,callback=None,streaming_callback=None,
[0100]                                   partial=False):
[0101]              self._try_inline_read()
[0102] 这里也是对资源对象进行了读操作,并且使用相同的API,但是却未进行异常处理。将上述两个代码组合成代码对,通过本发明的方法,可以识别和检测出两者是否相关,从而确定待测代码是否为敏感资源代码,并提醒开发者和维护者进行处理,同时给出相关的历史版本代码信息。
[0103] 综上所述,本发明提供了一种基于深度神经网络的Python资源敏感缺陷代码检测方法,解决了目前缺乏针对Python语言资源敏感代码检测和危险操作识别的自动化方法等问题,提高了软件应用质量,保证了软件演化过程中的可控性。