[聚合文章] OpenCover团队的代码静态分析方案:Coverity VS SonarQube
在软件开发生命周期中,尽早找到和修复Bug已经成为一个刚性需求,因此也带来代码静态分析技术(SAST)的引入和不断发展。因其可以在早期编码阶段发现崩溃、多线程和注入等质量与安全类型问题,同时又能够与Devops,CI/CD,Agile各项技术紧密结合,所以各大中小型研发团队都已经用上了各式各样的静态分析工具。换句话说,用好SAST工具已经成为每一个研发团队都需要掌握的技能,这篇文章用Shaun Wilde(以下简称SW)介绍的OpenCover团队代码静态分析经验,抛砖引玉来聊一聊测试开发技术的SAST技术。
关于OpenCover项目
OpenCover是知名的C#代码覆盖率统计工具,支持.NET 2以上版本的32位和64位平台(包括Silverlight),支持分支和判定覆盖率。该项目是一个开源项目,由众多开源成员共同维护。
OpenCover的代码质量管控背景-SW
我加入OpenCover等开源项目工作组的其中一个原因是,我可以尝试一下新的理念和技术,比如TDD(测试驱动开发)技术或新的Mock框架,有时甚至是工具; 有些是非常成功的尝试,另外一些是非常成功的“失败”尝试; 我使用SpecFlow进行单元测试的实验很有趣,但是我再也不会这么做了。但是对SpecFlow所能做到事情上的认知却有了很大的提高。
工具能够帮我们做出更好的软件,使用的工具越好,研发团队就会越知道如何使用这些工具 – 来成为一个更好的程序员,因为你有最好的工具(并且花了很多钱来用上这些工具)。当然即使你不学习如何正确使用它们(或者基本了解),你也可以用其他方法节省成本。但是事实上,在开源世界中,缺乏资金是我一个普遍问题,虽然我们一直在耗费宝贵的时间,用我们的工作电脑、那些昂贵的IDE和额外的工具来执行开发。但我们确实想告诉伙伴们,我们已经亲自花了大力气来发布更好的代码,无论是从技术上还是从硬件基础设施上。值得庆幸的是,.NET开发人员现在可以用Visual Studio 社区版进行开发,这样能够节省100美元的代价,但是代码质量和安全工具确实一直处于比较昂贵的范围,对于程序员来说遥不可及。但是在大多数情况下,有一些很好的代码质量工具可供开源开发者免费使用,也相对容易设置。
OpenCover 与Coverity-SW
Coverity是第一个被集成到OpenCover Pipeline的质量度量工具;它能够处理 C#,C++,Java,JavaScript,Android,Objective-C和其他许多类型的语言。OpenCover团队的成员在很早之前就开始建议使用这个工具- 我们通过Coverity定位到了一些代码中非常严重的高等级问题,后来花了一些时间才集成到pipeline里 - 大约一天的本地配置、建立脚本等工作,让它能够运行在AppVeyor自动化集成环境中。现在我回头了看了看这些历史,有些后悔等了这么久才完全集成 - AppVeyor已经预装了Coverity他们的镜像中,也把Coverity配置到了环境变量里,所以这其实是一个很简单的任务。成功地完成了第一次扫描分析后,我们得到了一个清晰而且功能强大的仪表板(Dashboard),能够很方便的管理缺陷并设置例外状况,如按时间维度的修复趋势与缺陷密度(见如下两图)。