本申请涉及计算机技术领域,尤其涉及一种java代码质量检查方法、装置、设备和存储介质。
背景技术:
代码质量的评估是it领域衡量一个程序员能力的关键,也是是项目健壮的基础之一。若编写的代码不存在注释和不规范的格式,编写的代码晦涩难懂的。然而现有代码的评判标准是依靠程序语言的现有语法,根据程序可能出现的结果进行预判在高并发情况下和针对多用户线程考验程序出现的结果进行评判,从而使得代码看似正常的逻辑却也可能藏有致命隐患。传统的代码检查大部分是通过人为检查代码缺陷,或者通过开源项目提供的开发工具插件在开发人员开发过程中进行检查,但是人为检查需要耗费大量的人力并且得不到确切的隐患排除,开发插件需要开发人员主动配合公司规范使用,若开发人员对此类插件不主动接受,则可以不遵从一些开发规则,导致代码出现隐患,轻则运行过程中出现问题,重则导致公司因为技术上的失误从而造成损失。
技术实现要素:
本申请提供了一种通过配置java代码质量检查方法,能够避免上传的java代码出现的质量问题。
第一方面,本申请提供一种java代码质量检查方法,包括:
获取至少一个待上传的java代码文件;
将所述至少一个待上传的java代码文件输入至开源分析工具,所述开源分析工具为采用伯克利软件发行版协议的java程序代码检查工具;
通过所述开源分析工具获取所述至少一个待上传的java代码文件对应java代码的抽象语法树;
遍历所述抽象语法树,通过预设规则解析对抽象语法书中的每一行java代码语句进行对比检测,得到检测结果,所述检测结果包括一个数组以及正则表达式,所述数组至少包括待分析java代码的粒度函数以及所述待分析java代码中类里不符合预设规则的结果,所述预设规则用于检测java代码异常的规则;
将所述粒度函数以及所述待分析java代码中类里不符合预设规则的结果保存至第一集合;
根据预设条件生成与预设条件相对应的条件集合,所述预设条件包括所述预设规则检查执行时忽略任意类中任意函数、所述预设规则检查执行时忽略任意分支以及所述预设规则检查执行时忽略任意类;
计算所述第一集合与所述条件集合的差值,得到不合规信息集合;
若所述不合规信息集合不为空集,则将git的钩子阻塞并返回不符合所述预设规则的结果给用户。
在一些可能的设计中,所述若所述不合规信息集合不为空集,则将git的钩子阻塞并返回不符合所述预设规则的结果给用户,包括:
判断所述不合规信息集合是否为空集;
若所述不合规信息集合不为空集,则读取客户端中的配置文件,获取所述配置文件中所述代码名称对应的git子仓库地址,向所述git子仓库地址对应的服务器发送结果返回服务请求;
通过所述git代码管理工具获取所述对应的服务器发送的所述代码名称对应的git子仓库代码;
通过所述git代码管理工具将所述git子仓库代码复制到所述客户端的本地数据库中。
在一些可能的设计中,所述获取至少一个待上传的java代码文件之前,所述方法还包括:
获取用户上传java代码请求,所述用户上传java代码请求包括用户权限信息以及用户信息;
检查所述用户上传java代码请求中的所述用户权限信息,以判断所述用户是否有上传权限,若所述用户没有上传权限,则禁止上传所述待上传的java代码文件;
若所述用户拥有上传权限,则校验所述用户信息是否满足上传规则;
若满足所述上传规则,则获取所述待上传的java代码文件。
在一些可能的设计中,所述若所述不合规信息集合不为空集,则将git的钩子阻塞并返回不符合所述预设规则的结果给用户包括:
提取所述不合规信息集合中的代码信息,得到代码信息集合,所述不合规信息集合包括不合规的java代码的类名、java函数、行号以及字符信息;
判断所述代码信息集合是否为空集;
若所述代码信息集合不为空集,则将所述不合规信息集合中的所述类名、所述java函数、所述行号以及所述字符信息按顺序排列;
通过固定格式将排列好的所述类名、所述java函数、所述行号以及所述字符信息组合填充生成提示用户的消息;
将git的钩子阻塞并返回不符合所述预设规则的结果以及所述提示用户的消息发送给用户。
在一些可能的设计中,所述通过所述开源分析工具获取所述至少一个待上传的java代码文件对应java代码的抽象语法树,包括:
当所述待上传的java代码文件数量大于线程池阈值时,采用所述线程池阈值个数的线程池获取所述java代码的抽象语法树;
当所述待上传的java代码文件数量小于或等于所述线程池阈值时,根据所述待上传的java代码文件数量的线程池获取所述java代码的抽象语法树。
在一些可能的设计中,所述生成所述提示用户的消息以后,则将git的钩子阻塞并返回不符合所述预设规则的结果以及所述提示用户的消息发送给用户之后,所述方法还包括:
获取所述提示用户的消息;
将所述提示用户的消息以及所述不合规信息集合上传至数据库并汇总;
通过数据可视化技术将所述提示用户的消息以及所述不合规信息集合生成对应的可视化图表,所述可视化图表至少包括柱形图、折线图、饼图、散点图以及组合图;
通过监控日志呈现汇总所述可视化图表。
在一些可能的设计中,所述通过监控日志呈现汇总所述可视化图表之后,所述方法还包括:
通过所述可视化图表统计所述待上传的java代码文件的错误文件数量;
设定上限阈值和下限阈值;
若所述错误文件数量大于或等于所述上限阈值,则确定为高频错误代码;
若所述错误文件数量小于或等于所述下限阈值,则确定为低频错误代码;
若所述错误文件数量大于所述下限阈值并且小于所述上限阈值,则确定为中频错误代码。
第二方面,本申请提供一种java代码质量检查装置,具有实现对应于上述第一方面提供的java代码质量检查平台的方法的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块,所述模块可以是软件和/或硬件。
所述java代码质量检查装置包括:
输入输出模块,用于获取至少一个待上传的java代码文件;
处理模块,用于将所述至少一个待上传的java代码文件输入至开源分析工具,所述开源分析工具为采用伯克利软件发行版协议的java程序代码检查工具;通过所述开源分析工具获取所述至少一个待上传的java代码文件对应java代码的抽象语法树;遍历所述抽象语法树,通过预设规则解析对抽象语法书中的每一行java代码语句进行对比检测,得到检测结果,所述检测结果包括一个数组以及正则表达式,所述数组至少包括待分析java代码的粒度函数以及所述待分析java代码中类里不符合预设规则的结果,所述预设规则用于检测java代码异常的规则;将所述粒度函数以及所述待分析java代码中类里不符合预设规则的结果保存至第一集合;根据预设条件生成与预设条件相对应的条件集合,所述预设条件包括所述预设规则检查执行时忽略任意类中任意函数、所述预设规则检查执行时忽略任意分支以及所述预设规则检查执行时忽略任意类;计算所述第一集合与所述条件集合的差值,得到不合规信息集合;若所述不合规信息集合不为空集,则将git的钩子阻塞并返回不符合所述预设规则的结果给用户。
在一些可能的设计中,所述处理模块还用于:
判断所述不合规信息集合是否为空集;
若所述不合规信息集合不为空集,则读取客户端中的配置文件,获取所述配置文件中所述代码名称对应的git子仓库地址,向所述git子仓库地址对应的服务器发送结果返回服务请求;
通过所述git代码管理工具获取所述对应的服务器发送的所述代码名称对应的git子仓库代码;
通过所述git代码管理工具将所述git子仓库代码复制到所述客户端的本地数据库中。
在一些可能的设计中,所述处理模块还用于:
获取用户上传java代码请求,所述用户上传java代码请求包括用户权限信息以及用户信息;
检查所述用户上传java代码请求中的所述用户权限信息,以判断所述用户是否有上传权限,若所述用户没有上传权限,则禁止上传所述待上传的java代码文件;
若所述用户拥有上传权限,则校验所述用户信息是否满足上传规则;
若满足所述上传规则,则获取所述待上传的java代码文件。
在一些可能的设计中,所述处理模块还用于:
提取所述不合规信息集合中的代码信息,得到代码信息集合,所述不合规信息集合包括不合规的java代码的类名、java函数、行号以及字符信息;
判断所述代码信息集合是否为空集;
若所述代码信息集合不为空集,则将所述不合规信息集合中的所述类名、所述java函数、所述行号以及所述字符信息按顺序排列;
通过固定格式将排列好的所述类名、所述java函数、所述行号以及所述字符信息组合填充生成提示用户的消息;
将git的钩子阻塞并返回不符合所述预设规则的结果以及所述提示用户的消息发送给用户。
在一些可能的设计中,所述处理模块还用于:
当所述待上传的java代码文件数量大于线程池阈值时,采用所述线程池阈值个数的线程池获取所述java代码的抽象语法树;
当所述待上传的java代码文件数量小于或等于所述线程池阈值时,根据所述待上传的java代码文件数量的线程池获取所述java代码的抽象语法树。
在一些可能的设计中,所述处理模块还用于:
获取所述提示用户的消息;
将所述提示用户的消息以及所述不合规信息集合上传至数据库并汇总;
通过数据可视化技术将所述提示用户的消息以及所述不合规信息集合生成对应的可视化图表,所述可视化图表至少包括柱形图、折线图、饼图、散点图以及组合图;
通过监控日志呈现汇总所述可视化图表。
在一些可能的设计中,所述处理模块还用于:
通过所述可视化图表统计所述待上传的java代码文件的错误文件数量;
设定上限阈值和下限阈值;
若所述错误文件数量大于或等于所述上限阈值,则确定为高频错误代码;
若所述错误文件数量小于或等于所述下限阈值,则确定为低频错误代码;
若所述错误文件数量大于所述下限阈值并且小于所述上限阈值,则确定为中频错误代码。
本申请又一方面提供了一种java代码质量检查设备,其包括至少一个连接的处理器、存储器、输入输出单元,其中,所述存储器用于存储程序代码,所述处理器用于调用所述存储器中的程序代码来执行上述各方面所述的方法。
本申请又一方面提供了一种计算机存储介质,其包括指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
本申请通过开源分析工具pmd获取java代码的抽象语法树,并分析所述抽象语法树,根据分析的结果判断所述java代码是否符合规范,若所述java代码不符合规范,则拒绝所述java代码提交到git中。通过开源分析工具pmd以及git的组合以约束企业代码的规范性和可读性,控制代码质量,减少代码中隐患,减少代码上线给企业造成的损失。
附图说明
图1为本申请实施例中java代码质量检查方法的流程示意图;
图2为本申请实施例中java代码质量检查装置的结构示意图;
图3为本申请实施例中java代码质量检查设备的结构示意图。
本申请目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块,本申请中所出现的模块的划分,仅仅是一种逻辑上的划分,实际应用中实现时可以有另外的划分方式,例如多个模块可以结合成或集成在另一个系统中,或一些特征可以忽略,或不执行。
为解决上述技术问题,本申请主要提供以下技术方案
本申请通过开源分析工具pmd获取java代码的抽象语法树,并分析抽象语法树,根据分析的结果判断java代码是否符合规范,若java代码不符合规范,则拒绝java代码提交到git中。通过开源分析工具pmd以及git的组合以约束企业代码的规范性和可读性,控制代码质量,减少代码中隐患,减少代码上线给企业造成的损失。
请参照图1,以下对本申请提供一种java代码质量检查方法进行举例说明,所述方法包括:
101、获取至少一个待上传的java代码文件。
待上传的java代码文件的文件格式至少包括java格式和class格式。
102、将至少一个待上传的java代码文件输入至开源分析工具。
开源分析工具为采用伯克利软件发行版协议的java程序代码检查工具。
开源分析工具也提供了和java各种集成开发环境以及工具的集成,例如eclipse,intellijidea,netbean集成。
103、通过开源分析工具获取至少一个待上传的java代码文件对应java代码的抽象语法树。
抽象语法树是通过语法分析器进行创建。语法分析器是指编译器或解释器的组件,主要用于进行语法检查、并构建由输入的单词组成的数据结构(一般是语法分析树、抽象语法树等层次化的数据结构)。抽象语法树作为程序的一种中间表示形式,在程序分析等诸多领域有广泛的应用.利用抽象语法树可以方便地实现多种源程序处理工具,比如源程序浏览器、智能编辑器、语言翻译器等。
104、遍历抽象语法树,通过预设规则解析对抽象语法书中的每一行java代码语句进行对比检测,得到检测结果,检测结果包括一个数组以及正则表达式,数组至少包括待分析java代码的粒度函数以及待分析java代码中类里不符合预设规则的结果,预设规则用于检测java代码异常的规则。
预设规则用于检测java代码异常的规则。预设规则至少包括:类名必须是驼峰式命名、布尔类型不应该以is开头、避免以美元或下划线开头、未定义魔法数规则、线程池不允许使用执行器创建,通过线程执行器方式创建、类必须添加作者注释、变量名驼峰式大小写、抽象类命名摘要打头、服务器和数据存取对象实现的类需要以脉冲impl结尾以及异常类以例外exception结尾。
105、将粒度函数以及待分析java代码中类里不符合预设规则的结果保存至第一集合。
第一集合保存多个java文件的信息。粒度为系统内存扩展增量的最小值。每个类中包含数据说明和一组操作数据或传递消息的函数。
106、根据预设条件生成与预设条件相对应的条件集合。
预设条件包括预设规则检查执行时忽略任意类中任意函数、预设规则检查执行时忽略任意分支以及预设规则检查执行时忽略任意类。
107、计算第一集合与条件集合的差值,得到不合规信息集合。
或者计算第一集合与条件集合之间的交集,从而求得两个不同的地方。
108、若不合规信息集合不为空集,则将git的钩子阻塞并返回不符合预设规则的结果给用户。
通过开源分析工具pmd获取java代码的抽象语法树,并分析抽象语法树,根据分析的结果判断java代码是否符合规范,若java代码不符合规范,则拒绝java代码提交到git中。通过开源分析工具pmd以及git的组合以约束企业代码的规范性和可读性,控制代码质量,减少代码中隐患,减少代码上线给企业造成的损失。
一些实施方式中,若不合规信息集合不为空集,则将git的钩子阻塞并返回不符合预设规则的结果给用户,包括:
判断不合规信息集合是否为空集;
若不合规信息集合不为空集,则读取客户端中的配置文件,获取配置文件中代码名称对应的git子仓库地址,向git子仓库地址对应的服务器发送结果返回服务请求;
通过所述git代码管理工具获取所述对应的服务器发送的所述代码名称对应的git子仓库代码;
通过git代码管理工具将git子仓库代码复制到客户端的本地数据库中。
一些实施方式中,获取至少一个待上传的java代码文件之前,方法还包括:
获取用户上传java代码请求,用户上传java代码请求包括用户权限信息以及用户信息;
检查用户上传java代码请求中的用户权限信息,以判断用户是否有上传权限,若用户没有上传权限,则禁止上传待上传的java代码文件;
若用户拥有上传权限,则校验用户信息是否满足上传规则;
若满足上传规则,则获取待上传的java代码文件。
上述实施方式中,通过上述方法将不符合预测规则的结果返回给用户,并提示用户修改。
一些实施方式中,若不合规信息集合不为空集,则将git的钩子阻塞并返回不符合预设规则的结果给用户包括:
提取不合规信息集合中的代码信息,得到代码信息集合,不合规信息集合包括不合规的java代码的类名、java函数、行号以及字符信息;
判断代码信息集合是否为空集;
若代码信息集合不为空集,则将不合规信息集合中的类名、java函数、行号以及字符信息按顺序排列;
通过固定格式将排列好的类名、java函数、行号以及字符信息组合填充生成提示用户的消息;
将git的钩子阻塞并返回不符合预设规则的结果以及提示用户的消息发送给用户。
上述实施方式中,通过上述方法生成用于指示异常代码的提示消息,例如a类中的x函数里的153行第55个字符a是魔法值不合规。
一些实施方式中,通过开源分析工具获取至少一个待上传的java代码文件对应java代码的抽象语法树,包括:
当待上传的java代码文件数量大于线程池阈值时,采用线程池阈值个数的线程池获取java代码的抽象语法树;
当待上传的java代码文件数量小于或等于线程池阈值时,根据待上传的java代码文件数量的线程池获取java代码的抽象语法树。
上述实施方式中,使用线程可以把占据时间长的程序中的任务放到后台去处理,以加快任务的处理速度,减少用户的等待时间。
一些实施方式中,生成提示用户的消息以后,则将git的钩子阻塞并返回不符合预设规则的结果以及提示用户的消息发送给用户之后,方法还包括:
获取提示用户的消息;
将提示用户的消息以及不合规信息集合上传至数据库并汇总;
通过数据可视化技术将提示用户的消息以及不合规信息集合生成对应的可视化图表,可视化图表至少包括柱形图、折线图、饼图、散点图以及组合图;
通过监控日志呈现汇总可视化图表。
上述实施方式中,监控以及管理每个版本的代码质量。以知道每个版本之间的代码变化,实现代码质量的监控。
一些实施方式中,通过监控日志呈现汇总可视化图表之后,方法还包括:
通过可视化图表统计待上传的java代码文件的错误文件数量;
设定上限阈值和下限阈值;
若错误文件数量大于或等于上限阈值,则确定为高频错误代码;
若错误文件数量小于或等于下限阈值,则确定为低频错误代码;
若错误文件数量大于下限阈值并且小于上限阈值,则确定为中频错误代码。
上述实施方式中,通过以上监控日志监控代码质量。
如图2所示的一种java代码质量检查装置20的结构示意图,其可应用于java代码质量检查。本申请实施例中的java代码质量检查装置能够实现对应于上述图1所对应的实施例中所执行的java代码质量检查方法的步骤。java代码质量检查装置20实现的功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块,所述模块可以是软件和/或硬件。所述java代码质量检查装置可包括输入输出模块201和处理模块202,所述处理模块202和输入输出模块201的功能实现可参考图1所对应的实施例中所执行的操作,此处不作赘述。输入输出模块201可用于控制所述输入输出模块201的输入、输出以及获取操作。
一些实施方式中,所述输入输出模块201可用于获取至少一个待上传的java代码文件;
所述处理模块202可用于将所述至少一个待上传的java代码文件输入至开源分析工具,所述开源分析工具为采用伯克利软件发行版协议的java程序代码检查工具;通过所述开源分析工具获取所述至少一个待上传的java代码文件对应java代码的抽象语法树;遍历所述抽象语法树,通过预设规则解析对抽象语法书中的每一行java代码语句进行对比检测,得到检测结果,所述检测结果包括一个数组以及正则表达式,所述数组至少包括待分析java代码的粒度函数以及所述待分析java代码中类里不符合预设规则的结果,所述预设规则用于检测java代码异常的规则;将所述粒度函数以及所述待分析java代码中类里不符合预设规则的结果保存至第一集合;根据预设条件生成与预设条件相对应的条件集合,所述预设条件包括所述预设规则检查执行时忽略任意类中任意函数、所述预设规则检查执行时忽略任意分支以及所述预设规则检查执行时忽略任意类;计算所述第一集合与所述条件集合的差值,得到不合规信息集合;若所述不合规信息集合不为空集,则将git的钩子阻塞并返回不符合所述预设规则的结果给用户。
一些实施方式中,所述处理模块202还用于:
判断所述不合规信息集合是否为空集;
若所述不合规信息集合不为空集,则读取客户端中的配置文件,获取所述配置文件中所述代码名称对应的git子仓库地址,向所述git子仓库地址对应的服务器发送结果返回服务请求;
通过所述git代码管理工具获取所述对应的服务器发送的所述代码名称对应的git子仓库代码;
通过所述git代码管理工具将所述git子仓库代码复制到所述客户端的本地数据库中。
一些实施方式中,所述处理模块202还用于:
提取所述不合规信息集合中的代码信息,得到代码信息集合,所述不合规信息集合包括不合规的java代码的类名、java函数、行号以及字符信息;
判断所述代码信息集合是否为空集;
若所述代码信息集合不为空集,则将所述不合规信息集合中的所述类名、所述java函数、所述行号以及所述字符信息按顺序排列;
通过固定格式将排列好的所述类名、所述java函数、所述行号以及所述字符信息组合填充生成提示用户的消息;
将git的钩子阻塞并返回不符合所述预设规则的结果以及所述提示用户的消息发送给用户。
一些实施方式中,所述处理模块202还用于:
获取所述不合规信息集合,所述不合规信息集合包括不合规的java代码的类名、方法、行号以及字符信息;
判断所述不合规信息集合是否为空集;
若所述不合规信息集合不为空集,则提取所述不合规信息集合中的所述类名、所述方法、所述行号以及所述字符信息;
通过固定格将所述类名、所述方法、所述行号以及所述字符信息组合所生成的提示用户的消息;
生成所述提示用户的消息以后,则将git的钩子阻塞并返回不符合所述预设规则的结果以及所述提示用户的消息发送给用户。
一些实施方式中,所述处理模块202还用于:
当所述待上传的java代码文件数量大于线程池阈值时,采用线程池阈值个数的线程池获取所述java代码的抽象语法树;
当所述待上传的java代码文件数量小于或等于所述线程池阈值时,根据所述待上传的java代码文件数量的线程池获取所述java代码的抽象语法树。
一些实施方式中,所述处理模块202还用于:
获取所述提示用户的消息;
将所述提示用户的消息以及所述不合规信息集合上传至数据库并汇总;
通过数据可视化技术将所述提示用户的消息以及所述不合规信息集合生成对应的可视化图表,所述可视化图表至少包括柱形图、折线图、饼图、散点图以及组合图;
通过监控日志呈现汇总所述可视化图表。
一些实施方式中,所述处理模块202还用于:
通过所述可视化图表统计所述待上传的java代码文件的错误文件数量;
设定上限阈值和下限阈值;
若所述错误文件数量大于或等于所述上限阈值,则确定为高频错误代码;
若所述错误文件数量小于或等于所述下限阈值,则确定为低频错误代码;
若所述错误文件数量大于所述下限阈值并且小于所述上限阈值,则确定为中频错误代码。
上面从模块化功能实体的角度分别介绍了本申请实施例中的创建装置,以下从硬件角度介绍一种java代码质量检查设备,如图3所示,其包括:处理器、存储器、输入输出单元(也可以是收发器,图3中未标识出)以及存储在所述存储器中并可在所述处理器上运行的计算机程序。例如,该计算机程序可以为图1所对应的实施例中java代码质量检查方法对应的程序。例如,当计算机设备实现如图2所示的java代码质量检查装置20的功能时,所述处理器执行所述计算机程序时实现上述图2所对应的实施例中由java代码质量检查装置20执行的java代码质量检查方法中的各步骤。或者,所述处理器执行所述计算机程序时实现上述图2所对应的实施例的java代码质量检查装置20中各模块的功能。又例如,该计算机程序可以为图1所对应的实施例中java代码质量检查方法对应的程序。
所称处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述计算机装置的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、视频数据等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
所述输入输出单元也可以用接收器和发送器代替,可以为相同或者不同的物理实体。为相同的物理实体时,可以统称为输入输出单元。该输入输出可以为收发器。
所述存储器可以集成在所述处理器中,也可以与所述处理器分开设置。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器或者网络设备等)执行本申请各个实施例所述的方法。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,这些均属于本申请的保护之内。
1.一种java代码质量检查方法,其特征在于,所述方法包括:
获取至少一个待上传的java代码文件;
将所述至少一个待上传的java代码文件输入至开源分析工具,所述开源分析工具为采用伯克利软件发行版协议的java程序代码检查工具;
通过所述开源分析工具获取所述至少一个待上传的java代码文件对应java代码的抽象语法树;
遍历所述抽象语法树,通过预设规则解析对抽象语法书中的每一行java代码语句进行对比检测,得到检测结果,所述检测结果包括一个数组以及正则表达式,所述数组至少包括待分析java代码的粒度函数以及所述待分析java代码中类里不符合预设规则的结果,所述预设规则用于检测java代码异常的规则;
将所述粒度函数以及所述待分析java代码中类里不符合预设规则的结果保存至第一集合;
根据预设条件在java代码质量检查算法中生成与预设条件相对应的条件集合,所述预设条件包括所述预设规则检查执行时忽略任意类中任意函数、所述预设规则检查执行时忽略任意分支以及所述预设规则检查执行时忽略任意类;
计算所述第一集合与所述条件集合的差值,得到不合规信息集合;
若所述不合规信息集合不为空集,则将git的钩子阻塞并返回不符合所述预设规则的结果给用户。
2.根据权利要求1所述的方法,其特征在于,所述若所述不合规信息集合不为空集,则将git的钩子阻塞并返回不符合所述预设规则的结果给用户,包括:
判断所述不合规信息集合是否为空集;
若所述不合规信息集合不为空集,则读取客户端中的配置文件,获取所述配置文件中所述代码名称对应的git子仓库地址,向所述git子仓库地址对应的服务器发送结果返回服务请求;
通过所述git代码管理工具获取所述对应的服务器发送的所述代码名称对应的git子仓库代码;
通过所述git代码管理工具将所述git子仓库代码复制到所述客户端的本地数据库中。
3.根据权利要求1所述的方法,其特征在于,所述获取至少一个待上传的java代码文件之前,所述方法还包括:
获取用户上传java代码请求,所述用户上传java代码请求包括用户权限信息以及用户信息;
检查所述用户上传java代码请求中的所述用户权限信息,以判断所述用户是否有上传权限;
若所述用户没有上传权限,则禁止上传所述待上传的java代码文件;
若所述用户拥有上传权限,则校验所述用户信息是否满足上传规则;
若满足所述上传规则,则获取所述待上传的java代码文件。
4.根据权利要求1所述的方法,其特征在于,所述若所述不合规信息集合不为空集,则将git的钩子阻塞并返回不符合所述预设规则的结果给用户包括:
提取所述不合规信息集合中的代码信息,得到代码信息集合,所述不合规信息集合包括不合规的java代码的类名、java函数、行号以及字符信息;
判断所述代码信息集合是否为空集;
若所述代码信息集合不为空集,则将所述不合规信息集合中的所述类名、所述java函数、所述行号以及所述字符信息按顺序排列;
通过固定格式将排列好的所述类名、所述java函数、所述行号以及所述字符信息组合填充生成提示用户的消息;
将git的钩子阻塞并返回不符合所述预设规则的结果以及所述提示用户的消息发送给用户。
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述通过所述开源分析工具获取所述至少一个待上传的java代码文件对应java代码的抽象语法树,包括:
当所述待上传的java代码文件数量大于线程池阈值时,采用所述线程池阈值个数的线程池获取所述java代码的抽象语法树;
当所述待上传的java代码文件数量小于或等于所述线程池阈值时,根据所述待上传的java代码文件数量的线程池获取所述java代码的抽象语法树。
6.根据权利要求4所述的方法,其特征在于,所述生成所述提示用户的消息以后,则将git的钩子阻塞并返回不符合所述预设规则的结果以及所述提示用户的消息发送给用户之后,所述方法还包括:
获取所述提示用户的消息;
将所述提示用户的消息以及所述不合规信息集合上传至数据库并汇总;
通过数据可视化技术将所述提示用户的消息以及所述不合规信息集合生成对应的可视化图表,所述可视化图表至少包括柱形图、折线图、饼图、散点图以及组合图;
通过监控日志呈现汇总所述可视化图表。
7.根据权利要求6所述的方法,其特征在于,所述通过监控日志呈现汇总所述可视化图表之后,所述方法还包括:
通过所述可视化图表统计所述待上传的java代码文件的错误文件数量;
设定上限阈值和下限阈值;
若所述错误文件数量大于或等于所述上限阈值,则确定为高频错误代码;
若所述错误文件数量小于或等于所述下限阈值,则确定为低频错误代码;
若所述错误文件数量大于所述下限阈值并且小于所述上限阈值,则确定为中频错误代码。
8.一种java代码质量检查装置,其特征在于,所述装置包括:
输入输出模块,用于获取至少一个待上传的java代码文件;
处理模块,用于将所述至少一个待上传的java代码文件输入至开源分析工具,所述开源分析工具为采用伯克利软件发行版协议的java程序代码检查工具;通过所述开源分析工具获取所述至少一个待上传的java代码文件对应java代码的抽象语法树;遍历所述抽象语法树,通过预设规则解析对抽象语法书中的每一行java代码语句进行对比检测,得到检测结果,所述检测结果包括一个数组以及正则表达式,所述数组至少包括待分析java代码的粒度函数以及所述待分析java代码中类里不符合预设规则的结果,所述预设规则用于检测java代码异常的规则;将所述粒度函数以及所述待分析java代码中类里不符合预设规则的结果保存至第一集合;根据预设条件生成与预设条件相对应的条件集合,所述预设条件包括所述预设规则检查执行时忽略任意类中任意函数、所述预设规则检查执行时忽略任意分支以及所述预设规则检查执行时忽略任意类;计算所述第一集合与所述条件集合的差值,得到不合规信息集合;若所述不合规信息集合不为空集,则将git的钩子阻塞并返回不符合所述预设规则的结果给用户。
9.一种java代码质量检查设备,其特征在于,所述计算机设备包括:
至少一个处理器、存储器和输入输出单元;
其中,所述存储器用于存储程序代码,所述处理器用于调用所述存储器中存储的程序代码来执行如权利要求1-7中任一项所述的方法。
10.一种计算机存储介质,其特征在于,其包括指令,当其在计算机上运行时,使得计算机执行如权利要求1-7中任一项所述的方法。
技术总结