Sonar代码质量管理

2023-10-30

一、简介

1.1 什么是Sonar

       Sonar是一个用于代码质量管理的开源平台,用于管理代码的质量,是一个Web系统,展现了静态代码扫描的结果,

通过插件形式可以支持二十几种语言的代码质量检测,通过多个维度的检查了快速定位代码中潜在的或者明显的错误;

① 统一各个小组内部开发者的编码风格(编码规范)

② 消除过于复杂的代码逻辑

③ 消除重复代码与硬编码

④ 消除违反规定的设计

⑤ 提升代码注释质量

官网:https://www.sonarqube.org

文档:https://docs.sonarqube.org/latest

中文参考文档:http://www.sonar.org.cn/

1.2 Sonar工作原理

Sonar其实是一个Web系统,SonarQube对Sonar进行支持,Sonar可以在网页上展示静态代码的检测结果,检测各种代码语言的规则我们可以自定义,通过Sonar-Scanner这个工具进行代码检测;

从服务器请求数据,分析提供给分析的文件,并将结果数据以报告的形式发送回服务器,然后在服务器端进行异步分析。

    1. 用户本地使用IDE的插件进行代码分析

    2. 用户上传到源代码版本控制服务器

    3. 持续集成,使用Sonar Scanner进行扫描

   4. 将扫描结果上传到SonarQube服务器

   5. SonarQube server将结果写入db

   6. 用户通过web ui查看扫描结果

   7. SonarQube导出结果到其他需要的服务

1.3 Sonar检测维度

Sonar可以从七个维度进行代码质量检测,我们可以根据不同维度的严重性然后根据我们的经验做出相应的代码优化,当然并不是所有维度我们都有必要代码修改;

①代码规范

Sonar可以通过PMD、CheckStyle、Findbugs等代码规则检测工具来检测我们代码是否符合代码规范;

②潜在的缺陷

Sonar可以通过PMD、CheckStyle、Findbugs等代码规则检测工具来检测我们代码是否有代码缺陷(比如空指针是否有判断、IO流是否有关闭等);

③糟糕的复杂度分布

文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试

④重复代码

程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示源码中重复严重的地方

⑤注释的检测

没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷

⑥单元测试

sonar可以很方便地统计并展示单元测试覆盖率

⑦糟糕的设计

通过sonar可以找出循环,展示包与包、类与类之间相互依赖关系,可以检测自定义的架构规则 通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测耦合。

二、使用配置

2.1 jhipster 生成工程配置

  在工程目录下修改sonar-project.properties配置

 主要要修改配置 projectKey、projectName、url

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

#projectKey项目的唯一标识,不能重复、不能有空格

sonar.projectKey=financing-develop

 

#projectKey项目名称

 

sonar.projectName=financing develop

 

 

 

sonar.projectVersion=1.0

 

 

 

sonar.sources=src/main/

 

sonar.host.url=xxxxxxxxxxxxxx

 

 

 

sonar.tests=src/test/

 

sonar.jacoco.reportPaths=target/jacoco/test.exec,target/jacoco/integrationTest.exec

 

sonar.java.codeCoveragePlugin=jacoco

 

sonar.junit.reportPaths=target/test-results/test,target/test-results/integrationTest

 

 

 

sonar.sourceEncoding=UTF-8

 

sonar.exclusions=src/main/webapp/content/**/*.*, src/main/webapp/i18n/*.js, target/classes/static/**/*.*

 

 

 

 

 

sonar.issue.ignore.multicriteria=S3437,S4502,S4684,UndocumentedApi

 

# Rule https://sonarcloud.io/coding_rules?open=squid%3AS3437&rule_key=squid%3AS3437 is ignored, as a JPA-managed field cannot be transient

 

sonar.issue.ignore.multicriteria.S3437.resourceKey=src/main/java/**/*

 

sonar.issue.ignore.multicriteria.S3437.ruleKey=squid:S3437

 

# Rule https://sonarcloud.io/coding_rules?open=squid%3AUndocumentedApi&rule_key=squid%3AUndocumentedApi is ignored, as we want to follow "clean code" guidelines and classes, methods and arguments names should be self-explanatory

 

sonar.issue.ignore.multicriteria.UndocumentedApi.resourceKey=src/main/java/**/*

 

