大型网站重构指南 第1.1部分:代码静态分析 SonarQube 指南

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 大型网站重构指南 第1.1部分:代码静态分析 SonarQube 指南

在上一篇文章中介绍了代码重构指南的理论部分。

这篇文章是一些实战的内容,作为上一篇文章内容的补充。

我会在本文中介绍最流行的代码静态分析工具 SonarQube 的搭建和使用。

ichati.cn 的前后端都使用了 SonarQube 做代码质量分析。它帮我们发现了项目中很多问题,对项目质量很有帮助。


SonarQube 介绍


就像 Sonar 自己所宣传的那样,SonarQube 是代码静态分析这个领域中最强者之一,是行业的标准。

它的客户不仅有 Ebay、Microsoft、Hilton、Dell、Intel 等国际大厂,甚至包括 FBI、NASA、T- Moblie、MIT 这些政府、高校、通信等各大行业的顶级组织和机构。

据 Sonar 称,它们共清理了超过 5000 亿行代码。

SonarQube 的商业模式中规中矩。

和 strapi、discourse 这些开源项目的模式几乎一摸一样。都提供了开源版本和收费版本。

SonarQube 分为4 个等级。

社区版、开发版、企业版和数据中心版。

其中社区版是免费的。开发版是每年 150 美元、企业版是每年 20000 美元。数据中心版是每年 130000 美元。

可以看到,SonarQube 的定价还是非常高的。像 ichati.cn 这种小型团队,最多只能接受 150 美元的开发版。


前置条件与安装


SonarQube 的安装方式分两种。一种是 Docker,一种是压缩包安装。

以下是压缩包安装的方式。

使用 SonarQube 需要准备几个工具。Java、PostgreSQL、浏览器。


Java


SonarQube 使用 Java 编写,所以需要依赖 Java 环境。

目前最新版本的 SonarQube  是 10,这个版本必须使用 Java 17 版本。经过测试,Java 11 和 20 都不支持。

Java 17 下载地址:

www.oracle.com/java/techno…

在 terminal 运行:


java --version

确保 Java 版本正确。

image.png


PostgreSQL


SonarQube 在运行时会用到数据库,最受支持的数据库是 PostgreSQL。

除了 PostgreSQL,还可以选择 Oracle。MySQL 曾经也受到支持,但是最新版本的 SonarQube 已经不支持 MySQL 了。

几乎支持所有版本的 PostgreSQL。


SonarQube


下载 SonarQube。

SonarQube 10 下载地址:

www.sonarsource.com/products/so…

SonarQube 中会包含三个组件,分别是 CI/CD、主Server(WebServer、计算引擎和 SearchServer) 和 DatabaseServer。


SonarScanner


下载 SonarScanner。

SonarScanner 下载地址:

docs.sonarqube.org/10.0/analyz…

Sonar Scanner 下载完成后,需要把解压目录下的 /bin 目录添加到环境变量中,这样我们就可以直接通过命令行运行 SonnarScanner 了。

运行命令验证配置是否正确。


sonar-scanner -h

image.png


配置


在 SonarQube 解压目录中的 /conf/sonar.properties 文件中写入必要的配置。

首先这三项是必须的。分别是数据库的账号、密码和 url。


sonar.jdbc.username=sonarqube
sonar.jdbc.password=mypassword
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube

另外还会有一些可选项,比如 IP、端口、上下文之类的。


sonar.web.host=0.0.0.0
sonar.web.port=9200
sonar.web.context=


启动项目


每个操作系统的启动命令略有不同,以下是各系统的启动命令:

  • Linux 上:<安装目录>/bin/linux-x86-64/sonar.sh start
  • macOS 上:<安装目录>/bin/macosx-universal-64/sonar.sh start
  • Windows 上:<安装目录>/bin/windows-x86-64/StartSonar.bat

启动成功后会在之前配置的 IP 端口上运行 WebServer。默认是 http://127.0.0.1:9000

默认账号密码是 Admin/Admin。

第一次登陆系统会提示修改密码。


分析项目


进入系统后创建项目,点击 create project,选择 Manually。

image.png

输入项目名、项目 key 和对应的分支。

image.png

创建完成后会进入项目主界面。

image.png

它可以从多个地方分析项目,这里我们选择本地项目 Locally。

选择 token 名称和过期时间,它会帮我们生成一个 token。

image.png

第二步是选择分析的语言和操作系统,它会生成对应的扫描命令。

image.png

它把参数放到了命令行中,其实我们可以通过另一种方式更方便的管理参数。


sonar.projectKey=ichati
sonar.sources=.
sonar.host.url=http://localhost:9200
sonar.token=YOUR_TOKEN

这样就可以直接在项目根目录下运行分析命令了。


