• SonarQube代码质量检查平台


    前言: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)方式一:

    进入项目

    在这里插入图片描述

    点击项目信息,设置提醒

    在这里插入图片描述

     全部勾选

    在这里插入图片描述

    (2)方式二(推荐):

    一步到位,设置也简单。在个人账号设置自己的 

    1、主要参考文章:

    https://blog.csdn.net/weixin_31257709/article/details/124566064

    2、推荐阅读:

    从Code Review 谈如何做技术

    Code Review中的几个提示

  • 相关阅读:
    tomcat优化、nginx +tomcat 部署 (三)
    IntelliJ IDEA 打开近期工作的项目的对话框的快捷键
    clickonce 部署ClickOnce应用程序时出错-清单中的引用与下载的程序集的标识不匹配
    2009年408大题总结
    【vue例子】vue实现侧边栏点击top,动画滚动到顶端
    Pycharm中画图警告:MatplotlibDeprecationWarning
    Flink TaskManger 内存计算实战
    MEMS传感器的原理与构造——单片式硅陀螺仪
    2022年武汉市工业节能专项资金申报条件以及流程(附奖励补贴标准)
    护理床控制板开发,帮您解决卧床护理难题
  • 原文地址:https://blog.csdn.net/a745233700/article/details/126326765