sonar.issue.ignore.multicriteria.UndocumentedApi.ruleKey=squid:UndocumentedApi

 

# Rule https://sonarcloud.io/coding_rules?open=squid%3AS4502&rule_key=squid%3AS4502 is ignored, as for JWT tokens we are not subject to CSRF attack

 

sonar.issue.ignore.multicriteria.S4502.resourceKey=src/main/java/**/*

 

sonar.issue.ignore.multicriteria.S4502.ruleKey=squid:S4502

 

# Rule https://sonarcloud.io/coding_rules?open=squid%3AS4684&rule_key=squid%3AS4684

 

sonar.issue.ignore.multicriteria.S4684.resourceKey=src/main/java/**/*

 

sonar.issue.ignore.multicriteria.S4684.ruleKey=squid:S4684

 

2.2 不是jhipster 生成的单模块工程配置

  ①在工程目录下修改sonar-project.properties配置

    主要要修改配置 projectKey、projectName、url

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

#projectKey项目的唯一标识,不能重复

sonar.projectKey=sonar-demo-develop

 

#projectKey项目名称

 

sonar.projectName=sonar-demo develop

 

 

 

sonar.projectVersion=1.0

 

 

 

sonar.sources=src/main/

 

sonar.host.url=xxxxxxxxxxxxxx

 

 

 

sonar.tests=src/test/

 

#sonar.jacoco.reportPaths=target/jacoco/test.exec,target/jacoco/integrationTest.exec

 

sonar.jacoco.reportPaths=target/jacoco/test.exec,target/jacoco.exec

 

sonar.java.codeCoveragePlugin=jacoco

 

#sonar.junit.reportPaths=target/test-results/test,target/test-results/integrationTest

 

 

 

sonar.sourceEncoding=UTF-8

 

sonar.exclusions=src/main/webapp/content/**/*.*, src/main/webapp/i18n/*.js, target/classes/static/**/*.*

 

  ②在maven pom 文件新增 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

<build>

    <plugins>

 

        <plugin>

 

            <groupId>org.springframework.boot</groupId>

 

            <artifactId>spring-boot-maven-plugin</artifactId>

 

        </plugin>

 

        <plugin>

 

            <groupId>org.codehaus.mojo</groupId>

 

            <artifactId>properties-maven-plugin</artifactId>

 

            <version>1.0.0</version>

 

            <executions>

 

                <execution>

 

                    <phase>initialize</phase>

 

                    <goals>

 

                        <goal>read-project-properties</goal>

 

                    </goals>

 

                    <configuration>

 

                        <files>

 

                            <file>sonar-project.properties</file>

 

                        </files>

 

                    </configuration>

 

                </execution>

 

            </executions>

 

        </plugin>

 

    </plugins>

 

</build>

 

 

 

 

 

<profiles>

 

    <profile>

 

        <id>coverage</id>

 

        <activation>

 

            <activeByDefault>true</activeByDefault>

 

        </activation>

 

        <build>

 

            <plugins>

 

 

 

                <plugin>

 

                    <groupId>org.jacoco</groupId>

 

                    <artifactId>jacoco-maven-plugin</artifactId>

 

                    <executions>

 

                        <execution>

 

                            <id>prepare-agent</id>

 

                            <goals>

 

                                <goal>prepare-agent</goal>

 

                            </goals>

 

                        </execution>

 

                        <execution>

 

                            <id>report</id>

 

                            <goals>

 

                                <goal>report</goal>

 

                            </goals>

 

                        </execution>

 

                    </executions>

 

                </plugin>

 

            </plugins>

 

        </build>

 

    </profile>

 

</profiles>

 


2.5 本地idea运行命令提交

 

1

mvn clean verify sonar:sonar -Dmaven.test.failure.ignore=true

 

2.6 jenkins Pipeline script 配置提交

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

pipeline {

           agent any

 

           tools { 

 

               maven 'mvn-3.3.9' 

 

               jdk 'jdk-1.8'

 

           }

 

           stages {

 

               stage('Checkout') {

 

                   steps {

 

                        git branch:'20190723_dev', url: 'git@internal.git.taoqicar.com:cicd/dingtalk-robot-outgoing.git'

 

                   }

 

               }

 

               stage('SonarQube analysis') {

 

                   steps{

 

                                

 

                           sh 'mvn clean verify sonar:sonar -Dmaven.test.failure.ignore=true'

 

                                                    

 

                   }

 

               }

 

           }

 

              post {

 

               success {

 

 

                    sh "curl -G -d 'projectKeys=eam-develop&gitProjectName=eam&gitBranch=develop&gitToken=yS3_ZdQ_FMrx9Erhdq1G&dingDingToken=a837396680bb701220353c3f2bdc2c454642dedf9b03c97c5e5a6d1a2a756ea7' http://api.xxfcar.com:3080/dingtalk/v1-0/sonar/bug/statistics/dingding"

 

               }

 

        

 

           }

 

    }

 

在IDEA安装SonarLint插件的步骤和使用方法

1、安装SonarLint插件方式

2.使用方式

3.效果

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sonar代码质量管理 的相关文章

  • sed 过滤字符文本 (一行行的)

    前面写过用sed对整个文件过滤的 代码很简单 现在这个是能够取出其中的一行行来过滤的 为了获取更多的相关信息 注意列表中的空格先变为 然后再变回来 不然会出错 bin sh i grep chenbing my c temp sed s g
  • 将eclipse项目导入idea

    首相我们需要明白idea的两个概念 在idea中project相当于eclipse的workspace 在idea中project相当于eclipse的project 所有首先我们需要新建一个在idea中创建一个project 点击菜单fi
  • 女程序员珍妮的故事

    我不想说出她的名字 这里就叫她珍妮吧 珍妮有5个最好的朋友 其中2个是 Google 的工程师 一个是 Eventbrite 的工程师 一个是架构师 另外一个是她的老爸 一个很可爱的人 是珍妮家乡的州足球队的主席 珍妮毕业时拿的是企业管理专
  • 可综合的ROM芯片设计实现-verilog代码

    文章目录 1 基本单元 1 1 最基本cell 1 2 两个存储单位 1 3 八个存储单位 1 4 十六个存储单位 2 使用和测试 2 1 使用 2 2 仿真 本文实现可以综合的ROM模块 由verilog实现 该方法可以用于芯片固化程序的
  • Sonar代码质量管理

    一 简介 1 1 什么是Sonar Sonar是一个用于代码质量管理的开源平台 用于管理代码的质量 是一个Web系统 展现了静态代码扫描的结果 通过插件形式可以支持二十几种语言的代码质量检测 通过多个维度的检查了快速定位代码中潜在的或者明显
  • 书摘】程序员成长的10个阶段

    导读 本文节选自机械工业出版社 程序员成长路线图 一书 该书的作者N216 张磊和吉阳一起回忆和总结了自己几十年的程序员成长经历 对当前程序员关心的热点 重点 难点问题给出了自己的看法和建议 通过对程序员的成长阶段进行划分 使得各个阶段的程
  • Premiere Pro 2022 for Mac(pr2022)中文版

    Mac版Premiere Pro 2022更新了 最新版的pr2022不仅可以帮助用户对各种视频进行剪辑 旋转 分割 合并 字幕添加 背景音乐等基础的处理 还能帮助用户进行视频颜色校正 颜色分级 稳定镜头 调整层 更改片段的持续时间和速度
  • PostgreSQL(数据库)资料和分布式系统(Distributed System)资料与Go语言资料整理

    PostgreSQL Documentation 介绍 PostgreSQL官方文档主页 PG技术沙龙ppt 介绍 2013年4月PG技术沙龙PPT PG9 3中文翻译文档 介绍 PG9 3中文翻译文档 谢谢 skykiker提供 Post
  • 不作35岁的程序员

    http blog chinaunix net uid 28647963 id 3540115 html 在中国 程序员不能超过35岁 似乎已经是不争的事实 软件开发工作就是青春饭 顶多靠毕业这十年的时间 超过这个年龄 要不成功跃身成为管理
  • 【综合类型第 36 篇】我的四周年创作纪念日

    这是 综合类型第 36 篇 如果觉得有用的话 欢迎关注专栏 今天早上习惯性的打开 CSDN 看下大家给我的点赞 收藏 评论和私信 其中有一条官方发送的消息 原来今天是我成为 IT 创作者四周年的纪念日 距离我在 2018 年 10 月 12
  • 鬼泣4refrain 《鬼泣4 refrain》图文全攻略(iphone版)

    本篇文章由 泉州SEO www 234yp com 整理发布 转载请注明原文地址 www 234yp com Article 147467 html 谢谢合作 鬼泣4refrain 您可能感兴趣的话题 鬼泣4 核心提示 鬼泣4 是 鬼泣 系
  • c++中c_str()的用法详解

    转载地址 http blog csdn net u013682388 article details 39547773 cpp view plain copy 标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组
  • PPT模板

    http www officeplus cn List shtml cat PPT tag 1
  • 发展,管理,前辈,名人等有用的文章链接

    专访李智勇 一个老程序员的哲学思考与勇猛精进的人生 http www csdn net article 2014 09 24 2821834 程序员生存定律 目录 http blog csdn net leezy 2000 article
  • 经验之谈

    谈编程 的确而是一个复杂的问题 我只是一个菜鸟 甚至连菜鸟都算不上 只是喜欢代码而已 看看不同的人写不同的代码吸收他人的智慧之光也是一种享受 网络中精英辈出 什么jsp asp php java c c 真的太多了 需要学的东西确实太多了
  • 一个将军的人生总结

    这十句话 是我几十年间学习 积累 感悟出来的 我认为 做到了 就有益健康 第一句话 结交 两个朋友 一个是运动场 一个是图书馆 到运动场锻炼身体 强健体魄 到图书馆博览群书 不断地 充电 蓄电 放电 第二句话 培养 两种功夫 一个是本分 一
  • 如何将照片中的文字转变成可编辑的文章(如何将书上的文字转变为可编辑的文字)

    在工作中 我常常在想 要是能把纸上有用的文字快速输入到电脑中 不用打字录入便可以大大提高工作效率该有多好呀 随着科技的发展 这个问题在不断的解决 例如 现在市场上的扫描仪就带有OCR软件 可以把扫描的文字转换到电脑中进行编辑 但是 对于我们
  • bash脚本,自动输入sudo的密码

    解决方法 echo 管道 开始使用 echo admin sudo service tomcat7 stop 始终提示输入密码 后来查看了下sudo命令的使用 man sudo 发现有如下的解释 S The S stdin option c
  • 逻辑综合——工艺库

    一 库文件的设置 运行DC时需要用到的库文件有 目标库 target library 链接库 link library 符号库 symbol library 算术运算库 synthetic library 1 目标库 目标库是综合后电路网表
  • 敏捷开发概述

    一 历史背景 20世纪60年代 软件规模小 已作坊式开发为主 20世纪70年代 硬件快速发展 软件规模和复杂度不同以往 引发软件危机 20世纪80年代 引入瀑布模型 以过程为中心分阶段控制软件开发 20世纪90年代 软件开发过程日益变重 开

随机推荐

  • [C++]:for循环for(int num : nums)

    前言 时不可以苟遇 道不可以虚行 一 基于范围的for循环的基本语法 在c 11里 为for循环 添加一个container 它就会自动迭代 实现了对于vector型变量vec的内容打印 变量i遍历vector中的每一个元素 直到vecto
  • 解决RabbitMQ报错问题

    解决RabbitMQ报错问题 rabbitmq server service RabbitMQ broker Loaded loaded usr lib systemd system rabbitmq server service disa
  • 周志华《机器学习》课后习题解答系列(六):Ch5.10 - 卷积神经网络实验

    本系列相关答案和源代码托管在我的Github上 PY131 Machine Learning ZhouZhihua 卷积神经网络实验 手写字符识别 注 本题程实现基于python theano 这里查看完整代码和数据集 1 基础知识回顾 1
  • 使用PowerShell脚本来一键开启、关闭FTP服务

    可以使用PowerShell脚本来实现这一目标 下面是两个简单的PowerShell脚本 一个用于开启FTP服务 另一个用于关闭FTP服务 开启FTP服务 保存以下脚本为 Enable FTP ps1 开启IIS和FTP功能 Enable
  • Nextjs 的 App Router 路由模式核心概念简介

    Nextjs App Router 简介 Next js 13 引入了新的应用路由器 它建立在服务端组件之上 支持布局 嵌套路由 加载状态 错误处理等等 本文将介绍 App Router 新路由模型的基本概念 术语 树 Tree 一种用于可
  • neo4j--Cypher语法练习(LOAD CSV)

    1 21 LOAD CSV LOAD CSV用于从CSV文件中导入数据 CSV文件的URL可以由FROM后面紧跟的任意表达式来指定 需要使用AS来为CSV数据指定一个变量 LOAD CSV支持以gzip Deflate和ZIP压缩的资源 C
  • el-form表单回车提交,浏览器会刷新页面

    当el from 只有一个输入框时候 回车提交表单 刷新页面 原因 由于当表单只有一文本框时 按下回车将会触发表单的提交事件 从而导致页面刷新 解决办法 在 el from 加上 submit native prevent
  • 【经典】华为远程机试题分享(跟进)

    在上一篇博客中有说到面试的具体事儿 昨晚那种方法做出来之后 感觉可读性不好 也就是一般情况下很难看懂代码 所以接近睡着时我又想到一个办法比较简单 而且易懂 所以写这篇博客和大家分享一下吧 具体就围绕下图这个核心问题来做 其实我的想法很简单
  • 【Espruino】NO.18 使用L298N驱动直流电机

    http blog csdn net qwert1213131 article details 38584743 本文属于个人理解 能力有限 纰漏在所难免 还望指正 小鱼有点电 Espruino中文社区 小学时代玩过玩具四驱车 各种奇葩霸气
  • ChatGPT写小论文

    ChatGPT写小论文 只是个人对写小论文心得 从知乎 知网自己总结的 有问题 可以留个言我改一下 别删我的东西啊CSDN 文章目录 ChatGPT写小论文 1 写小论文模仿实战 狗头 0 小论文组成 1 好论文前提 2 标题 3 摘要 4
  • Transformer(三)--论文实现:transformer pytorch 代码实现

    转载请注明出处 https blog csdn net nocml article details 124489562 本系列传送门 Transformer 一 论文翻译 Attention Is All You Need 中文版 Tran
  • games101笔记 Shading

    什么是shading 不同的物体应用不同的材质的过程 就是计算出物体具体应该在的地方 物体的光照 物体本身应该有的材质 Blinn Phong Reflectance Model Blinn Phong反射模型 Blinn Phong Re
  • MySql执行顺序及执行计划

    一 mySql的执行顺序 mysql执行sql的顺序从 From 开始 以下是执行的顺序流程 1 FROM table1 left join table2 on 将table1和table2中的数据产生笛卡尔积 生成Temp1 2 JOIN
  • Spring和springMVC启动流程

    首先Spring是建立在Servlet容器之上的 所有web工程的初始位置都是在web xml文件中 它配置了servlet的上下文 context 和监听器 listener spring的启动过程其实就是ioc的启动过程 1 首先初始化
  • linux下出现ping:unknown host www.baidu.com问题时的解决办法——ubuntu下局域网络的配置

    如果ping域名的时候出现ping unknown host xxx xxx 但是ping IP地址的时候可以通的话 可知是dns服务器没有配置好 查看一下配置文件 etc resolv conf 里面是否有nameserver xxx x
  • 算力和硬件的关系_算力就是生产力:中国AI算力占全球三成

    12月15日 IDC与浪潮集团联合发布了 2020 2021中国人工智能计算力发展评估报告 报告从旨在评估中国人工智能发展的现状 为推动产业AI化发展提供极具价值的参考依据和行动建议 据报告显示 预计2020 年中国AI市场规模将达到 62
  • chatgpt(0)-pycharm-vscode安装使用插件Codeium-bito

    1 pycharm codeium 下载插件 codeium 登录 一直出现 Log In Codeium Free AI Code Completion Chat 2 pycharm bito 3 vscode bito 下载安装 注册登
  • 十六进制加法

    十六进制加法逢16进1位 注意 进位的那个位是 和 16 举例 0x21 0x3F 60 而不是 0x21 0x3F 6F
  • Proguard混淆工具使用方法图文说明

    Proguard的理论知识请看这篇文章 http www cnblogs com cr330326 p 5534915 html 1 下载Proguard 官网地址 http proguard sourceforge net 不墙很难打开
  • Sonar代码质量管理

    一 简介 1 1 什么是Sonar Sonar是一个用于代码质量管理的开源平台 用于管理代码的质量 是一个Web系统 展现了静态代码扫描的结果 通过插件形式可以支持二十几种语言的代码质量检测 通过多个维度的检查了快速定位代码中潜在的或者明显