前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >年终奖翻倍了,就因为用了它

年终奖翻倍了,就因为用了它

作者头像
iiopsd
发布2022-12-23 08:55:33
7560
发布2022-12-23 08:55:33
举报
文章被收录于专栏:iiopsd技术专栏iiopsd技术专栏

背景

今年年终翻倍了,可能在大家眼里都不是个事,但是对于我来说确确实实翻倍了。主要原因还是因为主导项目使用了Sonar,提高了开发效率和代码质量为我加了不少分,废话不多说,开搞。

Sonar 介绍

Sonar 为代码的质量管理提供了一个平台,对传统的代码静态检测如 PMD、FindBugs 等工具进行整合,可以说是目前最强大的代码质量管理工具之一。——Sonar 官网介绍

Sonar 大致分为IDEA 插件版本的SonarLint 和带有非常友好功能强大GUI 的SonarQube 代码质量平台,完全能满足我们的需求。并且Sonar 提供了面向gitlab、jekins、maven 的无缝对接支持,是当下最活跃热门的代码质量扫描工具。

Sonar 功能

  • Sonar 可以通过PMD、CheckStyle、Findbugs 等等代码规则检测工具检查代码编写规范和潜在的缺陷。
  • 显然程序中包含大量复制粘贴的代码是质量低下的,Sonar 可以展示源码中重复严重的地方
  • 通过Sonar 可以找出循环,展示包与包、类与类之间的相互依赖关系,通过Sonar 可以管理第三方的jar 包, 检测耦合。
  • 了解自己在编码过程中犯过的错误,让自己的代码更具有可读性和维护性。

Sonar 优点

  • 开源免费:免费的社区版,对商业用户也没有限制。
  • 功能强大:具有版本管理的功能,以及权限管理。
  • 技术支持:广泛的技术支持,强大的社区。
  • 开源的代码质量管理平台:可以支持包括JAVA、C#、C/C++、PL/SQL、Cobol、JavaScrip、Groovy 等等二十几种编程语言的代码质量管理与检测。
  • 检测问题:Sonar 代码分析器配备强大的引擎可以检测到如空指针、逻辑错误和资源泄露等问题。

风险漏洞

SonarQube 是一款开源静态代码质量分析管理工具,SonarQube 版本<8.6的情况下,在默认配置的情况下,缺少对API 接口的访问权限控制,攻击者可利用该漏洞在未授权的情况下,通过访问api/settings/values 接口从而获取到SMTP、SVN、GitLab 凭据,进一步获取源代码数据仓库中的源代码,造成项目源代码泄露。同时还可以对使用默认账号密码的用户进行攻击,系统安装完成后,默认弱口令为admin/admin,攻击者通过输入默认账号密码,同样可以获得敏感配置信息,从而进一步窃取企业源代码。

解决方案

1、升级版本到8.6以上;

2、漏洞是利用API接口窃取数据,可以将SonarQube 部署在内网环境,并修改默认账号密码和端口加以防范。

Sonar 实践

简单做法

最简单的做法就是,IDEA 的plugins 应用市场直接搜索SonarLint 然后安装就可以了。然后直接鼠标右键选择Sonar 扫描文件就可以看到结果了:

在这里插入图片描述
在这里插入图片描述

此处就发现一个开发者忽略的问题,相同对象重复判空,导致下面逻辑还是可能出现问题

代码语言:javascript
复制
	/**
     * 判断是否为禁用状态
     */
    private XXX a(Long disableStartTime, Long disableEndTime) {
        Long currentTime = DateUtil.currentSeconds();
        if (null == disableEndTime ||   null == disableEndTime) {
            return XXX.enable;
        }
        ...
    }

这种简单粗暴的问题有两个

  1. Sonar 的规则有一千多条,扫描出的问题严重性有Bugs、Vulnerabilities、Code Smells 等几个级别,如果所有的问题都要改过去,效率就太低了,也难以执行,个人认为,除了Bug 级别的必须改掉之外,其他级别的问题不必强制性改掉,有追求的同学可以当作优化自己代码风格的手段。但是不幸的是,SonarLint 的错误提示并没有按照错误等级分类过滤的选项,在茫茫问题条目中一个个找Bug 级别的问题,着实蛋疼。当然,也可以右键选择”disable rules“来直接去掉非Bug 等级的扫描规则,但也不够优雅。
  2. 这种方式全靠自觉,假设代码审查的时候,需要把解决掉所有Bug 级别的问题,作为前置准备工作之一,那我们还得像第1点里面说的那样看有没有遗留的bug 级别问题。

推荐做法

第一步下载

官网下一个SonarQube 的安装包,这里面有个坑,官网上最新的LTS版本的SonarQube(目前是version-8.9)最低要求的Java版本是JDK11,我们现在普遍还是用的Java8,所以推荐下载7.8版本的。

第二步启动

下载完毕,解压后,进入到/Sonarqube-X.X/bin下面,可以看到有所有通用的平台的启动文件

在这里插入图片描述
在这里插入图片描述

演示以Windows 平台为例:

在这里插入图片描述
在这里插入图片描述

执行StartSonar.bat 启动服务,启动日志在/Sonarqube-X.X/logs/Sonar.log 中,然后浏览器前往localhost:9000,成功后页面如下:

在这里插入图片描述
在这里插入图片描述

第三步初始化配置

点击右上角选择登陆,初始用户名密码都是admin,登录后再右上角用户logo 上选择My Accout -> security 创建token 或者修改密码

在这里插入图片描述
在这里插入图片描述

在项目根目录下面执行Maven 命令,执行成功后,再回到SonarQube 平台,可以看到结果。

代码语言:javascript
复制
// DSonar.login 后面替换成你自己的token 就行了
mvn clean install Sonar:Sonar -DSonar.host.url=http://localhost:9000 -DSonar.login=d7b53bc44cd108ee40b6691433bf70eb0a507b0b

![在这里插入图片描述](https://img-blog.csdnimg.cn/681077ecea3349bcb5067f034b65e363.png

在这里插入图片描述
在这里插入图片描述

根据结果可以看出,还是有很多地方存在NPE没有处理,还有重写equals()没有重写hashCode() 等问题,点击会有规则说明解释:

在这里插入图片描述
在这里插入图片描述

修改优化后,再重新执行一回命令,Bug 为0就OK啦。

扩展

根据官方文档,Sonar 可以持续集成与GitLab、Jenkins 联合应用。接入GitLab 每次提交的时候检查有无Bug ,如有,则发送钉钉告警信息。接入项目部署平台,将Bug 检查作为部署前置检查。

常见问题

使用mvn install 出错

Please refer to D:\XXXX\target\surefire-reports for the individual test results.

这是因为测试代码时遇到错误,它会停止编译。只需要在pom.xml 的里添加以下配置,使得测试出错不影响项目的编译。

代码语言:javascript
复制
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <testFailureIgnore>true</testFailureIgnore>
            </configuration>
        </plugin>
    </plugins>
</build>

mvn install 项目出错:编码GBK 的不可映射字符

pom 文件夹添加编码格式:

代码语言:javascript
复制
 <properties>  
 	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
 </properties> 

IDEA 插件SonarLint 无法连接到SonarQube

1、SonarLint 版本和SonarQube 版本要适配,插件下单地址

​ SonarLint 4.14.1.27745 经验证可以支持SonarQube 7.8

2、没有找到适配的插件可以选择maven 或其他方式扫描分析项目。

IDEA 插件SonarLint 无法启动SonarTS Server

安装Node.js 后重新配置连接

总结

在我们这个地方,你必须不停地奔跑,才能留在原地。如果你要抵达另一个地方,必须以双倍于现在的速度奔跑。——【英】刘易斯·卡罗尔《爱丽丝梦游仙境》

想要从众多竞争对手中脱颖而出,就必须付出更多的努力。我们可以通过Sonar ,帮助我们推动Code Review 和代码设计质量的持续监控,从而提高软件项目的总体开发运维效益。Code Review 是提高项目质量的重要途径之一,也是我们提高自己代码能力和沟通能力的有效方式。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • Sonar 介绍
    • Sonar 功能
      • Sonar 优点
      • 风险漏洞
        • 解决方案
        • Sonar 实践
          • 简单做法
            • 推荐做法
              • 第一步下载
              • 第二步启动
              • 第三步初始化配置
            • 扩展
              • 使用mvn install 出错
          • 常见问题
            • mvn install 项目出错:编码GBK 的不可映射字符
              • IDEA 插件SonarLint 无法连接到SonarQube
                • IDEA 插件SonarLint 无法启动SonarTS Server
                • 总结
                相关产品与服务
                持续集成
                CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档