[发明专利]一种基于抽象语法树的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语言的类型缺陷分析、无法检测可能的缺陷错误类型等问题,进而指导软件质量的管理,提高软件的可维护性。
技术领域
本发明属于计算机技术领域,尤其是软件技术领域,且特别是有关于一种基于抽象语法树的Python程序类型缺陷检测方法。
背景技术
软件缺陷是计算机程序或系统中存在的、会破坏软件正常运行能力的问题或错误,是系统所需要实现的某种功能的失效或违背。在软件开发和维护过程中,由于各种因素的影响,软件缺陷很难避免,而且会经常出现。在软件开发阶段,软件缺陷伴随着软件开发流程的各个过程,需求分析中如果没有充分弄清需求将会带来很多不必要的软件缺陷,开发过程中若没有采用优秀的管理方法也会导致很多软件缺陷。在软件维护阶段,审查和修复软件缺陷需要投入大量人力物力。有研究表明,在软件项目的整个生命周期中,软件维护成本占到总成本的75%以上,并且找到缺陷比修复缺陷更加困难,需要花费更多的时间。
软件缺陷的引发原因还与开发过程中所选择的编程语言相关。一般说来,使用静态编程语言编写的软件产生缺陷的几率要小于动态编程语言。这是因为,静态语言编写的程序一般经过预处理、编译、汇编、链接等步骤,编译器会在程序运行之前对程序中代码的变量进行严格的类型检查,确保在变量的使用方式与其定义一致,同时保证程序运行时变量的类型不发生改变。相比之下,动态语言中对象的类型是在运行时决定的,且可以随时改变,如果对象的类型变化得过于频繁,则无法完全保证对象在运算过程中拥有的类型与我们预期相符,加大了在对象使用过程中引发缺陷的概率。
在所有动态类型编程语言中,Python借助其强大的功能,在数值计算、机器学习、Web开发等领域都有着广泛的应用。在软件开发过程中,Python语言的动态特性为开发人员带来了极大的灵活性,其对类型的检查是在运行时完成的,允许开发者动态地更改对象的类型。这种在更高抽象级别进行编程,而不必考虑对象具体类型的方式,使得开发更加高效。然而,由于缺少静态类型检查,Python程序中一些潜在的缺陷很难在程序运行前被检测出来,这为软件维护增添了许多负担。因此,为帮助人们尽早发现Python程序缺陷,越来越多的静态检查工具(如PyChecker、pylint)得到使用。这些工具提供了丰富的用户自定义选项,可以在Python代码运行前帮助检测出许多bug,例如函数调用时传给函数的参数个数不正确,使用与格式字符串不匹配的参数,使用类中不存在的方法或属性等。然而这些工具不能通过静态分析的方式,分析Python代码中何处会由于类型变化过于频繁而导致程序运行时报错,更无法提供这种缺陷可能引发的缺陷错误类型。
发明内容
本发明提供了一种面向Python语言的、基于抽象语法树的类型缺陷检测方法,该方法通过匹配缺陷版本和修复版本Python源代码对应的抽象语法树,结合缺陷追踪系统的缺陷报告,确定程序中每一处引发缺陷修复的错误类型,使用成熟的机器学习技术从缺陷修复信息中学习分类规则,预测程序中可能出现缺陷的位置以及可能的缺陷错误类型。本发明旨在解决目前存在的缺乏针对Python语言的类型缺陷分析、无法检测可能的缺陷错误类型等问题,进而指导软件质量的管理,提高软件的可维护性。
为达成上述目的,本发明提出一种基于抽象语法树的Python类型缺陷检测方法。方法包括下列步骤:
1)收集Python软件缺陷报告信息,提取缺陷标识符和缺陷错误类型;
2)获取缺陷修复前后两个版本程序的源代码;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710376265.5/2.html,转载请声明来源钻瓜专利网。