CN105404584B - Lpc静态代码检查方法、装置和系统 - Google Patents
Lpc静态代码检查方法、装置和系统 Download PDFInfo
- Publication number
- CN105404584B CN105404584B CN201510836869.4A CN201510836869A CN105404584B CN 105404584 B CN105404584 B CN 105404584B CN 201510836869 A CN201510836869 A CN 201510836869A CN 105404584 B CN105404584 B CN 105404584B
- Authority
- CN
- China
- Prior art keywords
- lpc
- file
- static code
- checked
- key message
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种LPC静态代码检查方法、装置和系统,所述方法包括:获取待检查的LPC文件及公用头文件;利用预先生成的词法分析器和语法分析器对待检查的LPC文件及公用头文件进行词法分析和语法分析,并构建所述LPC文件的抽象语法树;遍历所述抽象语法树,从所述LPC文件中提取需要检查的程序关键信息;其中,所述程序关键信息为预先设定的LPC信息类;对所述程序关键信息进行预处理;利用所述词法分析器和所述语法分析器对预处理后的程序关键信息进行词法分析和语法分析。采用本发明可实现完全脱离于游戏客户端的LPC静态代码检查,对LPC代码的不同问题进行针对性的检查,采用不同的检查策略,提高代码检查的效率。
Description
技术领域
本发明涉及软件测试领域,尤其涉及一种LPC静态代码检查方法和装置。
背景技术
静态代码检查是指在不运行代码的方式下,通过词法分析、语法分析、控制流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。静态代码检查对于一个游戏项目来说是必要的,静态代码检查能够发现编译器不能发现的问题,也可以自定义一些检查规范,来检查代码编写中不规范、存在安全隐患的地方。
LPC全称Lars PensjǒC,是由Lars Pensjǒ在1989年根据C语言开发的编程语言,主要是用来编写MUD游戏,使用LPC语言开发的MUD游戏被称为LPMUD。
现有的对LPC代码进行静态代码检查方法主要为基于游戏客户端的LPC静态代码检查方法,该方法主要检查LPC代码中函数调用问题,检查时依赖于游戏客户端,在游戏运行过程中,通过LPC语言编写分析代码提取出文件的所有函数调用,然后通过分析头文件替换函数调用中的宏定义,最后借助游戏引擎提供的函数查询接口,完成函数调用问题的检查。
发明内容
上述现有技术主要存在以下缺点:
首先,该方法必须依赖于游戏客户端才能运行,如果需要检查其他分支的代码就必须关服并且重新编译,使用起来非常不方便。此外,该方法检查的问题比较单一,只能检查LPC语言中的函数调用问题。
本发明实施例的目的在于提供了一种LPC静态代码检查方法、装置和系统,实现完全脱离于游戏客户端的LPC静态代码检查,对LPC代码的不同问题进行针对性的检查,提高代码检查的效率。
为了实现上述目的,本发明实施例提供了一种LPC静态代码检查方法,包括:
获取待检查的LPC文件及公用头文件;
利用预先生成的词法分析器和语法分析器对待检查的LPC文件及公用头文件进行词法分析和语法分析,并构建所述LPC文件的抽象语法树;
遍历所述抽象语法树,从所述LPC文件中提取需要检查的程序关键信息;其中,所述程序关键信息为预先设定的LPC信息类;
对所述程序关键信息进行预处理;
利用所述词法分析器和所述语法分析器对预处理后的程序关键信息进行词法分析和语法分析。
优选地,在所述利用预先生成的词法分析器和语法分析器对待检查的LPC文件及公用头文件进行词法分析和语法分析之前,还包括:
根据预先编写的LPC语法描述文件利用语言识别工具ANTLR生成所述词法分析器和所述语法分析器。
优选地,所述遍历所述抽象语法树,从所述LPC文件中提取需要检查的程序关键信息,具体为:
在对所述LPC文件进行语法分析并构建抽象语法树的过程中,遍历所述抽象语法树,从所述LPC文件中提取需要检查的程序关键信息。
优选地,所述程序关键信息包括函数定义、函数声明、宏定义函数和引擎函数中的一种或多种组合。
优选地,所述对所述程序关键信息进行预处理,具体为:
判断所述程序关键信息是否已被执行词法分析和语法分析;
若是,则跳过所述程序关键信息;
若否,则对所述程序关键信息进行预处理。
优选地,所述对所述程序关键信息进行预处理,具体为:
对所述程序关键信息的进行展开。
优选地,在所述利用所述词法分析器和所述语法分析器对预处理后的程序关键信息进行词法分析和语法分析之后,还包括:
对检查结果进行显示;其中,所述检查结果包含出错的分支、出错的文件、出错的行号、出错的信息、出错文件的最后修改作者和出错文件的最后修改时间中的一种或多种组合。
优选地,所述LPC静态代码检查方法还包括:
将所述检查结果通过邮件发送到指定的邮箱。
优选地,所述获取待检查的LPC文件及公用头文件,具体为:
接收待检查文件的路径或者目录;
根据需要检查的文件类型,从所述路径或者目录下查找LPC文件及公用头文件,形成待检查文件的初步列表;
对所述初步列表中重复的文件进行去重处理,并根据预先设置的忽略文件列表对所述初步列表中需要忽略的文件进行忽略处理,获取所述待检查的LPC文件及公用头文件。
本发明实施例提供了另一种LPC静态代码检查方法,包括:
接收客户端发送的对待检查文件进行静态代码检查的请求;
将与所述请求对应的静态代码检查任务分发给代码检查服务器;触发所述代码检查服务器通过如前所述的LPC静态代码检查方法对所述待检查文件进行静态代码检查。
优选地,所述将与所述请求对应的静态代码检查任务分发给代码检查服务器,具体为:
根据所述待检查文件所属的代码仓库的类型、所述待检查文件所属的代码分支或者所述静态代码检查任务的类型,将所述静态代码检查任务分发给不同的代码检查服务器。
优选地,所述LPC静态代码检查方法还包括:
通过公共网关接口定时轮询所述代码检查服务器传回的静态代码检查日志,并对轮询的结果进行显示。
优选地,所述LPC静态代码检查方法还包括:
对检查结果进行统计,并对统计的结果进行显示。
相应地,本发明提供了第一种LPC静态代码检查装置,包括:
待检查文件获取模块,用于获取待检查的LPC文件及公用头文件;
第一检查模块,用于利用预先生成的词法分析器和语法分析器对待检查的LPC文件及公用头文件进行词法分析和语法分析,并构建所述LPC文件的抽象语法树;
关键信息提取模块,用于遍历所述抽象语法树,从所述LPC文件中提取需要检查的程序关键信息;其中,所述程序关键信息为预先设定的LPC信息类;
关键信息预处理模块,用于对所述程序关键信息进行预处理;和,
第二检查模块,用于利用所述词法分析器和所述语法分析器对预处理后的程序关键信息进行词法分析和语法分析。
优选地,所述装置还包括:
分析器生成模块,用于根据预先编写的LPC语法描述文件利用语言识别工具ANTLR生成所述词法分析器和所述语法分析器。
优选地,所述关键信息提取模块包括:
提取单元,用于在对所述LPC文件进行语法分析并构建抽象语法树的过程中,遍历所述抽象语法树,从所述LPC文件中提取需要检查的程序关键信息。
优选地,所述程序关键信息包括函数定义、函数声明、宏定义函数和引擎函数中的一种或多种组合。
优选地,所述关键信息预处理模块包括:
判断单元,用于判断所述程序关键信息是否已被执行词法分析和语法分析;
空操作单元,用于当所述程序关键信息已被执行词法分析和语法分析时,跳过所述程序关键信息;
预处理单元,用于对所述程序关键信息进行预处理。
优选地,所述关键信息预处理模块包括:
预处理单元,用于对所述程序关键信息的进行展开。
优选地,所述装置还包括:
结果显示模块,用于对检查结果进行显示;其中,所述检查结果包含出错的分支、出错的文件、出错的行号、出错的信息、出错文件的最后修改作者和出错文件的最后修改时间中的一种或多种组合。
优选地,所述装置还包括:
结果发送模块,用于将所述检查结果通过邮件发送到指定的邮箱。
优选地,所述待检查文件获取模块包括:
接收单元,用于接收待检查文件的路径或者目录;
查找单元,根据需要检查的文件类型,从所述路径或者目录下查找LPC文件及公用头文件,形成待检查文件的初步列表;
筛选单元,对所述初步列表中重复的文件进行去重处理,并根据预先设置的忽略文件列表对所述初步列表中需要忽略的文件进行忽略处理,获取所述待检查的LPC文件及公用头文件。
相应地,本发明提供了第二种LPC静态代码检查装置,包括:
请求接收模块,用于接收客户端发送的对待检查文件进行静态代码检查的请求;
任务分发模块,用于将与所述请求对应的静态代码检查任务分发给代码检查服务器;触发所述代码检查服务器通过如权利要求1~9任一项所述的LPC静态代码检查方法对所述待检查文件进行静态代码检查。
优选地,所述任务分发模块包括:
分发单元,用于根据所述待检查文件所属的代码仓库的类型、所述待检查文件所属的代码分支或者所述静态代码检查任务的类型,将所述静态代码检查任务分发给不同的代码检查服务器。
优选地,所述装置还包括:
轮询模块,用于通过公共网关接口定时轮询所述代码检查服务器传回的静态代码检查日志,并对轮询的结果进行显示。
优选地,所述装置还包括:
统计模块,用于对检查结果进行统计,并对统计的结果进行显示。
进一步地,本发明实施例还提供了一种LPC静态代码检查系统,包括客户端、web服务器和代码检查服务器;
所述客户端,用于向所述web服务器发送静态代码检查的请求;
所述web服务器包括如前文所述的第二种LPC静态代码检查装置;
所述代码检查服务器包括前文所述的第一种LPC静态代码检查装置。
与现有技术相比,本发明具有以下优点:
本发明通过对待检查的LPC文件及公用头文件进行词法分析和语法分析,对LPC文件和引用频率较高的公用头文件进行提前分析,并根据检查的需要提取LPC文件中的程序关键信息,对所述程序关键信息进行预处理后对其进行词法分析和语法分析,针对需要检查的问题按需提取相应的程序关键信息,对所述程序关键信息进行按需分析,检查过程无需依赖游戏客户端,实现了完全脱离于游戏客户端的LPC静态代码检查,可针对需要检查的问题提取不同的程序关键信息进行静态代码检查,提高代码检查的针对性和全面性,并通过对LPC文件及公用头文件的提前分析以及对程序关键信息的按需分析,大大提高了LPC静态代码检查的效率。
附图说明
图1是本发明提供的LPC静态代码检查方法的一个实施例的流程图;
图2是如图1所示实施例提供的步骤S1的流程图;
图3是本发明提供的LPC静态代码检查方法的另一个实施例的流程图;
图4是本发明提供的LPC静态代码检查装置的一个实施例的结构图;
图5是本发明提供的LPC静态代码检查装置的另一个实施例的结构图;
图6是本发明提供的LPC静态代码检查系统的一个实施例的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,是本发明提供的LPC静态代码检查方法的一个实施例的流程图。如图1所示,所述LPC静态代码检查方法,包括:
S1,获取待检查的LPC文件及公用头文件。
如图2所示,在具体实施当中可通过步骤S11~S13获取待检查的LPC文件及公用头文件。
S11,接收待检查文件的路径或者目录。
S12,根据需要检查的文件类型,从所述路径或者目录下查找LPC文件及公用头文件,形成待检查文件的初步列表。
本发明既支持对多个文件或者多个目录的检查,也支持对文件和目录混合的检查。由于服务器代码目录中包含其他的语言的代码文件,比如.py文件、.sh文件、.lua文件等,本实施例中只检查.c和.h结尾的文件。在检查开始时,遍历待检查文件和目录,提取出待检查文件的初步列表LIST_A。
S13,对所述初步列表中重复的文件进行去重处理,并根据预先设置的忽略文件列表对所述初步列表中需要忽略的文件进行忽略处理,获取所述待检查的LPC文件及公用头文件。
服务器中的代码文件数量较多,但是有些文件是程序员不关心的或者对游戏运行影响不大的,在检查之前可先对这些文件进行忽略处理。可通过在检查目录下设置ignored_path.txt文件,用来配置忽略文件列表。
S2,利用预先生成的词法分析器和语法分析器对待检查的LPC文件及公用头文件进行词法分析和语法分析,并构建所述LPC文件的抽象语法树。
在实际应用当中,在所述利用预先生成的词法分析器和语法分析器对待检查的LPC文件及公用头文件进行词法分析和语法分析之前,还包括:
根据预先编写的LPC语法描述文件利用语言识别工具ANTLR生成所述词法分析器和所述语法分析器。
语法描述文件是进行静态代码检查的基础。本实施例根据LPC语言的语言规范,编写符合开源语法分析器ANTLR规定的文法,组合得到LPC语法描述文件,用来识别一段源代码是否符合LPC语言的语法,语法描述文件中包含词法文法和语法文法。本实施例采用的分析语言为JAVA,利用语言识别工具ANTLR将LPC语法描述文件转换成对应的词法分析器LPCLexer.java和语法分析器LPCParser.java。
在具体实施当中,词法分析器用于根据LPC语法描述文件中的词法部分,将待检查文件的字符流转换成token流,这些token流包含了LPC标识符(如mixed、mapping标识符)、操作符、数字等。语法分析器用于根据词法分析器生成的token流和LPC语法描述文件中的语法部分,将这些token流组合在一起识别LPC特有的语句、表达式、类、函数定义、函数调用等。
LPC代码中包含较多公用头文件,在实际应用当中大部分的LPC代码中都会引用这些公用头文件,本发明优先对这些公用头文件进行词法分析和语法分析,后续检查过程中当需要对调用的函数进行检查时,无需再浪费时间从所述公用头文件或者基类中查找,有利于提高代码检查的效率。
S3,遍历所述抽象语法树,从所述LPC文件中提取需要检查的程序关键信息。其中,所述程序关键信息为预先设定的LPC信息类。
在具体实施当中,可在对所述LPC文件进行语法分析并构建抽象语法树的过程中,遍历所述抽象语法树,从所述LPC文件中提取需要检查的程序关键信息。其中,所述程序关键信息包括函数定义、函数声明、宏定义函数和引擎函数中的一种或多种组合。
本发明将抽象语法树的遍历融合到语法分析的过程中,语法分析器LPCParser.java中包含了语法分析和抽象语法树的遍历,可直接在语法分析器的语法部分加入遍历代码,使得语法分析的过程也是抽象语法树的遍历过程。在语法分析中加入抽象语法树遍历的代码示例如下:
现有技术采取的遍历方法是在语法分析全部完成之后再进行抽象语法树的遍历,虽然这样串行处理结构会清晰些,但是其花费的时间代价也是双倍的。如果采用现有的技术进行程序关键信息的提取,需要从抽象语法树的根目录进行深度遍历提取,抽象语法树中的中间节点会被重复遍历,本发明将抽象语法树的遍历融合到语法分析的过程中,省去了单独遍历的过程,有利于提高程序关键信息提取的效率。
程序关键信息是指检查需要求中要用的信息,在具体实施当中可根据需要检查的问题而设置抽取不同的程序关键信息,比如检查LPC代码的函数调用问题,需要提取函数定义、函数声明、宏定义函数和引擎函数等。需要抽取的程序关键信息类型预先保存在数据结构LPCinfor类中,如果有新的检查需求,只需向这个JAVA类中添加所需的程序关键信息类型即可,有利于提高静态代码检查的针对性和扩展性。
S4,对所述程序关键信息进行预处理。
未避免重复检查,进一步提高检查效率,在具体实施当中,可先判断所述程序关键信息是否已被执行词法分析和语法分析。若是,则跳过所述程序关键信息。若否,则对所述程序关键信息进行预处理。
具体地,所述预处理为对所述程序关键信息的进行展开。
LPC代码中有头文件、引用、继承等关系,在进行程序关键信息提取时,宏定义信息默认没有进行展开,宏定义有可能在头文件当中,LPC文件中引用关系没有在程序关键信息中体现出来,无法快速获得引用关系,LPC和C++语言有类似的继承关系,同样在初始的程序关键信息中没有记录详细的继承关系。为了对这些程序关键信息进行检查,本发明对LPC文件中的头文件、宏定义、引用和继承关系等进行预处理,将其展开为具体的代码信息。
S5,利用所述词法分析器和所述语法分析器对预处理后的程序关键信息进行词法分析和语法分析。
本发明针对所要检查的问题,仅对必要的程序关键信息进行检查,通过灵活地设置需要检查的程序关键信息,在检查所依赖的程序关键信息未被检查时,动态地对所述关键信息进行词法分析和语法分析,大大提高了LPC静态代码检查的效率。
本发明通过词法分析和语法分析对LPC代码进行检查,能检查的静态代码报错主要包含两方面,包括语法上的静态代码检查和语义上的静态代码检查。
一、语法上的静态代码检查。
语法上的静态代码检查主要包含以下几个方面:
(1)函数调用是否存在。
(2)函数调用参数个数是否匹配。
(3)函数调用参数类型是否匹配。
(4)循环判断语句中==是否错写成了=。
(5)变量是否未定义。
二、语义上的静态代码检查。
语义上的静态代码检查和游戏项目依赖很大,但也是最有效最能体现静态代码检查价值的地方。本发明可根据游戏项目具体需求实现对下列问题语义上的静态代码检查,主要包括以下几个方面:
(1)不同的文件中是否定义了相同的存盘文件。
(2)调用remove_item类接口是否有判断返回值是否成功。
(3)string类型的switch...case...是否匹配不到,导致直接走到default逻辑。
需要说明的是上述检查问题仅为本发明可检查问题的举例说明,本领域技术人员可以根据实际检查需要,通过提取不同的程序关键信息进行词法分析和语法分析以实现对其他代码问题的检查,在不脱离本发明基本原理的前提下,没有作出创造性劳动所获得的所有其他实施例,都属于本发明保护的范围。
进一步地,所述LPC静态代码检查方法还包括:对检查结果进行显示。其中,所述检查结果包含出错的分支、出错的文件、出错的行号、出错的信息、出错文件的最后修改作者和出错文件的最后修改时间中的一种或多种组合,通过这些信息可以快速定位静态代码检查报错的发生地方和原因。
更进一步地,本实施例提供的所述LPC静态代码检查方法还可以将所述检查结果通过邮件发送到指定的邮箱。将检查结果通过邮件的形式发送给对应的检查者,给检查者提供参考。
参见图3,是本发明提供的LPC静态代码检查方法另一个实施例的流程图。
如图3所示,所述LPC静态代码检查方法包括:
S31,接收客户端发送的对待检查文件进行静态代码检查的请求。
S32,将与所述请求对应的静态代码检查任务分发给代码检查服务器。触发所述代码检查服务器通过如图1所示实施例提供的所述的LPC静态代码检查方法对所述待检查文件进行静态代码检查。
在具体实施当中,用户通过客户端提交LPC静态代码检查请求,所述静态代码检查请求中包含待检查文件所属的代码仓库、代码分支、检查目录、检查文件、检查用户、检查类型和运行方式等信息中的一种或多种组合。web服务器根据接收到的静态代码检查请求,将检查任务分发给代码检查服务器,触发代码检查服务器切换代码分支并读取本地的检查配置文件,对待检查文件进行静态代码检查。
考虑到静态代码检查的并发性和检查代码仓库的多样性,在具体实施当中,所述将与所述请求对应的静态代码检查任务分发给代码检查服务器,具体为:
根据所述待检查文件所属的代码仓库的类型、所述待检查文件所属的代码分支或者所述静态代码检查任务的类型,将所述静态代码检查任务分发给不同的代码检查服务器。
代码仓库的类型包括svn和git,由于本实施例可以应用到多个不同的项目中,不同项目的权限控制会在各自项目中处理,根据代码仓库的类型分配不同的代码检查服务器可以便于代码维护和权限控制,同时区分不同的代码检查服务器也有助于提高检查的效率。
代码分支可分为模拟分支和通用分支。游戏产品都包含一个主干trunk,根据项目的需求和每周的维护情况会产生release、test、shiwan等分支,这些分支称为模拟分支,通用分支则是除了模拟分支之后的其他代码分支。模拟分支一般为固定几个代码目录,检查时只做代码更新操作。而通用分支检查每次检查时都需要代码switch操作,根据代码所属的分支分配不同的代码检查服务器可便于代码维护,同时也可实现代码的并行检查,有利于提高检查的效率。
静态代码检查任务的类型包括每日检查、每周检查和日常检查。
进一步地,为了方便测试人员实时查看静态代码检查状态,所述LPC静态代码检查方法还包括:
通过公共网关接口定时轮询所述代码检查服务器传回的静态代码检查日志,并对轮询的结果进行显示。
检查结束之后,测试人员可以在web服务器上查看最近一次的静态代码检查结果,有两种查看结果的方式。
第一种方式,直接在静态代码检查服务器回传的日志中查看报错,日志中的红色部分明确标识出代码检查中出现的问题。
第二种方式,web服务器还提供了查看历史检查错误的页面,该页面定义的错误信息包含BUG编号、出错文件、出错行号、出错信息、出错分支、发现日期、最近提交人、最近修改时间、BUG跟进QA、BUG状态、BUG备注和BUG操作等,同时还可以通过该页面对这些信息进行筛选查询。
更进一步地,LPC静态代码检查方法还包括:
对检查结果进行统计,并对统计的结果进行显示。
通过对历史检查数据进行数据统计,方便检测开发人员提交的代码质量。数据统计主要包含下面的五个方面:静态代码检查类型分布统计、出错文件频率统计、每周检查统计、每日检查统计和普通检查统计。
本实施例在图1所示实施例的基础上进一步通过搭建网络架构实现了分布式的LPC静态代码检查。在具体实施当中,用户通过客户端向web服务器发送静态代码检查请求,web服务器依据一定的规则将静态代码检查任务分发给相应的代码检查服务器,代码检查服务器利用如图1所示实施例的提供的LPC静态代码检查方法对所述待检查文件进行静态代码检查,没有代码检查权限的测试人员也可以执行静态代码检查,可实时查看静态代码检查的结果,进一步提高了LPC静态代码检查的便利性。
参见图4是本发明提供的LPC静态代码检查装置的一个实施例的结构图,本实施例的基本原理与图1所示实施例一致,本实施例中未详述之处可参见图1所示实施例中的相关描述。
如图4所示,所述LPC静态代码检查装置包括:
待检查文件获取模块41,用于获取待检查的LPC文件及公用头文件。
第一检查模块42,用于利用预先生成的词法分析器和语法分析器对待检查的LPC文件及公用头文件进行词法分析和语法分析,并构建所述LPC文件的抽象语法树。
关键信息提取模块43,用于遍历所述抽象语法树,从所述LPC文件中提取需要检查的程序关键信息。其中,所述程序关键信息为预先设定的LPC信息类。
关键信息预处理模块44,用于对所述程序关键信息进行预处理。和,
第二检查模块45,用于利用所述词法分析器和所述语法分析器对预处理后的程序关键信息进行词法分析和语法分析。
在具体实施当中,所述LPC静态代码检查装置还包括:
分析器生成模块,用于根据预先编写的LPC语法描述文件利用语言识别工具ANTLR生成所述词法分析器和所述语法分析器。
其中,所述关键信息提取模块包括:
提取单元,用于在对所述LPC文件进行语法分析并构建抽象语法树的过程中,遍历所述抽象语法树,从所述LPC文件中提取需要检查的程序关键信息。
所述程序关键信息包括函数定义、函数声明、宏定义函数和引擎函数中的一种或多种组合。
所述关键信息预处理模块包括:
判断单元,用于判断所述程序关键信息是否已被执行词法分析和语法分析。
空操作单元,用于当所述程序关键信息已被执行词法分析和语法分析时,跳过所述程序关键信息。
预处理单元,用于对所述程序关键信息进行预处理。
优选地,所述关键信息预处理模块还包括:
预处理单元,用于对所述程序关键信息的进行展开。
进一步地,所述LPC静态代码检查装置还包括:
结果显示模块,用于对检查结果进行显示。其中,所述检查结果包含出错的分支、出错的文件、出错的行号、出错的信息、出错文件的最后修改作者和出错文件的最后修改时间中的一种或多种组合。
更进一步地,所述装置还包括:
结果发送模块,用于将所述检查结果通过邮件发送到指定的邮箱。
具体地,所述待检查文件获取模块包括:
接收单元,用于接收待检查文件的路径或者目录。
查找单元,根据需要检查的文件类型,从所述路径或者目录下查找LPC文件及公用头文件,形成待检查文件的初步列表。
筛选单元,对所述初步列表中重复的文件进行去重处理,并根据预先设置的忽略文件列表对所述初步列表中需要忽略的文件进行忽略处理,获取所述待检查的LPC文件及公用头文件。
参见图5,是本发明提供的LPC静态代码检查装置的另一个实施例的结构图。本实施例的基本原理与图3所示实施例的基本原理一致,本实施例中未详述之处可参见图3所示实施例中的相关描述。
如图5所示,所述LPC静态代码检查装置包括:
请求接收模块51,用于接收客户端发送的对待检查文件进行静态代码检查的请求。
任务分发模块52,用于将与所述请求对应的静态代码检查任务分发给代码检查服务器。触发所述代码检查服务器通过如图1所示实施例提供的LPC静态代码检查方法对所述待检查文件进行静态代码检查。
其中,所述任务分发模块包括:
分发单元,用于根据所述待检查文件所属的代码仓库的类型、所述待检查文件所属的代码分支或者所述静态代码检查任务的类型,将所述静态代码检查任务分发给不同的代码检查服务器。
进一步地,所述LPC静态代码检查装置还包括:
轮询模块,用于通过公共网关接口定时轮询所述代码检查服务器传回的静态代码检查日志,并对轮询的结果进行显示。
更进一步地,所述LPC静态代码检查装置还包括:
统计模块,用于对检查结果进行统计,并对统计的结果进行显示。
参见图6,是本发明提供的LPC静态代码检查系统的一个实施例的结构图,本实施例的基本原理与前述实施例一致,本实施例中未详述之处可参见前文的相关描述。
所述LPC静态代码检查系统包括客户端61、web服务器62和代码检查服务器63。
所述客户端61,用于向所述web服务器62发送静态代码检查的请求。
所述web服务器62包括如权利要求如图3所述实施例提供的所述的LPC静态代码检查装置。
所述代码检查服务器63包括如权利要求如图1所示实施例提供的LPC静态代码检查装置。
综上所述,本发明通过对待检查的LPC文件及公用头文件进行词法分析和语法分析,对LPC文件和使用频率较高的公用头文件进行提前分析,并根据检查的需要提取LPC文件中的程序关键信息,对所述程序关键信息进行预处理后对其进行词法分析和语法分析,针对需要检查的问题按需提取相应的程序关键信息,对所述程序关键信息进行按需分析,检查过程无需依赖游戏客户端,实现了完全脱离于游戏客户端的LPC静态代码检查,可针对需要检查的问题提取不同的程序关键信息进行检查,实现对LPC语言不同问题的检查,并通过对LPC文件及公用头文件的提前分析以及对程序关键信息的按需分析,大大提高了LPC静态代码检查的效率。
需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (27)
1.一种LPC静态代码检查方法,其特征在于,包括:
获取待检查的LPC文件及公用头文件;
利用预先生成的词法分析器和语法分析器对待检查的LPC文件及公用头文件进行词法分析和语法分析,并构建所述LPC文件的抽象语法树;
在对所述LPC文件进行语法分析并构建抽象语法树的过程中,遍历所述抽象语法树,从所述LPC文件中提取需要检查的程序关键信息;其中,所述程序关键信息为预先设定的LPC信息类;
对所述程序关键信息进行预处理;
利用所述词法分析器和所述语法分析器对预处理后的程序关键信息进行词法分析和语法分析。
2.如权利要求1所述的LPC静态代码检查方法,其特征在于,在所述利用预先生成的词法分析器和语法分析器对待检查的LPC文件及公用头文件进行词法分析和语法分析之前,还包括:
根据预先编写的LPC语法描述文件利用语言识别工具ANTLR生成所述词法分析器和所述语法分析器。
3.如权利要求1所述的LPC静态代码检查方法,其特征在于,所述遍历所述抽象语法树,从所述LPC文件中提取需要检查的程序关键信息,具体为:
在对所述LPC文件进行语法分析并构建抽象语法树的过程中,遍历所述抽象语法树,从所述LPC文件中提取需要检查的程序关键信息。
4.如权利要求1所述的LPC静态代码检查方法,其特征在于,所述程序关键信息包括函数定义、函数声明、宏定义函数和引擎函数中的一种或多种组合。
5.如权利要求1所述的LPC静态代码检查方法,其特征在于,所述对所述程序关键信息进行预处理,具体为:
判断所述程序关键信息是否已被执行词法分析和语法分析;
若是,则跳过所述程序关键信息;
若否,则对所述程序关键信息进行预处理。
6.如权利要求1所述的LPC静态代码检查方法,其特征在于,所述对所述程序关键信息进行预处理,具体为:
对所述程序关键信息的进行展开。
7.如权利要求1所述的LPC静态代码检查方法,其特征在于,在所述利用所述词法分析器和所述语法分析器对预处理后的程序关键信息进行词法分析和语法分析之后,还包括:
对检查结果进行显示;其中,所述检查结果包含出错的分支、出错的文件、出错的行号、出错的信息、出错文件的最后修改作者和出错文件的最后修改时间中的一种或多种组合。
8.如权利要求7所述的LPC静态代码检查方法,其特征在于,所述LPC静态代码检查方法还包括:
将所述检查结果通过邮件发送到指定的邮箱。
9.如权利要求1~8任一项所述的LPC静态代码检查方法,其特征在于,所述获取待检查的LPC文件及公用头文件,具体为:
接收待检查文件的路径或者目录;
根据需要检查的文件类型,从所述路径或者目录下查找LPC文件及公用头文件,形成待检查文件的初步列表;
对所述初步列表中重复的文件进行去重处理,并根据预先设置的忽略文件列表对所述初步列表中需要忽略的文件进行忽略处理,获取所述待检查的LPC文件及公用头文件。
10.一种LPC静态代码检查方法,其特征在于,包括:
接收客户端发送的对待检查文件进行静态代码检查的请求;
将与所述请求对应的静态代码检查任务分发给代码检查服务器;触发所述代码检查服务器通过如权利要求1~9任一项所述的LPC静态代码检查方法对所述待检查文件进行静态代码检查。
11.如权利要求10所述的LPC静态代码检查方法,其特征在于,所述将与所述请求对应的静态代码检查任务分发给代码检查服务器,具体为:
根据所述待检查文件所属的代码仓库的类型、所述待检查文件所属的代码分支或者所述静态代码检查任务的类型,将所述静态代码检查任务分发给不同的代码检查服务器。
12.如权利要求10所述的LPC静态代码检查方法,其特征在于,所述LPC静态代码检查方法还包括:
通过公共网关接口定时轮询所述代码检查服务器传回的静态代码检查日志,并对轮询的结果进行显示。
13.如权利要求10~12任一项所述的LPC静态代码检查方法,其特征在于,所述LPC静态代码检查方法还包括:
对检查结果进行统计,并对统计的结果进行显示。
14.一种LPC静态代码检查装置,其特征在于,包括:
待检查文件获取模块,用于获取待检查的LPC文件及公用头文件;
第一检查模块,用于利用预先生成的词法分析器和语法分析器对待检查的LPC文件及公用头文件进行词法分析和语法分析,并构建所述LPC文件的抽象语法树;
关键信息提取模块,用于在对所述LPC文件进行语法分析并构建抽象语法树的过程中,遍历所述抽象语法树,从所述LPC文件中提取需要检查的程序关键信息;其中,所述程序关键信息为预先设定的LPC信息类;
关键信息预处理模块,用于对所述程序关键信息进行预处理;和,
第二检查模块,用于利用所述词法分析器和所述语法分析器对预处理后的程序关键信息进行词法分析和语法分析。
15.如权利要求14所述的LPC静态代码检查装置,其特征在于,所述装置还包括:
分析器生成模块,用于根据预先编写的LPC语法描述文件利用语言识别工具ANTLR生成所述词法分析器和所述语法分析器。
16.如权利要求14所述的LPC静态代码检查装置,其特征在于,所述关键信息提取模块包括:
提取单元,用于在对所述LPC文件进行语法分析并构建抽象语法树的过程中,遍历所述抽象语法树,从所述LPC文件中提取需要检查的程序关键信息。
17.如权利要求14所述的LPC静态代码检查装置,其特征在于,所述程序关键信息包括函数定义、函数声明、宏定义函数和引擎函数中的一种或多种组合。
18.如权利要求14所述的LPC静态代码检查装置,其特征在于,所述关键信息预处理模块包括:
判断单元,用于判断所述程序关键信息是否已被执行词法分析和语法分析;
空操作单元,用于当所述程序关键信息已被执行词法分析和语法分析时,跳过所述程序关键信息;
预处理单元,用于对所述程序关键信息进行预处理。
19.如权利要求14所述的LPC静态代码检查装置,其特征在于,所述关键信息预处理模块包括:
预处理单元,用于对所述程序关键信息的进行展开。
20.如权利要求14所述的LPC静态代码检查装置,其特征在于,所述装置还包括:
结果显示模块,用于对检查结果进行显示;其中,所述检查结果包含出错的分支、出错的文件、出错的行号、出错的信息、出错文件的最后修改作者和出错文件的最后修改时间中的一种或多种组合。
21.如权利要求20所述的LPC静态代码检查装置,其特征在于,所述装置还包括:
结果发送模块,用于将所述检查结果通过邮件发送到指定的邮箱。
22.如权利要求14~21任一项所述的LPC静态代码检查装置,其特征在于,所述待检查文件获取模块包括:
接收单元,用于接收待检查文件的路径或者目录;
查找单元,根据需要检查的文件类型,从所述路径或者目录下查找LPC文件及公用头文件,形成待检查文件的初步列表;
筛选单元,对所述初步列表中重复的文件进行去重处理,并根据预先设置的忽略文件列表对所述初步列表中需要忽略的文件进行忽略处理,获取所述待检查的LPC文件及公用头文件。
23.一种LPC静态代码检查装置,其特征在于,包括:
请求接收模块,用于接收客户端发送的对待检查文件进行静态代码检查的请求;
任务分发模块,用于将与所述请求对应的静态代码检查任务分发给代码检查服务器;触发所述代码检查服务器通过如权利要求1~9任一项所述的LPC静态代码检查方法对所述待检查文件进行静态代码检查。
24.如权利要求23所述的LPC静态代码检查装置,其特征在于,所述任务分发模块包括:
分发单元,用于根据所述待检查文件所属的代码仓库的类型、所述待检查文件所属的代码分支或者所述静态代码检查任务的类型,将所述静态代码检查任务分发给不同的代码检查服务器。
25.如权利要求23所述的LPC静态代码检查装置,其特征在于,所述装置还包括:
轮询模块,用于通过公共网关接口定时轮询所述代码检查服务器传回的静态代码检查日志,并对轮询的结果进行显示。
26.如权利要求23~25任一项所述的LPC静态代码检查装置,其特征在于,所述装置还包括:
统计模块,用于对检查结果进行统计,并对统计的结果进行显示。
27.一种LPC静态代码检查系统,其特征在于,包括客户端、web服务器和代码检查服务器;
所述客户端,用于向所述web服务器发送静态代码检查的请求;
所述web服务器包括如权利要求23~26任一项所述的LPC静态代码检查装置;
所述代码检查服务器包括如权利要求14~22任一项的LPC静态代码检查装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510836869.4A CN105404584B (zh) | 2015-11-25 | 2015-11-25 | Lpc静态代码检查方法、装置和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510836869.4A CN105404584B (zh) | 2015-11-25 | 2015-11-25 | Lpc静态代码检查方法、装置和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105404584A CN105404584A (zh) | 2016-03-16 |
CN105404584B true CN105404584B (zh) | 2018-12-11 |
Family
ID=55470082
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510836869.4A Active CN105404584B (zh) | 2015-11-25 | 2015-11-25 | Lpc静态代码检查方法、装置和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105404584B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106371997B (zh) * | 2016-09-07 | 2020-01-10 | 网易(杭州)网络有限公司 | 一种代码检查方法及装置 |
CN107153564B (zh) * | 2017-06-22 | 2020-07-07 | 拜椰特(上海)软件技术有限公司 | 一种词法解析工具 |
CN108614707B (zh) * | 2018-04-27 | 2023-05-02 | 深圳市腾讯网络信息技术有限公司 | 静态代码检查方法、装置、存储介质和计算机设备 |
CN109783383A (zh) * | 2019-01-08 | 2019-05-21 | 郑州云海信息技术有限公司 | 一种代码级软件测试方法、装置、终端及存储介质 |
CN110286880B (zh) * | 2019-06-17 | 2020-12-01 | 中国科学院软件研究所 | 一种面向GitHub与Travis CI的完整持续集成数据收集方法 |
CN111552476A (zh) * | 2020-04-24 | 2020-08-18 | 烽火通信科技股份有限公司 | 一种代码静态检查的方法与设备 |
CN111580825A (zh) * | 2020-04-28 | 2020-08-25 | 中国科学院软件研究所 | 一种面向机械臂程序开发编程语言的编译方法及系统 |
CN111580802B (zh) * | 2020-04-30 | 2024-03-22 | 完美世界(北京)软件科技发展有限公司 | 持续集成方法、基于分布式编译的持续集成方法及系统 |
CN111581103A (zh) * | 2020-05-11 | 2020-08-25 | 成都库珀区块链科技有限公司 | 一种数据检测的方法及相关装置 |
CN111984233B (zh) * | 2020-08-03 | 2022-02-01 | 南京航空航天大学 | 一种AltaRica模型中类的平展化方法 |
CN112052008B (zh) * | 2020-09-10 | 2022-02-18 | 腾讯科技(深圳)有限公司 | 代码检查方法、装置、计算机设备及计算机可读存储介质 |
CN112947909A (zh) * | 2021-03-21 | 2021-06-11 | 北京长亭未来科技有限公司 | 一种动态编程语言的重构方法及装置 |
CN113391817B (zh) * | 2021-06-16 | 2022-08-26 | 中国海洋大学 | 基于antlr4的头文件替换方法及装置 |
CN113312896B (zh) * | 2021-06-23 | 2023-11-21 | 哈尔滨工程大学 | 一种硬件描述语言vhdl规范检查系统 |
CN113609004B (zh) * | 2021-07-17 | 2023-11-03 | 深圳开源互联网安全技术有限公司 | 一种静态代码检测方法和系统 |
CN113485715A (zh) * | 2021-07-30 | 2021-10-08 | 浙江大华技术股份有限公司 | 一种基于数据中台的代码提示方法、系统及数据计算平台 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101017458A (zh) * | 2007-03-02 | 2007-08-15 | 北京邮电大学 | 基于源代码静态分析的软件安全代码分析器及其检测方法 |
CN101286132A (zh) * | 2008-06-02 | 2008-10-15 | 北京邮电大学 | 一种基于软件缺陷模式的测试方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2380106B1 (en) * | 2008-12-18 | 2018-05-30 | Koninklijke Philips N.V. | Software bug and performance deficiency reporting system |
-
2015
- 2015-11-25 CN CN201510836869.4A patent/CN105404584B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101017458A (zh) * | 2007-03-02 | 2007-08-15 | 北京邮电大学 | 基于源代码静态分析的软件安全代码分析器及其检测方法 |
CN101286132A (zh) * | 2008-06-02 | 2008-10-15 | 北京邮电大学 | 一种基于软件缺陷模式的测试方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN105404584A (zh) | 2016-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105404584B (zh) | Lpc静态代码检查方法、装置和系统 | |
Lin et al. | Cross-project transfer representation learning for vulnerable function discovery | |
CN105577528B (zh) | 一种基于虚拟机的微信公众号数据采集方法及装置 | |
CN103577324B (zh) | 移动应用中隐私信息泄露的静态检测方法 | |
CA3018304A1 (en) | Systems and methods for web analytics testing and web development | |
CN106919612B (zh) | 一种上线结构化查询语言脚本的处理方法及装置 | |
CN105577799B (zh) | 一种数据库集群的故障检测方法和装置 | |
CN103701783B (zh) | 一种预处理单元、由其构成的数据处理系统以及处理方法 | |
CN111767573A (zh) | 数据库安全管理方法、装置、电子设备及可读存储介质 | |
CN107168844B (zh) | 一种性能监控的方法及装置 | |
CN108268570A (zh) | 一种开发接口的方法及装置 | |
CN109857757A (zh) | 数据库间的语句转换方法、系统和终端 | |
Astekin et al. | DILAF: a framework for distributed analysis of large‐scale system logs for anomaly detection | |
CN110795697A (zh) | 逻辑表达式的获取方法、装置、存储介质以及电子装置 | |
CN109446042A (zh) | 一种用于智能用电设备的日志管理方法及系统 | |
CN112600936B (zh) | 一种云计算系统服务的量化和评估方法 | |
CN107368500A (zh) | 数据抽取方法及系统 | |
Alalfi et al. | An approach to clone detection in sequence diagrams and its application to security analysis | |
US20170220449A1 (en) | Infrastructure rule generation | |
KR101014684B1 (ko) | 테스트 결과 로그를 이용한 프로그램 테스트 결과 분석방법 및 시스템과 이를 위한 프로그램 기록매체 | |
KR100946417B1 (ko) | 프로그램 소스코드 테스트 방법 | |
CN104462289B (zh) | 直达号关键词的推荐方法和装置 | |
CN114185928A (zh) | 通用接口对接系统、方法、设备及存储介质 | |
CN106547913B (zh) | 页面信息的收集分类反馈方法、装置及系统 | |
CN111651191A (zh) | 应用于微服务构架的单应用打包方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |