转载:http://t.csdn.cn/VAf1e

原文链接:https://blog.csdn.net/a745233700/article/details/126326765

前言:code review:
        随着业务的发展,系统越来越庞大,原本简单稳定的功能,可能在不断迭代后复杂度上升,潜在的风险也随之暴露,导致最终服务不稳定,造成业务价值的损失。而为了减少这种情况,有一种比较好的方式就是提高代码质量,比如通过 code review,从而降低错误风险。首先,我们先来看看 code reivew 的用处:

(1)code review 可以通过大家的建议改善代码的质量,提高代码的可读性、可维护性,以及确保程序逻辑和对需求、设计的实现的正确性
(2)code review 是一个传递知识的方式,让不熟悉代码的人知道作者的意图和想法,从而可以在以后轻松维护代码
(3)code review 也鼓励程序员们相互学习对方的长处和优点
(4)code review 也可以被用来确认自己的设计和实现是一个清楚和简单的
但在 code reivew 的诸多用处中,我们并没有提到可以帮助找到程序的bug和保证代码风格和编码规范,这是因为我们认为:

code review 不应该承担发现代码错误的职责。code review 主要是审核代码的质量,如可读性,可维护性,以及程序的逻辑和对需求和设计的实现。代码中的bug和错误应该由单元测试,功能测试,性能测试,回归测试来保证。
code review 不应该成为保证代码风格和编码规范的手段。编码规范和代码风格都属于死的东西,当把自己的代码提交给团队 review 时,代码就应该是符合规范的,这是属于每个人自己的事情,不应该交由团队来完成,否则只会浪费大家本来就不够的时间。
        当然,上述言论只是说上面两件事情并不是 code review 的意图,并不是说,你不能在 code review 中报告一个程序的bug或是一个代码规范的问题。如果要把上述两件事归入 code review 的职责,那将会导致 code review 增加大量的人力成本,且工作量随代码量的增加而增加,审查效率低;并且简单的 code review 只能解决代码风格问题,很难发现代码缺陷、漏洞、重复度、复杂度等方面的问题,效果差。

所以,对于上面这两件事情,除了需要作者自己保证外,当然还有工具可以帮助我们检查代码规范的,比如下文介绍的 Sonarqube 平台。

一、SonarQube 整体介绍:
1、SonarQube 是什么:
        SonarQube 是一个代码质量管理的开源平台,通过 SonarQube 提供的代码扫描、质量阈值卡点等质量红线,我们可以提升系统的可靠性,提前捕获和提示代码中的错误,从而避免未定义的行为影响到用户,保证业务质量,也能确保管理的代码库干净并且可维护,以便提高开发人员的开发效率。

SonarQube 可以从以下七个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量问题。

(1)不遵循代码标准:sonar 可以通过 PMD、CheckStyle、Findbugs 等知名的静态代码规则分析工具规范代码编写。
(2)潜在的缺陷:sonar 可以通过 PMD、CheckStyle、Findbugs 等知名的静态代码规则分析工具检测出潜在的缺陷。
(3)糟糕的复杂度分布:文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们,且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。
(4)重复:显然程序中包含大量复制粘贴的代码是质量低下的,sonar 可以展示源码中重复严重的地方。
(5)注释不足或者过多:没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降,而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。
(6)缺乏单元测试:sonar可以很方便地统计并展示单元测试覆盖率。
(7)糟糕的设计:通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则,通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况,检测耦合。
        另外 SonarQube 也可以生成详细的代码分析质量报告,并通过强大的仪表盘展示出来,使我们能够根据角色的不同,查看不同维度的度量标准。

2、SonarQube 的工作原理:
官方给出了典型的开发过程:

(1)开发人员在编写并提交代码(最好在 IDE 中集成 sonarlint 插件,并在本地进行代码分析检测,减少更多的缺陷代码被集成到 SCM 上)
(2)SCM 通过 webhook 调用,触发 CI 持续集成,CI 触发 Sonar Scanner,将本地代码进行扫描分析,输出分析报告,并发送给 SonarQube 服务端
(3)SonarQube 接受分析报告并处理,最终渲染到UI界面

SonarQube工作流程包含3个组件:

(1)Scanner:扫描器,负责将源文件进行代码分析,并将分析后的报告发送给SonarQube服务器
(2)SonarQube Server:SonarQube服务器,负责处理分析报告,后台管理等
(3)Database server:数据库服务器,负责存储数据

