使用了这个神器,让我的代码bug少了一半(上)

简介: 使用了这个神器,让我的代码bug少了一半

前言


   最近一段时间,我们团队在生产环境出现了几次线上问题,有部分比较严重,直接影响用户功能的使用,惹得领导不高兴了,让我想办法提升代码质量,这时候项目工程代码质量检测神器——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可以很方便地统计并展示单元测试覆盖率。


总览:

36.png

在典型的开发过程中:

  1. 开发人员在IDE中开发和合并代码(最好使用SonarLint在编辑器中接收即时反馈),然后将其代码签入ALM。
  2. 组织的持续集成(CI)工具可以检出,构建和运行单元测试,而集成的SonarQube扫描仪可以分析结果。
  3. 扫描程序将结果发布到SonarQube服务器,该服务器通过SonarQube界面,电子邮件,IDE内通知(通过SonarLint)以及对拉取或合并请求的修饰(使用Developer Edition及更高版本时)向开发人员提供反馈


SonarQube实例包含三个组件:

35.png

  1. SonarQube服务器运行以下过程:
  • 提供SonarQube用户界面的Web服务器。
  • 基于Elasticsearch的搜索服务器。
  • 计算引擎负责处理代码分析报告并将其保存在SonarQube数据库中。
  1. 该数据库存储以下内容:
  • 代码扫描期间生成的代码质量和安全性的度量标准和问题。
  • SonarQube实例配置。
  1. 在构建或连续集成服务器上运行的一台或多台扫描仪可以分析项目。
相关文章
|
Oracle Java 关系型数据库
使用了这个神器,让我的代码bug少了一半(下)
使用了这个神器,让我的代码bug少了一半(下)
使用了这个神器,让我的代码bug少了一半(下)
|
4月前
|
缓存 JavaScript 前端开发
前端10种火火火火的优化代码性能方法!避免代码跑起来像蜗牛!
前端10种火火火火的优化代码性能方法!避免代码跑起来像蜗牛!
|
7月前
|
消息中间件 前端开发 关系型数据库
🤔️测试问我:为啥阅读量计数这么简单的功能你都能写出bug?
🤔️测试问我:为啥阅读量计数这么简单的功能你都能写出bug?
|
7月前
|
算法 程序员
为何程序员在编写程序时难以一次性将所有代码完美无瑕地完成,而是需要经历反复修改Bug的过程?
为何程序员在编写程序时难以一次性将所有代码完美无瑕地完成,而是需要经历反复修改Bug的过程?
75 7
|
Go
选择困难?试试libhunt
选择困难?试试libhunt
110 0
|
缓存 测试技术 数据库
【测试基础理论】卡死我了!这算bug么?(非功能-效率性)
【测试基础理论】卡死我了!这算bug么?(非功能-效率性)
|
Java API
本来想用“{{”秀一波,结果却导致了内存溢出!(下)
本来想用“{{”秀一波,结果却导致了内存溢出!
176 0
本来想用“{{”秀一波,结果却导致了内存溢出!(下)
|
Java
本来想用“{{”秀一波,结果却导致了内存溢出!(上)
本来想用“{{”秀一波,结果却导致了内存溢出!
133 0
本来想用“{{”秀一波,结果却导致了内存溢出!(上)