一种代码检查方法及装置制造方法及图纸

技术编号:14521172 阅读:102 留言:0更新日期:2017-02-02 00:05
本发明专利技术公开了一种代码检查方法,包括如下步骤:接收待检查的程序文件的抽象语法树;对所述抽象语法树中的节点进行枚举,查询得到与待检查的语法结构对应的节点;利用自定义逻辑对查询得到的对应的节点进行检查,并在检查到所述节点不符合所述自定义逻辑时,生成错误信息;其中,所述自定义逻辑为用户根据需求自定义的代码执行逻辑。本发明专利技术还公开了一种代码检查装置,可实现灵活、扩展性高的静态代码检查,可根据项目的实际需要添加对应的自定义逻辑,满足项目开发的实际需要。

【技术实现步骤摘要】

本专利技术涉及静态代码检查领域,尤其涉及一种代码检查方法及装置
技术介绍
在进行程序文件的编写过程中或调试过程中,对程序文件中进行静态代码检查是很重要的一个步骤。其中,静态代码检查是指不运行被测程序文件本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序文件的正确性。对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态代码检查的结果可用于进一步的查错,并为测试用例选取提供指导。一般的编程语言都配置有静态代码检查库,用户根据这些静态代码检查库即可方便的利用这些静态代码检查库定义的规范对程序文件进行检查。以Python为例,针对Python语言的静态代码检查,目前较通用的有Pyflakes,pep8,Pychecker,pylint和flake8等多种python的扩展库。其中pep8是目前最权威的规范之一,包括了代码排版,字符串规范,空格规范,注释规范,命名规范等。Pyflakes较简单,检查的错误种类相对较单一,主要通过检查源文件分析程序并且检查各种错误。Pychecker则能够查找Python代码的bug,对代码的复杂度和格式等提出警告。Pylint是目前使用较多的检查库之一,它的特点是具有可配置性,包括检查规则的配置和检查结果的配置,能够生成较直观友好的检查报告。flake8封装了PyFlakes和pep8,以及代码复杂度检查工具NedBatchelder’sMcCabescript,它最大的优点是可扩展。具体地,以Pylint为例。Pylint作为使用较广泛的一种扩展库,能够分析和查找不符合pep8代码风格标准和有潜在问题的代码。它的原理是在python代码编译执行过程中进行词法分析,具体步骤如下:1.Tokenizer进行词法分析,把原字符代码分解为各个Token;2.Parser根据Token构建具体语法树(concretesyntaxtree,CST);3.CST转换为抽象语法树(abstractsyntaxtree,AST);4.AST编译成字节码;5.执行字节码。上述5步为python代码的编译和执行过程。具体语法树和语言强相关,而且许多实现细节跟分析无关,冗余数据多,所以语法分析器用得最多的还是抽象语法树,pylint使用的就是ast模块来进行分析和查错。
技术实现思路
从上述可知,基于现有的静态代码检查库可以实现对程序文件中的代码的静态检查和一些基本的自定义设置,但现有的静态代码检查库只能检查现有标准中已有的规范,然而在具体的项目中,有时需要根据项目的特点和类型进行一些自定义的规范的检查,此时,现有的静态代码检查库无法满足要求。针对上述问题,本专利技术的目的在于提供一种代码检查方法,包括如下步骤:接收待检查的程序文件的抽象语法树;对所述抽象语法树中的节点进行枚举,查询得到与待检查的语法结构对应的节点;利用自定义逻辑对查询得到的对应的节点进行检查,并在检查到所述节点不符合所述自定义逻辑时,生成错误信息;其中,所述自定义逻辑为用户根据需求自定义的代码执行逻辑。优选地,所述抽象语法树由静态代码检查库对所述待检查的程序文件进行解析生成。优选地,在接收待检查的程序文件的抽象语法树之前,还包括:将预先生成的安装入口安装到静态代码检查库上;其中,所述安装入口通过执行预定的安装程序生成。优选地,所述自定义逻辑至少包括以下其中之一:抛出异常时是否进行了trace检查、定义的类是否包含有手动解引用方法。优选地,所述错误信息至少包括以下其中之一:所述自定义逻辑预先配置的错误编号、错误提示信息及发生错误的节点在所述待检查的程序文件中的行号。优选地,在利用自定义逻辑对查询得到的对应的节点进行检查,并在检查到所述节点不符合所述自定义逻辑时,生成错误信息之后,还包括:获取所述待检测的程序文件的每行代码的作者,并根据所述发生错误的节点在所述待检查的程序文件中的行号查找出与所述行号对应的作者。本专利技术还提供一种代码检查装置,包括:抽象语法树接收单元,用于接收待检查的程序文件的抽象语法树;节点查询单元,用于对所述抽象语法树中的节点进行枚举,查询得到与待检查的语法结构对应的节点;节点检查单元,用于利用自定义逻辑对查询得到的对应的节点进行检查,并在检查到所述节点不符合所述自定义逻辑时,生成错误信息;其中,所述自定义逻辑为用户根据需求自定义的代码执行逻辑。优选地,所述抽象语法树由静态代码检查库对所述待检查的程序文件进行解析生成。优选地,还包括:安装单元,用于将预先生成的安装入口安装到静态代码检查库上;其中,所述安装入口通过执行预定的安装程序生成。优选地,所述自定义逻辑至少包括以下其中之一:抛出异常时是否进行了trace检查、定义的类是否包含有手动解引用方法。优选地,所述错误信息至少包括以下其中之一:所述自定义逻辑预先配置的错误编号、错误提示信息及发生错误的节点在所述待检查的程序文件中的行号。优选地,还包括:作者查找单元,用于获取所述待检测的程序文件的每行代码的作者,并根据所述发生错误的节点在所述待检查的程序文件中的行号查找出与所述行号对应的作者。本专利技术公开的代码检查方法及装置,通过接收抽象语法检查树,再根据自定义逻辑对抽象语法检查树中的与待检查的语法结构对应的节点进行检查,并对不符合所述自定义逻辑的节点显示相应的错误信息,从而实现灵活、扩展性高的静态代码检查,如此,可根据项目的实际需要添加对应的自定义逻辑,满足用户项目开发的实际需要。附图说明为了更清楚地说明本专利技术的技术方案,下面将对实施方式中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本专利技术实施例提供的代码检查装置的一种结构示意图。图2是本专利技术实施例提供的代码检查方法的流程示意图。图3是本专利技术实施例提供的代码检查装置的另一种结构示意图。图4是本专利技术实施例提供代码检查装置的另一种结构示意图。图5是图3所示的节点检查单元的一种结构示意图。图6是图3所示的节点检查单元的一种结构示意图。图7是本专利技术实施例提供代码检查装置的另一种结构示意图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。本专利技术提供了一种代码检查方法及装置,用于利用自定义逻辑对待检查的程序文件进行静态的检查,以下分别进行描述。请参阅图1,图1是本专利技术实施例提供的代码检查装置的一种结构示意图,用于执行本专利技术实施例提供的代码检查方法,所述代码检查装置包括:至少一个处理器11,例如CPU,至少一个网络接口14或者其他用户接口13,存储器15,至少一个通信总线12。通信总线12用于实现这些组件之间的连接通信。其中,用户接口13可选的可以包括USB接口以及其他标准接口、本文档来自技高网
...