三、SonarQube 功能与使用说明:
1、项目:

1.1、项目-总览:

1.2、项目-问题:

问题共分为三种类型:

Bug:潜在的代码缺陷,可能引起系统执行异常(比如空指针、魔法值等)
漏洞:潜在的安全漏洞,比如sql注入、cors、xss攻击等
异味:代码的坏味道。比如不遵循代码标准、糟糕的复杂度分布、注释不足或注释过多、糟糕的设计等
(1)问题类型(不推荐修改)

(2)问题的重要程度(不推荐修改)

(3)问题状态,分为五个状态:

打开:问题被质量分析后的初始状态(SonarQube)
确认:问题修复后,需要开发人员手动指定,表示该问题已修复(开发人员)
误判:标记问题为误判,表示此问题不应该标记为问题,无需处理(管理员)
标记为不会修复:表示此问题不做处理(管理员)
重新打开:当SonarQube再次分析报告时,若问题再次暴露则显示为重新打开(SonarQube)

(4)问题指派:

可以将问题分配给指定用户。

当问题分配给其他用户后,若该用户有启动提醒功能,则SonarQube会发送邮件进行告警

当 Sonar 分析报告后,会根据SCM的相关记录找到对应的用户,进行自动指派。

(5)其他:

1.3、项目-安全热点:
安全热点是SonarQube检测出来可能存在安全问题,需要项目管理员进行复审,确认是否存在问题。

1.3.1、项目-安全热点-复审:

首先确保当前用户具有管理安全热点的权限

具有安全热点管理权限后,按钮将显示为蓝色

复审状态总共有三个,分别为

(1)需要复审:默认状态
(2)已修复:表示该安全代码已经修复
(3)安全:代码风险,无需修改

1.3.2、项目-安全热点-SonarQube提醒/建议:

在这个板块,SonarQube会解释为何是安全代码,且告诉你怎么修复。(英语不好的人建议翻译一下)

翻译后

1.4、项目-指标:
观测当前项目的代码质量

1.5、项目-代码:
即SCM更新下来的代码,没啥区别,SonarQube自己也会存储一份

1.6、项目-活动:
分析记录的日志

1.7、项目-项目配置:

管理项目的基本配置

1.7.1、设置:

设置项目的基本配置信息(不推荐)

1.7.2、新代码周期:

设置新代码周期的定义,默认按通用配置(即按上个版本的分析开始计算)。

也可以指定其他选项,如“天数”,可以指定距离上次分析多少天的数据作为为新代码

1.7.3、质量配置:

质量配置,表示项目适配的质量配置,质量配置都是基于语言的,一个质量配置下面会存在多个代码规则。下图表示的项目qx_whale的质量配置基于java、xml两种语言,别分启用了452和11条代码规则。

1.7.4、质量阈:

它是项目质量是否合格的标准,通过设置质量阈来判断项目的代码质量是否达标。

默认使用SonarQube内置的质量阈配置(Sonar way)

也可以自定义质量阈,如笔者定义的My Sonar Way,只要出现阻断违规问题,就达不到质量阈的要求

1.7.5、自定义指标:

即项目-指标板块,展示项目的代码质量。 官方表示未来会废弃,所以不推荐大家使用

1.7.6、链接:

配置一些跳转链接,比如项目的首页地址。建议在SonarScanner运行时指定sonar.links.homepage去配置首页地址

1.7.7、权限:

当前项目的权限配置,后面用户与权限模块会特别介绍,这里就不赘述了

1.7.8、后台任务:

可以查看项目最近分析的记录

1.7.9、更新标识:

SonarQube每个项目的标识都是唯一的,请确保使用者的项目标识唯一!!!

1.7.10、网络调用:

俗称web hook,懂得都懂(可以与jenkins集成,将分析报告的质量阈状态回传,以便jenkins判断是否继续执行pipeline任务)

1.7.11、删除:

谨慎操作,点击删除后有二次确认操作。

2、问题:
        问题菜单跟“项目-问题”展示的基本一致,不同的是,问题菜单展示的是个人参与项目的所有问题,所以数量上相对较多

3、代码规则:
代码规则,用来分析代码是否有问题

4、质量配置:
质量配置,用于定义编程语言的代码分析集合。一个质量配置可以配置多个代码规则

