具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供的代码评审方法,可应用在如图1的应用环境中,该代码评审方法应用在代码评审系统中,该代码评审系统包括客户端和服务器,其中,客户端通过网络与服务器进行通信。客户端又称为用户端,是指与服务器相对应,为客户端提供本地服务的程序。该客户端可安装在但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备等计算机设备上。服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一实施例中,如图2所示,提供一种代码评审方法,以该方法应用在图1中的服务器为例进行说明,具体包括如下步骤:
S10.获取客户端发送的代码评审请求,代码评审请求包括待评审项目。
其中,代码评审请求是用户通过客户端发送的用以评审待评审项目的请求。
于本实施例,待评审项目是用以采用代码评审系统进行评审的互联网上线项目。
具体地,服务器可给客户端设置上传待评审项目的接口,用户可通过该接口将待评审项目发送给服务器进行代码评审。
步骤S10中,服务器可实时接受客户端发送的待评审项目,及时对待评审项目进行代码评审,提高代码评审项目的评审实时性。
S20.获取代码评审脚本和代码检测工具包,代码检测工具包包括至少一个目标代码检测工具。
其中,代码评审脚步是预设于服务器的对待评审项目进行评审的脚本。
代码检测工具包是包括各种目标代码检测工具对待评审项目进行多维度检测的工具的集合包,比如,包括代码规范评审工具、目录结构评审工具、函数复杂度评审工具和重复代码评审工具等,此处不作限定。可以理解地,代码规范评审工具是对待评审项目中包括的代码是否符合规范进行评审的工具,于本实施例,可采用ESLint作为代码规范评审工具。
具体地,ESLint是一个开源的JavaScript代码检查工具,由Nicholas C.Zakas于2013年6月创建。代码检查是一种静态的分析,常用于寻找有问题的模式或者代码,并且不依赖于具体的编码风格。对大多数编程语言来说都会有代码检查,一般来说编译程序会内置检查工具。
ESLint的初衷是为了让程序员可以创建自己的检测规则。ESLint的所有规则都被设计成可插入的。ESLint的默认规则与其它插件并没有什么区别,规则本身和测试可以依赖于同样的模式。为了便于使用,ESLint内置了一些规则,亦可自定义规则。ESLint使用Node.js编写,保障快速的运行环境同时也便于安装。
步骤S20中,服务器可获取预置的包括代码评审脚步和包括至少一个目标代码检测工具的代码检测工具包对待评审项目进行评审,无需现场生成代码评审脚步或现场调用代码检测工具,提高服务器对待评审项目进行实时评审的评审效率。
S30.将代码评审脚本导入至少一个目标代码检测工具,生成与目标代码检测工具关联的代码评审接口。
其中,代码评审接口是将代码评审脚步导入到目标代码检测工具后形成的以目标代码检测工具对应的程序语言形成的代码检测指令。该代码检测指令可调用对应的目标代码检测工具对待评审项目进行特定维度的代码评审,并获取评审结果等。比如,可将代码评审脚步接入ESLint,获得对应的Review.ESLint()评审接口,用以测试待评审项目的项目代码规范性等。
步骤S30中,服务器可将代码评审脚本导入至少一个所述目标代码检测工具,生成与所述目标代码检测工具关联的代码评审接口,用以后续服务器基于代码评审接口对待评审项目进行代码评审准备技术基础。
S40.采用至少一个代码评审接口对待评审项目进行单维评审,获取单维评审结果,单维评审结果包括单维评审分数和单维评审报告。
其中,单维评审是采用代码评审接口对待评审项目进行单个维度,比如从代码规范性、目标结构合理性、函数复杂性或代码近似性等对待评审项目进行评审。
单维评审结果就是采用代码评审接口对待评审项目进行单维评审后得到的评审结果,包括评审合格和评审缺陷等。
单维评审分数是单维评审结果中包括的采用评审规则对待评审项目进行评审后得到的分数;
单维评审报告即为采用代码评审接口对待评审项目进行单维评审后得到的评审记录等。
具体地,代码评审接口可能包括多个,每个代码评审接口对应一个维度的评审规则,基于不同的评审规则服务器可获取待评审项目对应的不同的单维评审结果。
步骤S40中,服务器可采用至少一个代码评审接口对待评审项目进行单维评审,获取单维评审结果,提高评审待评审项目的评审全面性和评审弹性。
S50.基于每一单维评审分数,生成待评审项目对应的多维评审雷达图。
其中,雷达图(Radar Chart),又可称为戴布拉图或蜘蛛网图(Spider Chart),是分析报表的一种。即将各项维度分析所得的数字或比率,就其比较重要的项目集中划在一个圆形的图表上,来表现各项维度比率的情况,使用者能一目了然的了解各项维度指标的变动情形及其好坏趋向。
具体地,于本实施例,多维评审雷达图的绘制方法是:先画3个同心圆,把圆分为n个区域(n为维度个数)(每个区为360/n度),于本实施例,每个维度线分别代表待评审项目的代码规范性、目录结构合理性、函数复杂性或代码近似性等。同心圆中最小的圆代表平均水平的1/2值或最差的情况;中心圆代表同行业的平均水平或特定比较对象的水平,称为标准线(区);大圆表示同行业平均水平的1.5倍或最佳状态。在n个区域内,以圆心为起点,以放射线的形式画出相应的单维评审分数线。然后,在相应的单维评审分数线上标出当前维度对应的单维评审分数。将各种单维评审分数线用线联结起来后,就形成了一个不规则闭环图。该不规则闭环图可清楚地表示出本待评审项目的维度评审态势,并把这种维度评审态势与标准线相比,就可以清楚地看出本维度评审态势的成绩和差距。
步骤S50中,多维评审雷达图是服务器基于待评审项目的所有维度得到的单维评审分数生成的雷达图,该雷达图可直观地反应出该待评审项目在每个维度的得分情况。
S60.获取多维评审雷达图中每一单维评审分数对应的预设维度分数阈值,对比单维评审分数和预设维度分数阈值。
其中,预设维度分数阈值是每个维度对应的最小合格分数值。也即,若单维评审分数低于预设维度分数阈值,说明当前维度的多维分数对比结果为分数对比不通过。
于本实施例中,服务器对待评审项目包括四个维度的评审,每一评审分数规则可基于实际应用场景设置如下:
代码规范维度:代码检查工具ESLint会检查项目中的js文件是否有不符合代码规范的语句,并分析出error及warning数量,出现1个error扣10分,出现1个warning扣5分,最低分为0分;
目录结构维度:利用node.js扫描项目中css文件夹中是否是css文件,js文件夹中是否是js文件,images文件夹中是否是图片文件,如果扫描出某个文件放置于错误的文件夹中则扣10分,最低分为0分;
函数复杂度维度:利用JSLint检查项目中每个js文件中函数复杂度,函数复杂度的阈值是9,如果某个函数的复杂度超过该值,那么扣10分,最低分为0分;
重复代码维度:利用JSInspect检测项目中每个js文件是否重复/近似代码,如果找到一处,那么扣10分,最低分为0分。
步骤S60中,服务器可基于不同维度分别对应的评审分数规则获取不同维度分别对应的单维评审分数,并获取不同维度分别对应的预设维度分数阈值,利于服务器后续快速基于每一单维评审分数和对应的预设维度分数阈值获取分数对比结果;服务器可基于多维评审雷达图获得多维分数对比结果,将单维评审分数和预设维度分数阈值进行分数对比,直观清晰地看出每个维度的态势,并给予不同的单维评审分数为后续进行进一步分析准备数据基础。
优选地,在S60之后,即在对比单维评审分数和预设维度分数阈值之后,该代码评审方法还具体包括如下步骤:
S601.若多维分数对比结果为分数对比通过,则给客户端发送待评审项目通过代码评审的信息。
步骤S601中,当多维分数对比结果为分数对比通过时,说明多维评审雷达图中每一单维评审分数均满足预设维度分数阈值,也即说明当前待评审项目符合评审请求,此时服务器应及时向客户端返回待评审项目通过代码评审的通知信息,利于及时推进待审批项目的后续流程。
S70.若存在至少一个单维评审分数未超过预设维度分数阈值,则获取多维分数对比结果为分数对比不通过,并采用预设评审模板处理多维评审雷达图和所有单维评审报告,生成待评审项目对应的多维评审报告,将多维评审报告返回给客户端。
其中,预设评审模板是用以添加多维评审雷达图和所有单维评审报告,用以形成多维评审报告的模板。
多维评审报告是针对多维分数对比结果不通过的待评审项目生成的评审报告,利于用户通过该报告直观并直接了解待评审项目的问题所在。
具体地,服务器可基于不同维度分别对应的评审分数规则获取不同维度分别对应的单维评审分数,并获取不同维度分别对应的预设维度分数阈值,利于服务器后续快速基于每一单维评审分数和对应的预设维度分数阈值获取分数对比结果。服务器将存在任一单维评审分数未超过预设维度分数阈值的待评审项目的多维分数对比结果快速判定为分数对比不通过。
步骤S70中,服务器可基于多维分数对比结果生成完整的存在问题的待评审项目对应的多维评审报告,并返回给客户端,无需人工再进行根据多维分数对比结果进行数据分析的工作,提高代码评审的效率。
本实施例提供的代码评审方法,服务器通过通过客户端发送的代码评审请求中获取对应的待评审项目,采用预设代码评审脚本和代码检测工具包中的每一代码检测工具对该待评审项目进行多维评审,可获取多维分数对比结果;将多维分数对比结果为不通过的待评审项目生成对应的多维分数对比报告,且该多维分数对比报告包括多维评审雷达图,利于用户直观地看出待评审项目的问题所在,提高采用该代码评审系统评审代码的效率和质量,有效获取解决方案。
在一实施例中,如图3所示,在S10之前,即在获取客户端发送的代码评审请求之前,代码评审方法还具体包括如下步骤:
S101.获取处理代码检测工具指令,处理代码检测工具指令包括处理动作。
其中,处理代码检测工具指令是对代码检测工具进行管理的指令,处理动作即为具体管理动作,比如增加动作、删除动作或升级动作。可以理解地,增加动作即为向代码检测工具包中添加检测工具的动作,删除动作即为从代码检测工具包中删除已存在的代码检测工具的动作,升级动作即为给代码检测工具包中指定的代码检测工具进行升级的动作。
步骤S101中,服务器可接受客户端发送的代码检测工具指令对代码检测工具包中的代码检测工具进行管理,增强代码检测工具包的管理灵活性和可扩展性。
S102.若处理动作为增加动作,且处理代码检测工具指令还包括待增加代码检测工具ID,则获取待增加代码检测工具ID对应的待增加代码检测工具和存储位置,将待增加代码检测工具和存储位置添加到代码检测工具包对应的存储位置数据表中。
其中,代码检测工具ID为服务器用以区分不同代码检测工具而配置的唯一的ID,可为数字、字母或数字与字母的组合等,此处不作具体限定。
待增加代码检测工具ID即为待增加代码检测工具对应的服务器可识别的唯一ID;基于该待增加代码检测工具ID服务器可检索出关于该待增加代码检测工具ID对应的待增加代码检测工具的所有信息,比如待增加代码检测工具当前的存储位置。
步骤S102中,服务器可基于该待增加代码检测工具ID检测到该待增加代码检测工具当前存储位置,并将该存储位置添加到代码检测工具包对应的存储位置数据表中,利于后续服务器可直接基于存储位置数据表直接获取该待增加代码检测工具,对待评审项目进行代码检测。
S103.若处理动作为删除动作,且处理代码检测工具指令还包括待删除代码检测工具ID,则在代码检测工具包中删除待删除代码检测工具ID对应的待删除代码检测工具的所有记录。
具体地,服务器可基于待删除代码检测工具ID在代码检测工具包中删除与该待删除代码检测工具ID对应的待删除代码检测工具的所有记录,比如在存储位置数据表中的记录,以及该待删除代码检测工具本身等。
步骤S103中,服务器可通过删除动作删除指定的代码检测工具,利于用户及时处理无用的代码检测工具,提高服务器存储空间的占用有效性。
S104.若处理动作为升级动作,且处理代码检测工具指令还包括待升级代码检测工具ID和升级工具包,则在代码检测工具包中采用升级工具包对待升级代码检测工具ID对应的待升级代码检测工具进行升级。
其中,升级工具包是对待升级代码检测工具ID对应的代码检测工具进行升级的辅助工具包。
步骤S104中,服务器可采用升级工具包对待升级代码检测工具ID对应的代码检测工具及时进行升级,提高代码检测工具包的检测功能实时性和检测功能可扩展性。
步骤S101至S104中,服务器可接受客户端发送的代码检测工具指令对代码检测工具包中的代码检测工具进行管理,增强代码检测工具包的管理灵活性和可扩展性。服务器可基于该待增加代码检测工具ID检测到该待增加代码检测工具当前存储位置,并将该存储位置添加到代码检测工具包对应的存储位置数据表中,利于后续服务器可直接基于存储位置数据表直接获取该待增加代码检测工具,对待评审项目进行代码检测。服务器可通过删除动作删除指定的代码检测工具,利于用户及时处理无用的代码检测工具,提高服务器存储空间的占用有效性。服务器可采用升级工具包对待升级代码检测工具ID对应的代码检测工具及时进行升级,提高代码检测工具包的检测功能实时性和检测功能可扩展性。
在一实施例中,如图4所示,在S30中,即将代码评审脚本导入至少一个目标代码检测工具,生成与目标代码检测工具关联的代码评审接口,具体包括如下步骤:
S31.获取代码检测工具包对应的存储位置数据表,存储位置数据表包括至少一个目标代码检测工具和对应的存储位置。
其中,存储位置数据表是服务器用以记录每一代码检测工具存储位置的数据表。优选地,服务器可将所有代码检测工具都存储到代码检测工具包中,利于用户通过存储位置数据表对所有代码检测工具进行统一管理。
步骤S31中,服务器可通过获取存储位置数据表间接查找到每一目标代码检测工具,利于服务器快速对目标代码检测工具进行实时调用。
S32.将代码评审脚本存储到存储位置数据表中的每一目标代码检测工具对应的存储位置,激活至少一个目标代码检测工具形成可执行代码检测工具。
步骤S32中,服务器可将代码评审脚本插入到每一目标代码检测工具对应的存储位置,激活目标代码检测工具形成可执行代码检测工具,便于服务器后续可直接调用该可执行代码检测工具对待审批项目进行代码检测,提高代码检测的效率,减少现场激活代码检测工具的时间。
S33.基于至少一个可执行代码检测工具,执行生成评审接口指令,获取与目标代码检测工具关联的代码评审接口。
其中,代码评审接口是指定代码检测工具用以接收待评审项目进行检测的检测接口,可包括具体的接入参数等,比如待评审项目对应的项目ID等,此处不作限定,可根据实际应用场景进行设定。
步骤S33中,服务器可基于可执行代码检测工具生成对应的代码评审接口,便于服务器可直接调用该代码评审接口对待评审项目进行单维度的代码评审。
步骤S31至S33中,服务器可通过获取存储位置数据表间接查找到每一目标代码检测工具,利于服务器快速对目标代码检测工具进行实时调用。服务器可将代码评审脚本插入到每一目标代码检测工具对应的存储位置,激活目标代码检测工具形成可执行代码检测工具,便于服务器后续可直接调用该可执行代码检测工具对待审批项目进行代码检测,提高代码检测的效率,减少现场激活代码检测工具的时间。服务器可基于可执行代码检测工具生成对应的代码评审接口,便于服务器可直接调用该代码评审接口对待评审项目进行单维度的代码评审。
在一实施例中,代码评审接口包括代码规范评审接口、目录结构评审接口、函数复杂度评审接口和重复代码评审接口中的至少一种。如图5所示,在S40中,即采用至少一个代码评审接口对待评审项目进行单维评审,获取单维评审结果,具体包括如下步骤:
S41.若存在代码规范评审接口,则采用代码规范评审接口对待评审项目进行评审,获取待评审项目的代码规范性。
其中,代码规范评审接口是通过代码规范评审工具生成的检测接口。于本实施例,可采用web前端代码检查工具ESLint作为代码规范评审工具。具体地,ESLint是一款开源的JavaScript lint工具,由Nicholas C.Zakas于2013年创建。借助ESLint,可将静态代码规范性分析和问题代码协助修复集成到编码、提交和打包过程中,及早发现并协助修复代码中:有语法错误的部分、不符合约定的样式准则的部分以及不符合约定的最佳实践的部分。
步骤S41中,服务器采用ESLint在项目开发中可获得如下收益:在执行代码之前发现并修复语法错误,减少调试耗时和潜在bug;保证项目的编码风格统一,提高可维护性;督促团队成员在编码时遵守约定的最佳实践,提高代码质量。
S42.若存在目录结构评审接口,则采用目录结构评审接口对待评审项目进行评审,获取待评审项目的目录结构合理性。
其中,目录结构评审接口是通过目录结构评审工具生成的检测接口。于本实施例,可采用node.js作为目录结构评审工具,以扫描项目目录结构是否合理。具体地,Node.js是基于ChromeV8引擎的JavaScript运行环境。Node.js使用了一个事件驱动、非阻塞式I/O的模型。Node可将JavaScript运行在服务器的开发平台,以使JavaScript成为与PHP、Python、Perl以及Ruby等服务器语言平行的脚本语言。
具体检测内容比如:css文件夹是否放置css文件,js文件夹是否放置js文件,images文件夹是否放置图片文件,静态资源文件是否统一放入static文件夹下等。
步骤S42中,服务器采用Node可将测试目录结构的用例进行优化,提供替代的API,使得ChromeV8引擎在非浏览器环境下运行得更好。ChromeV8引擎执行Javascript的速度快,性能好,易于扩展,且适合在分布式设备上运行数据密集型的实时应用。
S43.若存在函数复杂度评审接口,则采用函数复杂度评审接口对待评审项目进行评审,获取待评审项目的函数复杂性。
其中,函数复杂度评审接口是通过函数复杂度评审工具生成的检测接口。于本实施例,可采用JSLint作为函数复杂度评审工具,检测js文件中的函数复杂度是否合理。具体地,JSLint是JavaScript验证工具(非开源),可以扫描JavaScript源代码来查找问题。如果JSLint发现一个问题,JSLint就会显示描述这个问题的消息,并指出错误在源代码中的大致位置。有些编码风格约定可能导致未预见的行为或错误。
进一步地,JSLint除了能指出这些不合理的约定,还能标志出结构方面的问题。尽管JSLint不能保证逻辑一定正确,但确实有助于发现错误,这些错误很可能导致浏览器的JavaScript引擎抛出错误。JSLint会把一些结构方面的错误标志为可疑的编码实践,以下列出了其中一部分:
JSLint要求所有代码行都以分号结束。尽管JavaScript确实允许将换行符作为行结束符,但一般认为这种做法是不明确的,而且是不好的编码风格;使用if和for的语句必须使用大括号把语句块括起来;不同于其他编程语言,在JavaScript中,块不会作为变量的作用域,JavaScript只支持函数级作用域,因此,JSLint只接受作为function、if、switch、while、for、do和try语句一部分的块,其他的块都会标志为错误;var只能声明一次,而且在使用之前必须声明;JSLint会把出现在return、break、continue或throw语句后面的代码标志为不可达的代码。这些语句后面必须紧跟一个结束大括号等。
步骤S43中,服务器将JSLint作为函数复杂度评审工具,利于JSLint及时将可能导致逻辑错误或其他未预见行为的部分标出来,减少调试时间。
S44.若存在重复代码评审接口,则采用重复代码评审接口对待评审项目进行评审,获取待评审项目的代码近似性。
其中,重复代码评审接口是通过重复代码评审工具生成的检测接口。于本实施例,可采用JSInspect作为重复代码评审工具。具体地,在开发的过程中开发人员往往会存在大量的复制粘贴代码的行为,这一点在项目的开发初期尤其显著;而在项目逐步稳定,功能需求逐步完善之后就需要考虑对代码库的优化与重构,尽量编写清晰可维护的代码。好的代码往往是在合理范围内尽可能地避免重复代码,遵循单一职责与单一数据源(SingleSource of Truth)等原则。此时,服务器可使用jsinspect对代码库进行自动检索,根据其反馈的重复或者近似的代码片进行合理的优化。
jsinspect利用babylon对JavaScript或者JSX代码构建AST(abstract syntaxtree,抽象语法树)语法树,根据不同的AST节点类型,比如BlockStatement、VariableDeclaration或ObjectExpression等标记相似结构的代码块等。
步骤S44中,服务器采用jsinspect检测待评审项目的代码近似性,以使项目代码在合理范围内尽可能地避免重复代码,遵循单一职责与单一数据源等原则。
步骤S41至S44中,服务器采用ESLint在项目开发中可获得如下收益:在执行代码之前发现并修复语法错误,减少调试耗时和潜在bug;保证项目的编码风格统一,提高可维护性;督促团队成员在编码时遵守约定的最佳实践,提高代码质量。服务器采用Node可将测试目录结构的用例进行优化,提供替代的API,使得ChromeV8引擎在非浏览器环境下运行得更好。ChromeV8引擎执行Javascript的速度快,性能好,易于扩展,且适合在分布式设备上运行数据密集型的实时应用。服务器将JSLint作为函数复杂度评审工具,利于JSLint及时将可能导致逻辑错误或其他未预见行为的部分标出来,减少调试时间。服务器采用jsinspect检测待评审项目的代码近似性,以使项目代码在合理范围内尽可能地避免重复代码,遵循单一职责与单一数据源等原则。
单维评审结果包括代码规范性、目录结构合理性、函数复杂性和代码近似性中的至少一种。
在一实施例中,如图6所示,在S41中,即采用代码规范评审接口对待评审项目进行评审,获取待评审项目的代码规范性,具体包括如下步骤:
S411.采用代码规范评审接口对待评审项目进行评审,获取规范评审结果,规范评审结果包括错误和告警。
其中,错误的评审结果表示代码规范评审接口对当前代码检测的结果为出现严重性错误,可能导致项目中断等严重后果。
告警表示代码规范评审接口对当前代码检测的结果为出现可容忍错误,及时对项目进程没有严重影响,也应注意规范性。
步骤S411中,服务器采用代码规范评审接口对待评审项目进行评审获得错误和告警两种结果,利于后续服务器基于不同的评审结果采取不用的处理措施。
S412.分别统计规范评审结果为错误和告警对应的第一规范评审数量和第二规范评审数量。
步骤S412中,服务器可基于步骤S411得到的规范评审结果进行分别统计,获取第一规范评审数量和第二规范评审数量,以基于不同的评审数量分别计算对应的分数。
S413.采用预设评分规则对第一规范评审数量和第二规范评审数量进行计算,获取代码规范性对应的单维评审分数和单维评审报告。
其中,单维评审分数是基于第一规范评审数量和第二规范评审数量分别对应的分数进行加成后得到的分数。具体加成算法可按实际场景设定,此处不作具体限定。
单维评审报告是服务器综合当前代码评审工具进行代码评审后得到的单维评审分数,以及该单维评审结果等信息形成的总结性报告,利于后续服务器基于多个单维评审报告形成多维评审报告,便于用户及时查看问题。
具体地,服务器可制定预设评审规则,比如:代码检查工具ESLint会检查项目中的js文件是否有不符合代码规范的语句,并分析出错误(error)数量及告警(warning)数量,出现1个error扣10分,出现1个warning扣5分,最低分为0分。
步骤S413中,服务器可基于单维评审分数等信息形成单维评审报告,利于后续服务器基于多个单维评审报告形成多维评审报告,便于用户及时查看问题。
步骤S411至S413中,服务器采用代码规范评审接口对待评审项目进行评审获得错误和告警两种结果,利于后续服务器基于不同的评审结果采取不用的处理措施。服务器可基于步骤S411得到的规范评审结果进行分别统计,获取第一规范评审数量和第二规范评审数量,以基于不同的评审数量分别计算对应的分数。服务器可基于单维评审分数等信息形成单维评审报告,利于后续服务器基于多个单维评审报告形成多维评审报告,便于用户及时查看问题。
本实施例提供的代码评审方法,服务器通过通过客户端发送的代码评审请求中获取对应的待评审项目,采用预设代码评审脚本和代码检测工具包中的每一代码检测工具对该待评审项目进行多维评审,可获取多维分数对比结果;将多维分数对比结果为不通过的待评审项目生成对应的多维分数对比报告,且该多维分数对比报告包括多维评审雷达图,利于用户直观地看出待评审项目的问题所在,提高采用该代码评审系统评审代码的效率和质量,有效获取解决方案。
进一步地,服务器可接受客户端发送的代码检测工具指令对代码检测工具包中的代码检测工具进行管理,增强代码检测工具包的管理灵活性和可扩展性。服务器可基于该待增加代码检测工具ID检测到该待增加代码检测工具当前存储位置,并将该存储位置添加到代码检测工具包对应的存储位置数据表中,利于后续服务器可直接基于存储位置数据表直接获取该待增加代码检测工具,对待评审项目进行代码检测。服务器可通过删除动作删除指定的代码检测工具,利于用户及时处理无用的代码检测工具,提高服务器存储空间的占用有效性。服务器可采用升级工具包对待升级代码检测工具ID对应的代码检测工具及时进行升级,提高代码检测工具包的检测功能实时性和检测功能可扩展性。
进一步地,服务器可通过获取存储位置数据表间接查找到每一目标代码检测工具,利于服务器快速对目标代码检测工具进行实时调用。服务器可将代码评审脚本插入到每一目标代码检测工具对应的存储位置,激活目标代码检测工具形成可执行代码检测工具,便于服务器后续可直接调用该可执行代码检测工具对待审批项目进行代码检测,提高代码检测的效率,减少现场激活代码检测工具的时间。服务器可基于可执行代码检测工具生成对应的代码评审接口,便于服务器可直接调用该代码评审接口对待评审项目进行单维度的代码评审。
进一步地,服务器采用ESLint在项目开发中可获得如下收益:在执行代码之前发现并修复语法错误,减少调试耗时和潜在bug;保证项目的编码风格统一,提高可维护性;督促团队成员在编码时遵守约定的最佳实践,提高代码质量。服务器采用Node可将测试目录结构的用例进行优化,提供替代的API,使得ChromeV8引擎在非浏览器环境下运行得更好。ChromeV8引擎执行Javascript的速度快,性能好,易于扩展,且适合在分布式设备上运行数据密集型的实时应用。具体检测内容比如:css文件夹是否放置css文件,js文件夹是否放置js文件,images文件夹是否放置图片文件,静态资源文件是否统一放入static文件夹下等。服务器将JSLint作为函数复杂度评审工具,利于JSLint及时将可能导致逻辑错误或其他未预见行为的部分标出来,减少调试时间。服务器采用jsinspect检测待评审项目的代码近似性,以使项目代码在合理范围内尽可能地避免重复代码,遵循单一职责与单一数据源等原则。
进一步地,服务器采用代码规范评审接口对待评审项目进行评审获得错误和告警两种结果,利于后续服务器基于不同的评审结果采取不用的处理措施。服务器可基于步骤S411得到的规范评审结果进行分别统计,获取第一规范评审数量和第二规范评审数量,以基于不同的评审数量分别计算对应的分数。服务器可基于单维评审分数等信息形成单维评审报告,利于后续服务器基于多个单维评审报告形成多维评审报告,便于用户及时查看问题。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
在一实施例中,提供一种代码评审装置,该代码评审装置与上述实施例中代码评审方法一一对应。如图7所示,该代码评审装置包括获取评审请求模块10、获取检测工具包模块20、生成评审接口模块30、获取单维结果模块40、生成评审雷达图模块50、对比单维分数模块60和获取对比结果模块70。各功能模块详细说明如下:
获取评审请求模块10,用于获取客户端发送的代码评审请求,所述代码评审请求包括待评审项目;
获取检测工具包模块20,用于获取代码评审脚本和代码检测工具包,所述代码检测工具包包括至少一个目标代码检测工具;
生成评审接口模块30,用于将所述代码评审脚本导入至少一个所述目标代码检测工具,生成与所述目标代码检测工具关联的代码评审接口;
获取单维结果模块40,用于采用至少一个所述代码评审接口对所述待评审项目进行单维评审,获取单维评审结果,所述单维评审结果包括单维评审分数和单维评审报告;
生成评审雷达图模块50,用于基于每一所述单维评审分数,生成所述待评审项目对应的多维评审雷达图;
对比单维分数模块60,用于获取所述多维评审雷达图中每一所述单维评审分数对应的预设维度分数阈值,对比所述单维评审分数和所述预设维度分数阈值;
获取对比结果模块70,用于若存在至少一个所述单维评审分数未超过所述预设维度分数阈值,则获取多维分数对比结果为分数对比不通过,并采用预设评审模板处理所述多维评审雷达图和所有所述单维评审报告,生成所述待评审项目对应的多维评审报告,将所述多维评审报告返回给所述客户端。
优选地,该代码评审装置还包括获取工具指令模块、获取存储位置模块、删除检测工具模块以及升级检测工具模块。
获取工具指令模块,用于获取处理代码检测工具指令,处理代码检测工具指令包括处理动作。
获取存储位置模块,用于若处理动作为增加动作,且处理代码检测工具指令还包括待增加代码检测工具ID,则获取待增加代码检测工具ID对应的待增加代码检测工具和存储位置,将待增加代码检测工具和存储位置添加到代码检测工具包对应的存储位置数据表中。
删除检测工具模块,用于若处理动作为删除动作,且处理代码检测工具指令还包括待删除代码检测工具ID,则在代码检测工具包中删除待删除代码检测工具ID对应的待删除代码检测工具的所有记录。
升级检测工具模块,用于若处理动作为升级动作,且处理代码检测工具指令还包括待升级代码检测工具ID和升级工具包,则在代码检测工具包中采用升级工具包对待升级代码检测工具ID对应的待升级代码检测工具进行升级。
优选地,该生成评审接口模块包括获取存储位置单元、激活检测工具单元以及获取评审接口单元。
获取存储位置单元,用于获取代码检测工具包对应的存储位置数据表,存储位置数据表包括至少一个目标代码检测工具和对应的存储位置。
激活检测工具单元,用于将代码评审脚本存储到存储位置数据表中的每一目标代码检测工具对应的存储位置,激活至少一个目标代码检测工具形成可执行代码检测工具。
获取评审接口单元,用于基于至少一个可执行代码检测工具,执行生成评审接口指令,获取与目标代码检测工具关联的代码评审接口。
优选地,该获取单维结果模块包括获取代码规范性单元、获取结构合理性单元、获取函数复杂性单元以及获取代码近似性单元。
获取代码规范性单元,用于获取代码规范性单元,用于若存在代码规范评审接口,则采用代码规范评审接口对待评审项目进行评审,获取待评审项目的代码规范性。
获取结构合理性单元,用于若存在目录结构评审接口,则采用目录结构评审接口对待评审项目进行评审,获取待评审项目的目录结构合理性。
获取函数复杂性单元,用于若存在函数复杂度评审接口,则采用函数复杂度评审接口对待评审项目进行评审,获取待评审项目的函数复杂性。
获取代码近似性单元,用于若存在重复代码评审接口,则采用重复代码评审接口对待评审项目进行评审,获取待评审项目的代码近似性。
优选地,该获取代码规范性单元包括获取审批结果单元、统计评审结果单元以及获取单维报告单元。
获取审批结果单元,用于采用代码规范评审接口对待评审项目进行评审,获取规范评审结果,规范评审结果包括错误和告警。
统计评审结果单元,用于分别统计规范评审结果为错误和告警对应的第一规范评审数量和第二规范评审数量。
获取单维报告单元,用于采用预设评分规则对第一规范评审数量和第二规范评审数量进行计算,获取代码规范性对应的单维评审分数和单维评审报告。
优选地,该生成评审雷达图模块还包括获取对比通过单元。
获取对比通过单元,用于若每一所述单维评审分数均超过所述预设维度分数阈值,则获取多维分数对比结果为分数对比通过。
优选地,该代码评审装置还包括发送评审信息模块。
发送评审信息模块,用于若多维分数对比结果为分数对比通过,则给客户端发送待评审项目通过代码评审的信息。
关于代码评审装置的具体限定可以参见上文中对于代码评审方法的限定,在此不再赘述。上述代码评审装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于代码评审方法相关的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种代码评审方法。
在一实施例中,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例代码评审方法,例如图2所示S10至步骤S60。或者,处理器执行计算机程序时实现上述实施例中代码评审装置的各模块/单元的功能,例如图7所示模块10至模块60的功能。为避免重复,此处不再赘述。
在一实施例中,提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述实施例代码评审方法,例如图2所示S10至步骤S60。或者,该计算机程序被处理器执行时实现上述装置实施例中代码评审装置中各模块/单元的功能,例如图7所示模块10至模块60的功能。为避免重复,此处不再赘述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。