前言
最近一段时间,我们团队在生产环境出现了几次线上问题,有部分比较严重,直接影响用户功能的使用,惹得领导不高兴了,让我想办法提升代码质量,这时候项目工程代码质量检测神器——SonarQube,出现在我们的视线当中。
正文
一 sonarqube是做什么的
SonarQube®是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码味道。它可以与您现有的工作流程集成,以实现跨项目分支和提取请求的连续代码检查。通过插件形式,可以支持包括 java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等二十几种编程语言的代码质量管理与检测。sonarqube可以从以下7个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量问题。
1.1 不遵循代码标准
sonarqube可以通过CheckStyle等代码规则检测工具规范代码编写。
1.2 存在的缺陷漏洞
sonarqube可以通过Findbugs等等代码规则检测工具检测出潜在的缺陷。
1.3 糟糕的复杂度分布
文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员 难以理解它们, 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。
1.4 重复
显然程序中包含大量复制粘贴的代码是质量低下的,sonarqube可以展示源码中重复严重的地方。
1.5 注释不足或者过多
没有注释将使代码可读性变差,特别是当不可避免地出现人员变动 时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。
1.6 缺乏单元测试
sonarqube可以很方便地统计并展示单元测试覆盖率。
1.7 糟糕的设计
通过sonarqube可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则 通过sonarqube可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测耦合。sonarqube可以很方便地统计并展示单元测试覆盖率。
总览:
在典型的开发过程中:
- 开发人员在IDE中开发和合并代码(最好使用SonarLint在编辑器中接收即时反馈),然后将其代码签入ALM。
- 组织的持续集成(CI)工具可以检出,构建和运行单元测试,而集成的SonarQube扫描仪可以分析结果。
- 扫描程序将结果发布到SonarQube服务器,该服务器通过SonarQube界面,电子邮件,IDE内通知(通过SonarLint)以及对拉取或合并请求的修饰(使用Developer Edition及更高版本时)向开发人员提供反馈。
SonarQube实例包含三个组件:
- SonarQube服务器运行以下过程:
- 提供SonarQube用户界面的Web服务器。
- 基于Elasticsearch的搜索服务器。
- 计算引擎负责处理代码分析报告并将其保存在SonarQube数据库中。
- 该数据库存储以下内容:
- 代码扫描期间生成的代码质量和安全性的度量标准和问题。
- SonarQube实例配置。
- 在构建或连续集成服务器上运行的一台或多台扫描仪可以分析项目。