【技术保护点】
一种代码检查方法,其特征在于,包括如下步骤:接收待检查的程序文件的抽象语法树;对所述抽象语法树中的节点进行枚举,查询得到与待检查的语法结构对应的节点;利用自定义逻辑对查询得到的对应的节点进行检查,并在检查到所述节点不符合所述自定义逻辑时,生成错误信息;其中,所述自定义逻辑为用户根据需求自定义的代码执行逻辑。

【技术特征摘要】
1.一种代码检查方法,其特征在于,包括如下步骤:接收待检查的程序文件的抽象语法树;对所述抽象语法树中的节点进行枚举,查询得到与待检查的语法结构对应的节点;利用自定义逻辑对查询得到的对应的节点进行检查,并在检查到所述节点不符合所述自定义逻辑时,生成错误信息;其中,所述自定义逻辑为用户根据需求自定义的代码执行逻辑。2.根据权利要求1所述的代码检查方法,其特征在于,所述抽象语法树由静态代码检查库对所述待检查的程序文件进行解析生成。3.根据权利要求1所述的代码检查方法,其特征在于,在接收待检查的程序文件的抽象语法树之前,还包括:将预先生成的安装入口安装到静态代码检查库上;其中,所述安装入口通过执行预定的安装程序生成。4.根据权利要求1所述的代码检查方法,其特征在于,所述自定义逻辑至少包括以下其中之一:抛出异常时是否进行了trace检查、定义的类是否包含有手动解引用方法。5.根据权利要求1至4任意一项所述的代码检查方法,其特征在于,所述错误信息至少包括以下其中之一:所述自定义逻辑预先配置的错误编号、错误提示信息及发生错误的节点在所述待检查的程序文件中的行号。6.根据权利要求1所述的代码检查方法,其特征在于,所述错误信息包括发生错误的节点在所述待检查的程序文件中的行号;则在利用自定义逻辑对查询得到的对应的节点进行检查,并在检查到所述节点不符合所述自定义逻辑时,生成错误信息之后,还包括:获取所述待检测的程序文件的每行代码的作者,并根据所述发生错误的节点在所述待检查的程序文件中的行号查找出与...

【专利技术属性】
技术研发人员:衣建中
申请(专利权)人:网易杭州网络有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1