举个例子,我们看下质量配置/Java下的代码规则详情,下图表示Java语言的质量配置模板Sonar way,共配置了452个激活的规则,187个未激活的规则,一共配置了639个规则。

内置质量模板Sonar way不允许修改,若用户想要自定义质量模板,必须拥有“质量配置管理员”的权限才可以进行操作。

举个例子,新建一个Java语言的质量模板

在左边的卡片“规则”中,我们点击“更多激活规则”

回到质量模板MyJavaRule,可以看到我们配置了一条代码规则。那么质量配置就介绍到这里了。

什么情况下会使用到质量配置呢?一般使用官方内置的Sonar way即可,如果有特殊需求的话,可以自己去定义质量模板。

5、质量阈:
        质量阈是一系列基于指标的布尔表达式,用户标准化质量,它可以帮助我们实时了解项目是否已经满足生产要求了。在集成进流水线的情况下,质量阈提供了质量卡点的能力,当存在质量项尚未达标的情况下,阻止发布流程进入到下一环节,流水线运行时会根据对应的质量红线对测试任务进行判断,是否能够通过红线,如果未通过红线,对应的任务将失败。但考虑在一些特殊的情况下,未通过质量红线的流程也需要继续往下执行,可以由管理员将红线跳过

上图表示,所有项目默认的质量阈均为Sonar way,指标解释:新代码分析时,若覆盖率小于80% 或者 重复行大于3% 或者…安全比率劣于A时,判定为质量阈失败。

5.1、质量阈-自定义质量阈:
        默认情况下,所有项目使用相同的质量阈,每个项目的质量阈状态都会展示在首页。质量阈值也可以进行自定义,设定不同等级的阈值,对于老项目,会使用最低等级的阈值:阻断性的错误数量要求为0,对于一些新的项目,则严格要求质量如严重性的错误要求为0等,只要无法通过质量阈值检查,那么项目是无法上线的。

自定义质量阈,首先要有质量阈管理员的权限,可以参考下图设置(建议技术经理或者项目负责人设置此权限)

新建一个自定义质量阈MySonarWay,只添加一个条件,当阻断违规的问题大于0时,判定为质量阈失败。

同时,还可以指定哪些项目使用此质量阈

6、配置: 
6.1、用户与权限:
6.1.1、用户管理:

6.1.2、群组管理:

可以通过群组,来进行用户的统一授权

6.2、项目权限:
项目权限,用于设置公开或者私有,公开项目所有人都可以访问,私有项目只有访问权限的人可以访问(推荐)

设置项目权限范围,管理员等

6.3、用户与权限-最佳实践:
6.3.1、最佳实践-角色分工:

角色大致上可以分为三种:系统管理员、技术经理、开发人员

(1)最佳实践-角色分工-系统管理员:

系统管理员:只负责sonar平台的管理,不负责项目相关操作

(2)最佳实践-角色分工-技术经理:

技术经理:负责项目成员定义,项目组定义,权限分配,质量配置、质量阈等配置

(3)最佳实践-角色分工-开发人员:

开发人员:默认项目创建与项目执行分析,当开发人员创建项目时,该人员成为项目的管理者,拥有项目的所有权

(4)最佳实践-权限模板:

配置默认权限模板(Default template),项目创建人拥有项目的所有权。

若技术经理也需要同等权力的话,可以主动申请成为项目的管理员(详见下图)

6.4、提醒(邮件告警)
6.4.1、系统邮件设置:

6.4.2、项目提醒设置:

只有订阅了项目提醒,用户才会收到项目推送的邮件。在管理员进行问题分配给用户时,特别有用。以下介绍如何进行项目提醒设置:

(1)方式一:

进入项目

点击项目信息,设置提醒

全部勾选

