工具列表

Tool list

Synopsys Coverity专家:在软件缺陷检测中如何做到游刃有余?(下)

来源:电子工程世界
2020-07-02


编者按

本文将用户使用Coverity的过程分成四个阶段,应该来说,这四个阶段是每个用户在使用Coverity的过程中都需要经历的。如果你是Coverity用户,参照此文,看看自己的Coverity环境还在哪个阶段,可以做哪些方面的提高。但不管处在哪个阶段,都无需急躁,按照文中的路线对Coverity的相关技术和知识熟悉,相信最终都能将Coverity打造成一款符合自身产品开发流程的源代码缺陷检查利器。

作者:Synopsys技术顾问-Johnny Huang


作为一个源代码缺陷静态检测工具,Coverity至今已经走过15个年头。在15年中,Coverity 作为程序代码的分析工具,其代码分析能力随着程序开发语言的不断丰富而持续演进;同时作为软件开发流程中的工具之一,Coverity的功能也随着SDLC(Software Development Life-Cycle: SDLC) 的不断成熟而持续增加。迄今为止,Coverity的分析能力可以支持多达十七种编程语言,产品功能可以保证完美的融入到软件的开发流程中,从而提高用户的开发效率和产品质量,同时大大降低了产品发布后的安全风险。但话说回来,要玩转一个功能强大的工具往往是需要投入不少精力和时间,换句话说,就是想要用好coverity是需要一定的学习过程的。


作为一个Synopsys的技术顾问,在和客户的接触中,发现很多用户在正式拿到license后,由于缺乏对Coverity的一个整体性知识和整合思路,没能很好的将Coverity为自己所用。本文承接前篇文章《Synopsys Coverity专家:在软件缺陷检测中如何做到游刃有余?(上)》,介绍用户刚开始使用Coverity的时候都需要经历的四个阶段。


一般来讲,一个新用户在购买Coverity后的应用流程是:在前期,Synopsys的技术人员会协助用户做初步的部署和配置,以保证用户能把Coverity用起来;随后用户根据自身的实际情况再对Coverity环境做调整和相应配置。到实际应用阶段,还是需要用户掌握Coverity的使用方法和相关知识,才能真正的把Coverity用好。这个过程就好比一个新手开车买了一台超级跑车,初期可能有厂家帮助调试车子,在路上带一带,但最终还是需要驾驶员自己掌握跑车的驾驶技术,才能在路上一骑绝尘。所以,在拿到Coverity后,切勿操之过急,磨刀不误砍柴工。笔者推荐的做法是,先对Coverity做一个整体的了解和熟悉,再结合自身的开发环境,制定Coverity的整合计划,这样就可以在日后产品使用时减少不少麻烦。


本文将用户使用Coverity的过程分成四个阶段,应该来说,这四个阶段是每个用户在使用Coverity的过程中都需要经历的。如果你是Coverity用户,可以参照此文,看看自己的Coverity环境还在哪个阶段,可以做哪些方面的提高。但不管处在哪个阶段,都无需急躁,按照文中的路线对Coverity的相关技术和知识熟悉,相信最终都能将Coverity打造成一款符合自身产品开发流程的源代码检查利器。


阶段一

初入桃花源:看山是山,看水是水


“初入桃花源”基本上是绝大多数用户在刚接触Coverity时的感觉。包括笔者本人,在Coverity学习的初期,都被其方便的使用流程(Build-Analysis-Commit),强大的分析能力以及各种惊艳的功能吸引。


比如在使用流程上,Coverity不需要用户对工程的源代码做任何额外配置和修改,只需要配置好编译器。在编译代码时,Coverity就能自动感知源代码的编译命令,并将其捕获转换成自身的编译命令,然后进行下一步的分析处理。


在分析能力上,Coverity支持全路径扫描,即对每一个文件、函数、路径做分析,找到缺陷。拥有近200个检查器供用户选择,可以检查出CWE的各类缺陷,根据各类行业标准做缺陷分析,比如汽车行业的MISRA标准。还有查找项目代码的各种严重安全漏洞如XSS, Injections, CSRF,内存泄漏,资源泄漏,死锁等更是Coverity的拿手好戏。


在产品功能上,Coverity可以与软件生命周期工具无缝集成,比如通过与Jenkins,JIRA, eclipse, git/svn的集成,从而打造出自动开发,缺陷自动检测工作流。如果作为一个开发人员,Coverity在缺陷管理上给出的清晰扫描结果和修复建议肯定能让你在最短时间内定位,解决缺陷(如下图所示)。



综合以上,这是刚接触Coverity的阶段,开始了解Coverity的各项功能和能力,并且慢慢对Coverity有了一个初步印象。这个阶段可以称为“看山是山,看水是水“。


