【51CTO.com快译】众所周知,静态代码分析可以协助开发人员改进程序代码的质量。而在DevOps实践中,我们通过将静态分析集成到正在开发的工作流程中,从而在开发的早期阶段解决代码的质量问题。当然,这也使得持续集成(CI)流程增加了一个额外的阶段--每当有新的代码产生合并请求时,CI服务器(或第三方服务)便会开始分析代码的质量,并将结果放入合并请求中,以供提交者和代码审查者使用。
为了让审查者更需专注于代码本身,我们往往需要自动化的代码审查工具,与开发周期相集成,以实现即使新的代码尚未合并到主代码库中,也能够执行代码审查。您可以根据实际项目所用到的技术栈,从如下七种工具中进行选择,并无缝地集成到现有的工作流中。
1. DeepSource
DeepSource是一种静态分析工具,可用于查找反模式、代码缺陷、运行性能等方面的问题。除了代码检测,DeepSource还会生成并跟踪诸如:依赖项计数、文档覆盖率等指标。DeepSource的Autofix功能可以提出各种修复建议,并使用户能够针对常见问题创建提取请求。目前,DeepSource能够与Bitbucket、GitHub或GitLab等帐户轻松地相整合。此外,DeepSource还提供自动化的拉取请求,以方便分析器扫描已更改的文件,并将识别出的问题,直接报告并发送给UI。
主要特点
相对其他工具,其分析器能够检测到更多的缺陷。
能够自动修复各种问题,以及格式化代码。
提供更好的集成和开发人员体验。
能够保证误报率低于5%。
可选择性地忽略某些暂不处理的问题。
缺点
不支持PHP语言。
价格:DeepSource可被免费用于开源组织、学生组织、以及非营利组织。其售价为每用户每月12美元。
2. Codacy
Codacy能够协助开发人员通过解决程序中的技术难题,来提高代码的质量。它可以从代码复杂性、兼容性、易错性、安全性、以及代码样式等方面,来衡量代码的质量。Codacy也可以根据待实现的项目目标,按照文件或类别,来提供需要遵循的步骤、以及解决问题的建议。
主要特点
能够从代码样式、安全性、错误倾向性、性能、以及未用到的代码等类别跟踪问题。
可分析提交和拉取请求。
能够对提交和拉取请求实现自动注释。
缺点
缺乏与其他SaaS服务的集成,包括:Sonatype、Blackduck、由AWS API Gateway提供的API QOS指标,以及UI/E2E的各种Saas测试服务。
无法加密项目的相关信息,或限制对UI源代码的访问。
其用户社区相对较小。
价格:Codacy既提供免费的开源计划,又具有起售价为每用户每月15美元的高级计划。
3. Code Climate
Code Climate既是一种代码覆盖率工具,又是一种自动化的源代码审查器。通过与GitHub等平台的集成,它能够在持续集成的过程中,针对代码库的重复性、复杂性、样式等因素进行维护检查。同时,Code Climate能够根据各种既定的标准,对目标代码环境的可维护性,进行从A到F的分级。
主要特点
对拉取请求提供代码审查级的注释。
能为每个拉取请求生成测试覆盖率。
使用CLI或IDE集成的方式,在本地执行分析。
缺点
无法预测API。
不支持Objective-C。
其报告中只有带有源代码的标头,不提供对于发现问题的详细描述。
只能将所有问题都以分页列表的形式显示,无法提供搜索/过滤。
价格:Code Climate对于10个用户数以下的团队是免费的,其入门版的起售价为449美元,而企业版的起售价为649美元。
4. Codebeat
作为一种自动化代码审查工具,Codebeat可以将静态代码分析的结果,收集到一个包含了代码风格、安全漏洞、待改进代码等信息的实时报告中。与流行工具--Code Climate的A到F分级标准类似,Codebeat使用的是4.0的等级系统。不过,与Code Climate不同的是,Codebeat通过使用算法,来分析代码的复杂性。
主要特点
作为一款出色的团队管理工具,它可以为项目中的流动人员分配不同的访问级别。
能够与Slack、GitHub、Bitbucket和GitLab相集成。
缺点
无法检测安全相关问题。
不支持CSS/SCSS的分析。
价格:Codebeat公共存储库是免费的,而私有存储库则需每月收费20美元(https://codebeat.co/pricing)。
5. Sonarcloud
Sonarcloud是一种基于云的代码质量工具与安全服务。它通过强大的静态代码分析能力,来跟踪成千上万种难以被发现的错误和质量问题。同时,它也能根据检测报告,估算代码的覆盖率。Sonarcloud为分析器提供了大量的规则,其中包括有关代码风格、错误、以及漏洞等方面的186种不同类型的JavaScript规则。
主要特点
当检测到特定的违规代码时,它能够阻断拉取请求。
能够发送带有注释的分析报告。
如果代码质量或安全性与需求不匹配,则会将管道设置为失败。
缺点
不提供对于已编译语言的自动扫描。
价格:Sonarcloud的社区版是免费且开源的。如果用户的代码行数(LOC)达到100k,则起售价为每月10欧元。
6. Embold
作为一个静态分析平台,Embold提供了AI辅助代码测试,可识别代码的脆弱性与漏洞,并能提出相应的解决方案。它不但提供了云端和本地实例,而且为Intellij IDEA提供了免费的插件,因此您可以使用其快速扫描程序,来检测Java代码中潜在的错误、漏洞和代码风格,并在团队编辑代码时提供实时的反馈。通过其评级功能,用户可以一次性了解代码的整体质量,并获悉存在问题的区域。
主要特点
其质量门(Quality Gates)功能允许用户设置存储库的质量阈值。
其推荐引擎(Recommendation Engine,beta版)可以通过“学习”曾在代码库中发现到的问题,提前在新的代码被提交之前,解决各种潜在问题。
其反模式可视化(Antipattern Visualization)功能能够以图形化的表示形式,解读各种反模式。
缺点
售价偏高。
价格:Embold的基本版本是开源免费的。如果用户的代码行数(LOC)达到500k,则起售价为每月10欧元。
7. CodePeer
CodePeer是针对Ada和Java语言的代码审查工具。通过逐行分析代码的方式,它既能发现运行时可能出现的失败点,又能发现疑似多余的、以及不能被代码库访问的程序代码。此外,CodePeer还能够在前置条件和后置条件的环境中,对每个子程序进行详细分析,以发现潜在的错误和漏洞。
主要特点
可作为独立工具运行在Windows和Linux平台上。
可被用于集成测试和单元测试。
随附有诸如编码标准检查器(GNATcheck),指标计算器/报告器(GNATmetric)等其他工具。
缺点
售价较贵。
用户社区较小。
价格:请参见链接--https://www.adacore.com/pricing。
小结
综上所述,我们在选择自动化持续代码审查工具时,需要综合考虑到如下方面:
可否分析具有大量规则的静态代码。
是否支持集成的种类与数量。
是否有完备的文档。
是否易于使用、且灵活。
各种更新策略。
许可证的费用。
客户支持的力度。