代码质量审核和管理工具分析比较
SonarQube是市场上最受欢迎的代码质量和安全性分析工具。它在开源社区的支持下,目前可以分析和产生对超过25种编程语言的输出,这比市场上大多数工具都要高。它具有免费的社区版本和其他付费版本。利用SonarQube的主要好处是:
它集成了数千种自动的静态代码分析规则,旨在提高开发人员的代码质量和安全性,使得开发人员编写更加干净,更加安全的代码。主要提供了三个比较大的功能:
- 代码可靠性支持:提前捕获和提示代码中的错误,从而避免未定义的行为影响到终端用户。
- 应用安全支持:修复可能危害到应用程序的漏洞,并通过安全热点学习AppSec(简单理解就是会学习和识别新的漏洞)。
- 技术债务支持:确保管理的代码库干净并且可维护,以便提高开发人员的开发效率。
这可以帮助你确保代码在合并之前达到预期的质量!
- 只需一行命令即可轻松集成到CI/CD管道中。
- 也可以集成到Maven和Gradle构建周期中
- 检查几乎所有内容,如代码质量,格式,变量声明,异常处理等。
实际上,研发团队可以基于SonarQube做下面的事情:
- CI/CD流程加入一个SonarQube扫描的环节。
- 实施代码质量阈值,只有通过了这个质量阈值检测才能进入下一个流程。
- 代码质量低于阈值的项目要及时调整对应的代码。
质量阈值可以进行自定义,SonarQube中针对每个项目会有详细的面板信息,里面会给出项目当前的健康状态,不同级别漏洞的分类和明细,漏洞对应提交者等多维度的统计信息,方便进行问题的追踪和修复。举个例子,笔者在上一家公司项目上线需要跑一个流水线,而SonarQube设定了不同等级的阈值,对于老项目,会使用最低等级的阈值:阻断性的错误数量要求为0,对于一些新的项目,则严格要求质量如严重性的错误要求为0等,只要无法通过质量阈值检查,那么项目是无法上线的。
1.1 SonarQube使用
SonarQube提供不同类型的SonarScanner用于代码扫描和结果提交,这里以Maven为例。Maven的settings.xml需要引入下面的配置(注意父标签已经存在,重复添加父标签会导致异常):
<settings> <pluginGroups> <pluginGroup>org.sonarsource.scanner.mavenpluginGroup> pluginGroups> <profiles> <profile> <id>sonarid> <activation> <activeByDefault>trueactiveByDefault> activation> <properties> <sonar.host.url> http://myserver:9000 sonar.host.url> properties> profile> profiles>settings>
需要被扫描的项目中,需要引入Maven插件sonar-maven-plugin,当前最新版本为:
<plugin> <groupId>org.sonarsource.scanner.mavengroupId> <artifactId>sonar-maven-pluginartifactId> <version>3.7.0.1746version>plugin>
完成配置后,只需要在项目中执行命令进行扫描即可,首次执行会比较缓慢,因为需要下载大量的规则库和插件:
# 不指定插件版本执行mvn clean installmvn sonar:sonar# 或者指定插件版本执行mvn org.sonarsource.scanner.maven:sonar-maven-plugin:${插件的版本号}:sonar
此外,可以通过pom文件中的
<properties> <sonar.host.url>[...]sonar.host.url> <ssonar.projectKey>[...]sonar.projectKey> <sonar.projectName>[...]sonar.projectName> <sonar.projectVersion>[...]sonar.projectVersion> <sonar.login>[...]sonar.login> <sonar.password>[...]sonar.password> <sonar.sourceEncoding>[...]sonar.sourceEncoding> .......properties>2、DeepScan
DeepScan擅长扫描Javascript代码存储库。它能够处理几乎所有javascript框架的动态代码质量检查。
它为你提供了一个出色的仪表板,可以在一处管理和维护所有项目以及代码质量等级。使用Deepscan的主要好处包括:
- 提供随时间扫描数据的图形视图
- 有助于分析和跟踪代码管理过程的进展情况
- 对于在单个平台上进行组织范围的代码质量审核很有用
- 自动扫描存储库
- 可在云和本地上运行
Klocwork可以对几乎任何大小的项目执行静态代码分析。使用Klocwork的主要好处是它可以轻松地与Visual Studio Code IDE,Eclipse,IntelliJ等集成。这使开发人员更容易使用Klocwork。此外,它也可以集成到CI/CD管道中,以确保交付前的代码质量。它支持C,C#,C ++和Java。
4、CodeSonarCodeSonar是一种统计代码分析工具,可以从计算角度分析代码。它能够从你的代码中开发模型,分析它们的潜在执行威胁,例如锁死,内存溢出,空指针,数据泄漏以及可能难以捕获的许多此类程序错误。
- 它完成的代码扫描比其他代码更深入。
- 能够检测到比其他工具多3-5倍的缺陷
- 它可以构建自己的函数调用图,以分析完整的代码模型并提供有关质量的输出。
JArchitect主要致力于Java语言中的代码分析。JArchitect是用于分析的最详尽的Java代码分析工具。JArchitect被三星,英特尔,LG,IBM,谷歌等巨头使用,这也从侧面印证了该工具的出色程度。
6、FortifyMicro Focus的Fortify专注于扫描代码库中的安全漏洞。它着眼于已知的安全漏洞以及可能存在问题的任何恶意软件或损坏文件的存在。一些不错的功能包括:
- 自动扫描代码
- 涵盖几乎所有编程语言
- 提供解决漏洞的建议
- 提供丰富的代码分析,以帮助更快地解决问题
- 与流行的CI/CD工具轻松集成
Codecov是用于管理代码库以及使用单个实用程序进行构建的综合工具。它分析推送的代码,执行所需的检查,并在需要时自动合并它们。下面列出了一些其他功能:
- 单行命令可以扫描,分析,生成报告并将其合并
- 可与几乎所有流行的CI/CD工具集成
- 支持30多种编程语言
- 将报告集成到Github存储库中,以简化代码审查