sonar-scanner

image.png

稍等片刻,分析完成后,浏览器会自动刷新,展示分析结果。

image.png

可以看到分析的结果非常清晰。

有 Bugs、Vulnerabilities(漏洞)、Debt(技术债务)、Code Smells(代码的坏味道)、重复代码块和重复代码行等信息。

每一项指标都可以点击进去,查看具体的文件、行数和原因。

image.png

它甚至还对修复问题的时间做出了预测。针对每一项问题我们都可以进行评论和跟踪。

作为项目管理人员来说,这些功能都非常贴心。

我们对代码进行修复后,可以再次进行扫描来查看最新的代码健康状况。SonarQube 提供了非常强大的可视化来监控项目随着时间的变化。

SonarQube 的能力还远不止于此,它还可以与 CI/CD、DevOps 平台进行更深度的集成,比如 Jenkins、GithubActions 等,从而做到全方位分析系统的代码质量。

但是 ichati.cn 目前使用的 CICD 比较冷门,所以并没有在这方面和 SonarQube 做集成,所以这部分的内容就不展开讲了。

篇幅所限,本文暂时结束。

后面会持续更新,让我们一起期待《大型网站重构指南》的下一篇。

如果你对最新的技术感兴趣,特别是对 Web3、AI 相关的内容感兴趣,可以添加我的微信 LZQ20130415,拉你进群交流。



相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
Java 测试技术
Spock单测利器,用了都说好
参考Spock单元测试框架介绍以及在美团优选的实践最近发现了一种写法简洁高效,一个单测方法可以测试多组测试数据,且测试结果一目了然的单测框架Spock。Spock国外的测试框架,其设计灵感来自JUnit、Mockito、Groovy,可以用于Java和Groovy应用的测试。尽管Spock写单测,需要使用groovy语言,但是groovy语言是一种弱类型,写法超级简单,我也是零基础的groovy新
987 0
Spock单测利器,用了都说好
|
Java p3c
sonar入门:使用阿里规范扫描代码质量
sonar入门:使用阿里规范扫描代码质量
1585 0
sonar入门:使用阿里规范扫描代码质量
|
监控 前端开发 JavaScript
AST 代码扫描实战:如何保障代码质量
2020 年 618 大促已经过去,作为淘系每年重要的大促活动,淘系前端在其中扮演着什么样的角色,如何保证大促的平稳进行?又在其中应用了哪些新技术?淘系前端团队特此推出「618 系列|淘系前端技术分享」,为大家介绍 618 中的前端身影。 本篇来自于频道与D2C智能团队的菉竹,为大家介绍本次 618 大促中是如何用代码扫描做资损防控的。
3278 0
AST 代码扫描实战:如何保障代码质量
|
3月前
|
Java Android开发
Android项目架构设计问题之要提升代码的可读性和管理性如何解决
Android项目架构设计问题之要提升代码的可读性和管理性如何解决
40 0
|
4月前
|
测试技术
软件交付问题之在开发过程中,发现自己的代码风格与系统现有代码风格不匹配时,如何解决
软件交付问题之在开发过程中,发现自己的代码风格与系统现有代码风格不匹配时,如何解决
|
5月前
|
测试技术 持续交付 API
Airtest脚本的重构与优化:提升测试效率和可读性
通过对Airtest脚本的重构与优化,我们不仅能提升测试效率,还能增强脚本的可读性和可维护性。这些改进将有助于应对不断变化的测试需求,为保证软件质量提供坚实的支持。记住,优化是一个持续的过程,定期回顾和调整测试脚本是保持测试项目健康的关键。希望以上分享能帮助大家在自动化测试的道路上更进一步。
|
6月前
|
数据可视化 搜索推荐 JavaScript
SonarQube:解析代码质量,提升开发效率
在软件开发领域,代码质量管理是至关重要的。本文将介绍静态代码分析工具 SonarQube 的概念与实践,探讨其在代码质量管理中的作用和优势。我们将深入理解 SonarQube 的工作原理,了解如何通过该工具检测、评估和改善代码质量,以提高软件开发效率和可维护性。
|
6月前
|
安全 数据可视化 Oracle
提高代码质量,从静态代码分析工具SonarQube开始
在软件开发过程中,代码质量是至关重要的。而静态代码分析工具SonarQube可以帮助开发人员有效地管理代码质量。本文将介绍SonarQube的概念和实践,以及如何使用它来提高代码质量。
336 1
|
6月前
|
JSON 缓存 前端开发
编写代码前,如何规避尽可能多的前端bug?
编写代码前,如何规避尽可能多的前端bug?
70 0
|
测试技术
jira学习案例128-传统单元测试2
jira学习案例128-传统单元测试2
70 0
jira学习案例128-传统单元测试2