摘要:在大型软件项目开发过程中,为了保证软件质量,除了对软件功能进行测试,同时也会引入源代码静态检查工具对源代码进行扫描,及时发现代码中的缺陷。Klockwork工具是Klockwork公司基于专利技术分析引擎开发的一款出色的静态分析软件。本文针对大型软件项目代码静态检查的发展趋势,从多人并行开发代码的流程出发,通过对比Klockwork提交即检查的方法,提出一种查询全量缺陷并对代码提交执行拦截的部署方法。希望能为软件项目开发的代码缺陷治理提供一种参考。本文首先在前言部分指出了当前软件项目在开发效率上的痛点,并提出快速治理的方法 。然后介绍了多人并行开发的代码提交流程,并详细介紹了Klockwork工具的部署方法和使用效果。最后总结Klockwork工具部署的意义。
关键词:VerifyCI Klockwork 代码安全
1 前言
在软件开发过程中,由其是多人同时开发时,由于每个人的编码习惯、能力大小、知识水平都有很大的不同,要想写出没有代码缺陷的软件几乎是不可能的。如果有些代码缺陷不能及时被发现,如空指针访问、数组越界、内存泄漏或溢出等,很可能会对软件的可靠性、稳定性造成很大的影响。Klockwork工具可以通过跟踪代码编译过程,分析出绝大部分的此类代码缺陷。不过对于大型软件项目,Klockwork工具对代码完成一次全量检查,将耗费大量的时间,根据Klockwork工具检查结果进行分析,从而对代码进行修改,修改后又要进行Klockwork工具的检查,这样的反复操作将使软件开发效率及其低下。也有软件项目采用Klockwork工具进行增量检查,增量检查需要保留上次的编译环境,而且需要同步全量检查结果,对环境的依赖太大,而且增量检查由于检查不全面,很可能会出现代码缺陷不能全部检查出来的情况。本文提出一种新的检查方法,既能不影响开发效率,又能保证检查出的代码缺陷没有遗漏。
2 方案设计
多人同时开发的大型软件项目,一般代码都是由专门的代码托管软件进行管理。现在最为流行的代码托管软件主要是gerrit软件,gerrit软件经常与jenkins软件联合管理代码的提交、验证等。
2.1 代码合入流程
如图1所示,在多人同时进行软件开发时,开发人员首先从代码库中将已经完成的存量代码更新到本地,然后就可以在存量的基础上进行代码开发,待本次代码开发完成后,将本次开发完成的代码提交到Gerrit,此时其他开发人员都可以通过Gerrit的web页面看到该次提交的代码内容,可以对该次提交进行评审,同时本次代码提交也会触发jenkins任务,即VerifyCI,VerifyCI负责拖取本次代码进行编译构建和其他检查,当代码评审和VerifyCI检查全部通过后,代码提交到Git库里,这是代码开发流程的整个过程。
2.2 Klockwork检查工具在VerifyCI中的部署
如图2所示,Klockwork检查代码库中代码的缺陷,检查动作可以定时器完成触发,也可以代码入库的动作触发。Klockwork检查任务被触发后,将从代码库中拖取代码进行扫描,Klockwork扫描会跟踪编译过程分析出代码中存在的缺陷,并将缺陷生成报告以web站点的方式查看,在VerifyCI中并不直接对代码进行Klockwork扫描,而是通过Klockwork站点的api接口查询存量代码的缺陷治理情况。为了能推动开发人员尽快处理代码缺陷,在VerifyCI中查询到存量代码有未治理的代码缺陷时,使本次VerifyCI构建失败,并将失败结果回填给Gerrit,从而限制代码入库。这种部署方式即可以快速得到VerifyCI的构建结果,又可以推动开发人员积极治理存量代码中的缺陷。
2.3 Klockwork检查效果
当VerifyCI查询到存量代码存在代码缺陷未治理时,要通过邮件形式给出具体的缺陷信息,以方便开发人员分析和治理。由于在VerifyCI中查询到未处理的代码缺陷时,将不允许新的代码合入,这样开发人员将不得不优先处理存量代码的缺陷问题。极大的加快了代码缺陷的治理速度,提交软件质量和开发效率。
3 总结
综上所述,在软件开发过程中,为了提高代码质量,一方面要努力提高开发人员的代码设计能力,尽量做到按规范设计代码,努力减少因不规范的编程行为而引入代码缺陷。另一方面,要通过部署各种代码检查工具来为软件质量保驾护航,尽量早的发现代码缺陷,并能够快速进行治理。本文设计的Klockwork工具部署方案同样适用于部署Coverity等检查工具。
参考文献
[1]快速检测代码缺陷与安全漏洞的方法与实践[J].陈学勤.指挥信息系统与技术. 2010(05).
[2]Klocwork在军用软件测试中的应用[J].梅磊,刘先博.航天标准化.2017(03).
[3]麒麟系统下Klocwork的静态分析方法[J].马萌,谷伟,赵煜.计算机与网络.2019(20).
[4]关于Klocwork测试规则的二次开发测试规则的本地化[J].王宁.电子世界.2013(17).
[5]基于Klocwork的C/C++软件静态检查[J].姜文,刘立康.航空计算技术.2016(04).
作者简介
李学强(1981.9.20-)男,汉,山东菏泽人,本科学历硕士学位,中兴通讯股份有限公司,助理工程师,研究方向:操作系统及支撑软件开发。