阶段二

百转千回:看山不是山,看水不是水


在部署的初期,为了把Coverity有效整合的产品开发流程中,需要用户结合自身的应用场景,对Coverity做相应的配置和部署。但由于不少公司自身的开发环境、流程就比较复杂,加上用户对Coverity的配置并不熟悉,在将Coverity的整合过程中可能会碰到诸多困难。比如编译器配置不全导致分析结果不理想;对自身开发流程不熟悉从而导致Coverity的部署不容易推进;由于项目庞大复杂,加上Coverity后导致编译分析时间过长等等。这个时候用户又可能因为项目压力而陷入手忙脚乱中,各种问题无从下手。遇到这种情形,可谓是进入了使用Coverity的第二阶段——”百转千回:看山不是山,看水不是水“。


在这个阶段,笔者建议用户不需要心急,就像文首提到的,Coverity作为一个功能完善的产品,想要玩转它,不是一蹴而就的。这需要用户同时了解自身的的开发环境和Coverity的相关知识,然后对部署整合做整体计划,并且有必要时咨询Synopsys的相关技术人员,避免走弯路。


这里同时可以参考笔者的前篇文章:《Synopsys Coverity专家:在软件缺陷检测中如何做到游刃有余?(上)》,可以减少一些在Coverity的使用上的麻烦。


阶段三

渐入佳境:看山还是山,看水还是水


百转千回,克服第二个阶段的重重困难后,终于把Coverity集成到自身的开发环境和流程中,并能平滑使用。在符合自身预期的条件下,Coverity能够在接受的时间内对项目做分析,项目团队拿到Coverity的分析结果后能够对缺陷做triage,Coverity的管理员可以对编译结果做Audit,对Coverity Connect的管理界面也逐步熟悉,能够对project和stream做管理,能够创建符合团队需求的视图。在这个阶段,Coverity逐步展露其价值所在,同时用户也逐步对Coverity的各项功能和能力的认识逐步加深。


到这里,用户在Coverity的使用上已经渐入佳境,重新“看山还是山,看水还是水”。


阶段四

信手拈来:采菊东篱下,悠然见南山


用户在平滑使用Coverity一段时间后,随着对Coverity的逐步熟悉,知道增加一个项目后需要在Coverity的分析端和服务端做哪些配置,怎么配置编译器;怎么根据自身的开发需要,筛选相应的检查器;如果对分析的特定需求,用户知道怎么去写function model或者用Coverity的sdk去写符合自身需求的checker(检查器)。在使用中碰到Coverity的相关问题,能够熟练查找Coverity的帮助文档解决,或者咨询Synopsys的技术支持工程师。


用户到了这个阶段,对Coverity的使用已经有相当掌握(Master Coverity) ,已经能够将Coverity为自己所用的,碰到问题或者对于自身新产生的需求知道寻求相应的路径解决。笔者将这个阶段称为“信手拈来:采菊东篱下,悠然见南山”。


综合以上,本文将用户在使用Coverity的过程分成四个阶段:从初入桃花源,百转千回;再到渐入佳境;经历了充分的磨合和学习之后,最终达到信手拈来,采菊东篱下,悠然见南山的境界。这可以说这是使用Coverity时必然会经历的四个阶段,同时也是我们接触一个新工具,认识一个新事物必然会经历的四个阶段。



关于Synopsys

Synopsys(Synopsys, Inc.,纳斯达克股票市场代码: SNPS)致力于创新改变世界,在芯片(Silicon)到软件(Software)的众多领域,Synopsys始终引领和参与全球各个科技公司的紧密合作,共同开发人们所依赖的电子产品和软件应用。Synopsys 是全球排名第一的电子设计自动化(EDA)供应商和全球排名第一的半导体接口IP供应商,同时也是软件质量和安全解决方案的全球领导者, 位列世界第15大软件公司,并荣选美国标准普尔500指数成分股龙头企业。Synopsys总部位于美国硅谷,成立于1986年,目前拥有11400多名员工,分布在全球100多个分支机构。2017年财年营业额预计26亿美元,拥有2600多项已批准专利。作为半导体、人工智能、汽车电子及软件安全等产业的核心技术提供商与驱动者,Synopsys的技术一直深刻影响着当前全球五大新兴科技创新应用:智能汽车、物联网、人工智能、云计算和信息安全。


自1995年进入中国市场以来,Synopsys已在北京、上海、深圳、西安、武汉、南京、厦门、香港、澳门九大城市设立机构,员工人数已达1098人,建立了完善的技术研发和支持服务体系,秉持“加速创新、推动产业、成就客户”的方针,与产业及合作伙伴携手共进、共同发展,成为中国半导体产业快速发展的优秀伙伴和坚实支撑。