[发明专利]一种基于深度神经网络的Python资源敏感缺陷代码检测方法有效
申请号: | 201610915633.4 | 申请日: | 2016-10-20 |
公开(公告)号: | CN107967208B | 公开(公告)日: | 2020-01-17 |
发明(设计)人: | 陈林;潘陶;陈芝菲;李言辉;徐宝文 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 210023 *** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 深度 神经网络 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源代码,自动进行检测,并根据结果向开发和维护人员发出告警。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201610915633.4/1.html,转载请声明来源钻瓜专利网。