[发明专利]一种基于抽象语法树的Python程序类型缺陷检测方法有效

专利信息
申请号: 201710376265.5 申请日: 2017-05-22
公开(公告)号: CN108932192B 公开(公告)日: 2020-01-14
发明(设计)人: 陈林;刘畅;徐兆桂;徐宝文 申请(专利权)人: 南京大学
主分类号: G06F11/36 分类号: G06F11/36
代理公司: 暂无信息 代理人: 暂无信息
地址: 210023 *** 国省代码: 江苏;32
权利要求书: 查看更多 说明书: 查看更多
摘要: 发明提供一种基于抽象语法树的Python程序类型缺陷检测方法,包括下列步骤:1)收集Python软件缺陷报告信息,提取缺陷标识符和缺陷错误类型;2)获取缺陷修复前后两个版本程序的源代码;3)生成两个版本源代码对应的抽象语法树,匹配获取变更函数结点并标记缺陷错误类型;4)根据变更函数结点上下文信息,生成缺陷代码的特征向量;5)利用机器学习技术,在缺陷代码特征向量上训练多分类模型;6)提示开发者在测试Python程序文件中可能出现的类型缺陷信息。本发明旨在解决目前存在的缺乏针对Python语言的类型缺陷分析、无法检测可能的缺陷错误类型等问题,进而指导软件质量的管理,提高软件的可维护性。
搜索关键词: 抽象语法树 错误类型 源代码 程序类型 缺陷代码 缺陷检测 特征向量 结点 标识符 变更 机器学习技术 多分类模型 上下文信息 版本程序 报告信息 标记缺陷 程序文件 可维护性 缺陷分析 缺陷信息 缺陷修复 软件缺陷 匹配 提示 测试 检测 开发 管理
【主权项】:
1.一种基于抽象语法树的Python程序类型缺陷检测方法,其特征在于,从软件缺陷追踪系统中获取Python软件中已被修复的缺陷报告信息,并从软件版本控制系统中获取相应Python软件修改前和修改后两个版本的源代码,生成两个版本源程序对应的抽象语法树,匹配抽象语法树,寻找发生变更的函数定义结点,结合从缺陷报告的摘要和描述中抽取的错误类型信息,为函数定义结点标记相应的错误类型,根据函数结点内赋值语句的相关信息生成特征向量,通过机器学习技术在特征向量与错误类型的关系上建立分类模型,对新的Python程序源代码给出可能引发缺陷的函数以及错误类型;该方法包括下列步骤:/n1)收集Python软件缺陷报告信息,提取缺陷标识符和错误类型;从软件缺陷追踪系统中收集Python软件中已被修复的缺陷报告信息,包括缺陷标识符、摘要和描述;判断以下9种Python错误类型是否在摘要和描述中出现:ArithmeticError,AttributeError,KeyError,IndexError,IOError,NameError,SyntaxError,TypeError,ValueError;并将其中出现的错误类型加入错误类型列表;/n定义1:缺陷标识符是缺陷追踪系统中的唯一数字序列,代表一个特定的缺陷;/n2)获取缺陷修复前后两个版本程序的源代码;根据步骤1)中获取的缺陷标识符,从软件版本控制系统的提交记录中找出修改的文件名和对应的修复版本号,并根据文件名和版本号从软件版本控制系统中下载缺陷修复前后两个版本的源代码;/n定义1:提交记录是软件版本控制系统中开发者提交程序代码时记录的历史信息,包括提交日期、版本号、开发者姓名、本次提交中修改的文件以及开发者的注释信息,如果该提交修复一个缺陷,则提交记录中会包含缺陷标识符;/n定义2:文件名和版本号是软件版本控制系统中用于区分不同软件或同一软件不同版本的标识;/n3)生成两个版本源代码对应的抽象语法树,匹配获取变更函数定义结点和未变更函数定义结点并分别标记错误类型;对步骤2)中的包含缺陷的源代码和修复后的源代码进行词法分析和语法分析,利用Python标准库中的ast模块生成抽象语法树,并设置label和value,标识结点类型和内容,同时设置结点标识符;后序遍历两个版本的抽象语法树,依次匹配各个对应结点,寻找缺陷版本源代码对应的抽象语法树中的changed_node以及unchanged_node,使用由步骤1)获取的错误类型列表中的错误类型对changed_node进行标记,使用NoError对unchanged_node进行标记,对于抽象语法树中的FunctionDef结点,使用元组δ=(结点标识符,错误类型列表)记录结点引发错误的情况;/n定义1:抽象语法树是源代码抽象语法结构的树状表现形式,每个结点代表源代码中的一种结构;/n定义2:Python标准库随Python语言一起发行,包含了诸多能提供系统级功能访问的内建模块;/n定义3:ast模块是Python标准库中的一个模块,帮助解析Python抽象语法;/n定义4:label表示抽象语法树中结点的类型,类型信息来自Python抽象语法;/n定义5:value表示结点的内容,中间结点的value依赖于其label,如赋值语句的value,叶子结点的value即语句的文本表示,如函数调用语句等;/n定义6:结点标识符用于唯一标识结点,每个结点不同;/n定义7:FunctionDef是ast模块中的一种结点类型,表示函数定义;/n定义8:changed_node表示抽象语法树中发生变更的且结点类型为FunctionDef的结点;/n定义9:unchanged_node表示抽象语法树中未发生变更的且结点类型为FunctionDef的结点;/n定义10:NoError表示结点未发生错误;/n4)根据变更函数结点上下文信息,生成缺陷代码特征向量;使用树的中序遍历方式遍历步骤3)中得到的func_def,得到assign_list,统计assign_list中所有出现过的变量名,构成name_list;针对name_list中的每个name,使用pysonar2统计name在func_def中出现过的不同类型的个数,得到func_def中每个name与其类型种类数的映射,构成map;对assign_list中的每个assign_item,记录所有位于赋值符左侧的变量名,构成left_names,并记录所有为与赋值符右侧的变量名,构成right_names,然后通过计算assign_len,min_name_len,max_category,max_call和all_checked,得出缺陷代码特征向量Δ;/n定义1:func_def表示抽象语法树中结点类型为FunctionDef的语法结点;/n定义2:Assign是ast模块中的一种结点类型,表示赋值;/n定义3:assign_list表示赋值结点列表,列表中的元素是赋值结点,其类型为Assign;/n定义4:name_list表示变量名称列表,列表中的元素是变量名称;/n定义5:name是name_list中的元素,表示变量名称;/n定义6:map是由name_list中的name与其类型种类数的映射关系构成的哈希表,哈希表中的每个元素为变量名和类型种类数的映射,形式为:/nmap={name
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/patent/201710376265.5/,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top