SonarQube使用教程及案例相关推荐

  1. 《C# WinForM 实践开发教程》案例×××(2)

    <C# WinForM 实践开发教程>案例×××(2): 由于上传限制,必须分卷压缩,请依次下载后解压缩.共有20个文件,合计71.3M. 请耐心下载哦^o^ 转载于:https://bl ...

  2. 图书推荐:《ASP.NET.基础教程——C#案例版》

    本书结合用C#语言编写的可实际运行的示例代码,讨论了ASP.NET的构架.Web窗体.配置.HTTP管道.故障诊断和错误处理.验证.数据绑定.自定义控件.缓存.状态管理和安全性,阐述用C#构建基于We ...

  3. phpcmsV9 邮箱配置(含图文教程) - 案例篇

    文章目录 phpcmsV9邮箱配置(含图文教程) - 案例篇 前言 · 步骤分析: 步骤 · 开始配置: 相关阅读: phpcmsV9邮箱配置(含图文教程) - 案例篇 前言 · 步骤分析: 注册管理 ...

  4. 百度地图API的使用教程以及案例

    百度地图API的使用教程以及案例 一.注册 百度地图:掌握当前的位置在网页显示位置,插入地图 拖拽,点击事件. 注意:定位 距离 公交 不关心 官网: 点我进入百度地图官网 应用场景:网页插入百度地图 ...

  5. Shell最最基础教程【案例讲解】【值得收藏系列】

    Shell基础教程[案例讲解] 第1章 Shell概述 第2章 Shell解析器 第3章 Shell脚本入门 1.脚本格式 2.第一个Shell脚本:helloworld 3.第二个Shell脚本:多 ...

  6. 干货集锦:Qlik中文教程/行业案例/demo演示等全部打包给您!

    Qlik连续10年成为Gartner"分析与商业智能平台"魔力象限领先者象限,成为企业商业智能和个人职场成功的必然选择.Qlik Sense是一个完整的数据分析平台,为新一代分析奠 ...

  7. Bootstrap4+MySQL前后端综合实训-Day01-PM【position定位的四种方式、Flex布局语法教程及案例(概念、容器属性、项目属性)、双飞翼布局复习、Bootstrap4 教程】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记] 目   录 HTML中的三种元素(块元素.内联元素.内联块元素) position定位的四种方式 ...

  8. 计算机图形图像项目教程素材,案例任务驱动法在图形图像教学中的运用

    摘要:案例任务驱动教学实际上是案例教学与任务驱动教学相结合的一种教学方法,其中任务驱动作为一条主线贯穿课堂教学的始终,起到组织教学的作用,具体教学过程以案例为基础而展开.通过对该方法在<Phot ...

  9. Python基础教程书籍案例:新闻采集(新闻聚合)【上】

    这个练习项目来自<Python基础教程(第2版)>,案例原名为"新闻聚合". 项目分为两个阶段: 第一阶段:通过与NNTP服务器进行交互获取新闻源. 第二阶段:获取不同 ...

最新文章

  1. linux source命令
  2. 北京学python去哪里好_北京想学习Python应该去哪里好
  3. 如何搞定分库后数据冗余
  4. VS中安装DevExpress后在Winform的工具箱中不显示控件
  5. B10_NumPy数组操作、修改数组形状、翻转数组、修改数组维度、连接数组、分割数组、数组元素的添加与删除
  6. 用 ABAP 读取本地文本文件内容试读版
  7. 学python编程_少儿学Python编程的一些思考
  8. BootstrapTable分页参数
  9. 台积电:高雄地震对生产影响比预期略高
  10. 小米11 Pro最新渲染图曝光:后置体积巨大的矩阵四摄
  11. java 泛型 泛型擦除(type erasure)
  12. Linux命令之sed使用入门概述
  13. tp3.2中怎么访问分类及子分类下面的文章
  14. isPostBack解释
  15. Bugzilla的维护与管理
  16. 夜雨数竞笔记-极限(11)-欧拉常数
  17. 如何利用百度经验做网络推广
  18. redis 基础数据类型及应用 1
  19. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java天气预报系统97z40
  20. 软件测试之 对朋友圈点赞功能进行测试

热门文章

  1. Java中大文件读取,内存放不下怎么办?
  2. Swig超详细入门教程(Java调用C/C++, CMake)——更新于2021.12
  3. Docker快速上手篇,看这一篇就够,你先不用知道它是什么,先用起来!!!
  4. 改变一下桌面样式,据说有利于保护眼睛
  5. 003-Webbuilder应用HTML表单
  6. 业余选手与高手的本质区别 - 混沌大学
  7. Neo4j的下载与安装(完整详细版)
  8. 【九州仙侠传H5魂骨版】linux手工外网端+架设视频教程+开服清档+运营后台+授权GM后台+H5三端
  9. 基于easyX制作的C语言小游戏
  10. 【概率论】随机试验、随机变量、离散型/连续型随机变量