本发明涉及代码分析领域,更具体的说,它涉及广电行业自动化代码分析方法。
背景技术:
随着it的进步,对于广电行业的服务平台提出了更高的质量和安全性要求,但目前部分服务平台由外包团队完成,代码的规范性和质量缺乏完备的保障。
目前对于代码质量的管理主要有三种技术:
1、定期组织专家对服务平台的代码进行评审;
2、提供开发环境的代码规范性检查插件,由程序员开发过程中进行自检;
3、制定完备的测试验收流程,对最终产品进行验收。
但现有技术存在许多客观缺点:
缺点一:组织专家评审费时费力,团队开发代码量大,无法做到全部审查;
缺点二:代码规范性检查插件只针对规范性进行校验,无法覆盖到代码漏洞、安全性等其他问题;
缺点三:测试验收作为项目最终的把关可有效保障代码质量,但无法涉及到代码的规范性,后期发现缺陷,修复的成本也相应提高。
技术实现要素:
本发明克服了现有技术的不足,提供一种针对广电行业的自动化代码分析方法。
本发明的技术方案如下:
广电行业自动化代码分析方法,具体包括如下步骤:
101)动态检测步骤:广电行业项目的开发人员将含有代码分析任务脚本文件的本地代码提交至远程公共代码仓库;代码一经提交至仓库,由ci/cd工具动态检测到代码更新情况,并拉取相应广电行业项目的各子系统的源代码至指定代码分析仓库目录下;
102)信息检测步骤:通过脚本文件获取并记录步骤101)提交的本次更新的相关信息,包含通用信息和项目相关信息;
通用信息包括本次代码提交的人员信息、时间信息;项目相关信息包括本次提交代码的项目名称、代码分支信息、日志记录;
103)代码扫描步骤:步骤102)中的代码同步至远程公共代码仓库后,ci/cd工具会自动触发流水线进行代码扫描任务;
代码扫描模块接收到扫描任务启动指令后,则自动从代码扫描模块获取针对广电行业业务规范定制的代码扫描规则;代码扫描模块获取到相应的代码扫描规则后,对远程公共代码仓库路径下的工程进行源代码扫描;
104)代码分析步骤:步骤103)的代码扫描模块完成扫描任务后即调起代码分析模块,依据代码分析模块中的分析规则对上一步中扫描的源代码进行漏洞、bug、代码规范性、安全热定内容的逐项代码分析,并生成分析日志文件;
105)报告步骤:步骤104)的代码分析结束后,分析报告模块针对广电行业规范要求自定义质量阈值生成个性化、可视化的扫描报告,报告包括代码扫描的覆盖率情况、代码中bug的数量比例、代码中漏洞的数量比例、代码的多余重复率、代码不规范的实例数量比例、单个类/接口/方法中的行数、是否写了注释、代码的认知复杂度、自动生成的问题统计图表、问题代码的相应解决意见、建议;
报告生成后,以单个报告级别的rbac用户角色权限设计方式分离权限,而后通过hook的方式将报告发送给开发人员,开发人员根据报告内容修复源代码中的缺陷,即可再次提交代码重复步骤101),直至修复所有缺陷。
进一步的,步骤103)中的代码扫描规则包含以下五部分:
(1)代码漏洞:是指代码中可能存在会对系统安全、性能方面产生重大影响的问题;
(2)bug:是指代码中可能存在会对业务逻辑产生影响的语法异常问题;
(3)规范性:是指代码中存在的语法不符合业界通用的语言规范问题;
(4)安全热点:是指代码中的一些安全敏感问题;
(5)sql语句:是指sql语句的使用规范问题。
本发明相比现有技术优点在于:本发明针对广电行业的代码规范及安全性等要求,自定义相应的扫描规则,该规则主要包含代码漏洞、bug、规范性、安全热点、sql语句等领域。对于代码分析结果进行量化分析,针对广电行业代码规范及安全性要求设定项目质量阈值,如设定漏洞阈值为0,即不允许漏洞存在,则当项目不满足该质量阈值要求时,在报告首页会以红色标注,同时在缺陷详情信息中提供修复建议,形成个性化、可视化的代码分析报告。
本发明对于一段时间内代码分析结果进行统计分析,生成项目和开发人员代码质量的曲线图,通过纵向对比,体现代码质量的改进过程,通过横向对比,发现项目和开发人员之际代码质量的优劣,为项目决策提供依据。
本发明实现广电行业对于代码漏洞、bug、规范性、安全性等规范要求的工具化,实现生产环境代码扫描常态化制度化,极大提升了代码质量和安全性。统一团队开发代码规范,提升团队整体开发效率和质量,减少运维测试成本。
附图说明
图1为本发明的整体框架图;
图2为本发明的代码扫描分析流程图;
图3为本发明的代码分析规则开发框架图。
具体实施方式
下面结合附
图和具体实施方式对本发明进一步说明。
如图1至图3所示,广电行业自动化代码分析方法,具体包括如下步骤:
101)动态检测步骤:广电行业项目的开发人员将含有代码分析任务脚本文件的本地代码提交至远程公共代码仓库(如git仓库)。代码一经提交至仓库,由ci/cd工具(例如gocd、drone、jenkins等)动态检测到代码更新情况,并拉取相应广电行业项目的各子系统的源代码至指定代码分析仓库目录下。
102)信息检测步骤:通过脚本文件获取并记录步骤101)提交的本次更新的相关信息,主要包含通用信息和项目相关信息。
通用信息包括本次代码提交的人员信息、时间信息。项目相关信息包括本次提交代码的项目名称、代码分支信息、日志记录。
103)代码扫描步骤:步骤102)中的代码同步至远程公共代码仓库后,ci/cd工具会自动触发流水线进行代码扫描任务。
代码扫描模块接收到扫描任务启动指令后,则自动从代码扫描模块获取针对广电行业业务规范定制的代码扫描规则。代码扫描模块获取到相应的代码扫描规则后,对远程公共代码仓库路径下的工程进行源代码扫描。
代码扫描规则包含以下五部分:
(1)代码漏洞:是指代码中可能存在会对系统安全、性能方面产生重大影响的问题。例如,内存泄漏、加密算法失效等问题。
(2)bug:是指代码中可能存在会对业务逻辑产生影响的语法异常问题。例如,死循环、逻辑死锁、空指针异常等问题。
(3)规范性:是指代码中存在的语法不符合业界通用的语言规范问题。例如:变量命名规则、类方法注释、注解使用等问题。
(4)安全热点:是指代码中的一些安全敏感问题,例如:cookies的安全敏感,哈希数据的安全敏感等问题。
(5)sql语句:是指sql语句的使用规范问题,例如:运算符的使用等问题。
104)代码分析步骤:步骤103)的代码扫描模块完成扫描任务后即调起代码分析模块,依据代码分析模块中的分析规则对上一步中扫描的源代码进行漏洞、bug、代码规范性、安全热定等内容的逐项代码分析,并生成分析日志文件。
105)报告步骤:步骤104)的代码分析结束后,分析报告模块针对广电行业规范要求自定义质量阈值生成个性化、可视化的扫描报告,报告主要包含以下方面:
(1)代码扫描的覆盖率情况。
(2)代码中bug的数量比例。
(3)代码中漏洞的数量比例。
(4)代码的多余重复率。
(5)代码不规范的实例数量比例。
(6)单个类/接口/方法中的行数、是否写了注释等问题。
(7)代码的认知复杂度。
(8)自动生成的问题统计图表。
(9)问题代码的相应解决意见、建议等。
报告生成后,以单个报告级别的rbac用户角色权限设计方式分离权限,而后通过hook的方式(邮件、网页等多种形式)将报告发送给开发人员,开发人员根据报告内容修复源代码中的缺陷,即可再次提交代码重复步骤101),直至修复所有缺陷。
其中代码扫描的分析流程如下:
加载源文件、代码和分析规则的定义,判断规则是否依赖jar库,如果是依赖jar库则获取jar库规则并获取相应的代码分析规则,否则的话直接加载代码分析规则。将源文件抽象为文件树,提取文件树中的一个节点,结合加载的代码分析规则,得到一条代码分析结果,并进行记录。循环此判断过程,直至判断完所有节点。分析整理节点分析结果并结合源代码具体位置进行记录。
代码分析模块包括有规则插件对接模块,首先对代码分析模块的开发标准包括规则定义和结果进行确认。再依据代码扫描模块进行相应的规则定义,一般包括唯一可识别的key,相应的规则属性、名称以及严重程度分析等,定义相应规则逻辑和规则主体,定义规则的结果展示,相应结果的原因和解决建议等。最后将设定的规则接入到代码分析模块对应的数据库中。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员,在不脱离本发明构思的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明保护范围内。