来认识下代码质量管理的“利器”——SonarQube
Posted 研发云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了来认识下代码质量管理的“利器”——SonarQube相关的知识,希望对你有一定的参考价值。
一个软件开发项目的成败
很大程度上取决于其整体代码质量
面对越来越快速的版本迭代
和越来越复杂的系统逻辑
作为保证整个系统性能的重要因素之一
代码质量需要接受统一的管理
并将结果精准传递给相关开发者
SonarQube 正是在这种情况下
被纳入持续集成系统的
它以量化的方式来衡量代码质量
从而推动代码质量优化
SonarQube简介
SonarQube 是一个用于代码质量管理的开源平台,用于管理Java源代码的质量。通过插件机制,SonarQube 可以集成不同的测试工具、代码分析工具以及持续集成工具,比如 pmd-cpd、checkstyle、findbugs、Jenkins。SonarQube 通过不同的插件对这些结果进行再加工处理,并通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。同时 SonarQube 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用它。
SonarQube的插件
对包括 java、C#、C/C++、PL/SQL、Cobol、
JavaScrip、 Groovy 等等在内的
二十几种编程语言都提供支持
不过其所提供的分析方式有所不同
对于所有支持的编程语言,SonarQube 都提供源了代码的静态分析功能;
对于某些特定的编程语言,SonarQube 提供了对编译后代码的静态分析功能,比如 java 中的 class file 和 jar 和 C# 中的 dll file 等;
对于某些特定的编程语言,SonarQube 还可以提供对于代码的动态分析功能,比如 java 和 C# 中的单元测试的执行等。
另外
远程客户机可以通过各种不同的分析机制
将被分析的项目代码上传到 SonarQube server
并进行代码质量的管理和分析
SonarQube 还会通过 Web API
将分析的结果以可视化、可度量的方式
展示给用户
1、针对不遵循代码标准的问题:SonarQube 可以通过 PMD、CheckStyle、Findbugs 等等代码规则检测工具规范代码编写。
2. 针对潜在的缺陷 :SonarQube 可以通过代码规则检测工具检测出潜在的缺陷。
3. 针对糟糕的复杂度分布:文件、类、方法等如果复杂度过高将难以改变,并会使得开发人员难以理解它们。且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。SonarQube 能对此进行细致分析。
4. 重复:显然程序中包含大量复制粘贴的代码是质量低下的,SonarQube 可以展示源码中重复严重的地方。
5. 注释不足或者过多:没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降。而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。SonarQube 对这方面的检测管控也有涉及。
6. 缺乏单元测试:SonarQube 可以很方便地统计并展示单元测试覆盖率。
7. 糟糕的设计:通过 SonarQube 可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则;通过 SonarQube 可以管理第三方的 jar 包,可以利用 LCOM4 检测单个任务规则的应用情况,并检测耦合。
SonarQube的主要特性
通过插件扩展
SonarQube 强大的插件扩展机制能支持新的编程语言、添加规则引擎、计算更复杂的度量指标,目前已经有超过 50 个插件可用。
支持多种编程语言
SonarQube 目前已经支持超过20种的编程语言。
集成CI
SonarQube 对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用。
围绕着代码质量
SonarQube 是一个Web应用程序(B/S),规则、警告、例外、设置……都可以在线配置。通过自己的数据库,SonarQube 不仅仅能展示各项指标的综合结果,同时也能结合历史质量数据。
国际化
Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。
从总体发展趋势来说
除了本身强大的代码检查能力以外
对 DevOps 的支持能力
也正成为 SonarQube 今后发展的主要方向
最新版本的 SonarQube 支持 webhook 功能
可与 jenkins 等持续集成平台完美对接
有兴趣利用 DevOps 推动自身发展的开发者
不妨也对这个开源平台多多留心
获取更多产品介绍及业界动态
以上是关于来认识下代码质量管理的“利器”——SonarQube的主要内容,如果未能解决你的问题,请参考以下文章
增强 Python 代码的可读性,pycodestyle 利器来了!