【DevOps】SonarQube 指标解读

SonarQube 指标解读

  • 1.BUG 评级计算方法(可靠性)
  • 2.漏洞评级计算方法(安全性)
  • 3.债务和坏味道
  • 4.覆盖率
    • 4.1 代码覆盖率
    • 4.2 分支覆盖率
    • 4.3 单元测试覆盖率
  • 5.重复

在这里插入图片描述

1.BUG 评级计算方法(可靠性)

  • ✅ A:表示代码无 Bug,最高级别
  • ✅ B:代码有一个 次要 Bug,等级评估为 B
  • ✅ C:代码有一个 重要 Bug,等级评估为 C
  • ✅ D:代码有一个 严重 Bug,等级评估为 D
  • ✅ E:代码有一个 阻断 Bug,等级评估为 E,最低级别

BUG 级别描述:

级别
详细描述信息
次要界面、性能缺陷,建议类问题,不影响操作功能的执行,可以优化性能的方案等。如:错别字、界面格式不规范,页面显示重叠、不该显示的要隐藏,描述不清楚,提示语丢失,文字排列不整齐,光标位置不正确,用户体验感受不好,可以优化性能的方案等。
重要功能没有完全实现但是不影响使用,功能菜单存在缺陷但不会影响系统稳定性。如:操作时间长、查询时间长、格式错误、边界条件错误,删除没有确认框、数据库表中字段过多等。
严重系统主要功能部分丧失、数据库保存调用错误、用户数据丢失,一级功能菜单不能使用但是不影响其他功能的测试。功能设计与需求严重不符,模块无法启动或调用,程序重启、自动退出,关联程序间调用冲突,安全问题、稳定性等。如:软件中数据保存后数据库中显示错误,用户所要求的功能缺失,程序接口错误,数值计算统计错误等。
阻断阻碍开发或测试工作的问题;造成系统崩溃、死机、死循环,导致数据库数据丢失,与数据库连接错误,主要功能丧失,基本模块缺失等问题。如:代码错误、死循环、数据库发生死锁、重要的一级菜单功能不能使用等。

2.漏洞评级计算方法(安全性)

  • ✅ A:表示代码无漏洞,最高级别
  • ✅ B:代码有一个 次要 漏洞,等级评估为 B
  • ✅ C:代码有一个 重要 漏洞,等级评估为 C
  • ✅ D:代码有一个 严重 漏洞,等级评估为 D
  • ✅ E:代码有一个 阻断 漏洞,等级评估为 E,最低级别

漏洞级别描述:

级别
详细描述信息
次要能够获取一些数据,但不属于核心数据的操作; 在条件严苛的环境下能够获取核心数据或者控制核心业务的操作; 需要用户交互才可以触发的漏洞。包括但不限于 XSS 漏洞、CSRF 漏洞、点击劫持。
重要需要在一定条件限制下,能获取服务器权限、网站权限与核心数据库数据的操作。包括但不限于交互性代码执行、一定条件下的注入、特定系统版本下的 getshell 等; 任意文件操作漏洞。包括但不限于任意文件写、删除、下载,敏感文件读取等操作; 水平权限绕过。包括但不限于绕过限制修改用户资料、执行用户操作。
严重直接获取普通系统权限的漏洞。包括但不限于远程命令执行、代码执行、上传 webshell、缓冲区溢出等; 严重的逻辑设计缺陷和流程缺陷。包括但不限于任意账号密码修改、重要业务配置修改、泄露; 可直接批量盗取用户身份权限的漏洞。包括但不限于普通系统的 SQL 注入、用户订单遍历; 严重的权限绕过类漏洞。包括但不限于绕过认证直接访问管理后台、Cookie 欺骗。 运维相关的未授权访问漏洞。包括但不限于后台管理员弱口令、服务未授权访问。
阻断直接获取重要服务器(客户端)权限的漏洞。包括但不限于远程任意命令执行、上传 webshell、可利用远程缓冲区溢出、可利用的 ActiveX 堆栈溢出、可利用浏览器 use-after-free 漏洞、可利用远程内核代码执行漏洞以及其它因逻辑问题导致的可利用的远程代码执行漏洞; 直接导致严重的信息泄漏漏洞。包括但不限于重要系统中能获取大量信息的 SQL 注入漏洞; 能直接获取目标单位核心机密的漏洞。

3.债务和坏味道

坏味道:是指在代码之中潜在问题的警示信号。并非所有的坏味道所指示的确实是问题,但是对于大多数坏味道,均很有必要加以查看,并作出相应的修改。

债务:每一个问题,Sonar 都会计算出更改这个问题需要花费的时间。通过相加这些时间得出一个总的值称为债务。

在这里插入图片描述

4.覆盖率

在这里插入图片描述

指标中文解释
Lines to Cover可覆盖行13242
Uncovered Lines未覆盖的代码7943
Conditions to Cover可覆盖分支4738
Uncovered Conditions未覆盖分支3760

4.1 代码覆盖率

代码覆盖率 ( L i n e C o v e r a g e ) = 可覆盖行 − 未覆盖的代码 可覆盖行 = 13242 − 7943 13242 = 40.0 % 代码覆盖率(Line\ Coverage) =\frac{可覆盖行 - 未覆盖的代码}{可覆盖行}=\frac{13242-7943}{13242}=40.0\% 代码覆盖率(Line Coverage)=可覆盖行可覆盖行未覆盖的代码=13242132427943=40.0%

或者称为 行覆盖率(Line Coverage):在给定的代码行上,行覆盖率只是回答 “这行代码是否在单元测试执行期间被执行过?” 的问题。它是单元测试覆盖线的密度。

线路覆盖率 = L C E L 线路覆盖率 = \frac{LC}{EL} 线路覆盖率=ELLC

  • L C LC LC = 覆盖线(Lines to Cover - Uncovered Lines
  • E L EL EL = 可执行行总数(Lines to Cover

4.2 分支覆盖率

分支覆盖率 ( B r a n c h C o v e r a g e ) = 可覆盖分支 − 未覆盖分支 可覆盖分支 = 4738 − 3760 4738 = 20.6 % 分支覆盖率(Branch\ Coverage) = \frac{可覆盖分支 -未覆盖分支}{可覆盖分支}=\frac{4738-3760}{4738}=20.6\% 分支覆盖率(Branch Coverage)=可覆盖分支可覆盖分支未覆盖分支=473847383760=20.6%或者 条件覆盖率 ( C o n d i t i o n C o v e r a g e ) = C T + C F 2 × B 条件覆盖率(Condition\ Coverage) = \frac{CT + CF}{2×B} 条件覆盖率(Condition Coverage)=2×BCT+CF

  • C T CT CT = 至少一次被评估为 “真” 的条件
  • C F CF CF = 至少一次被评估为 “假” 的条件
  • B B B = 条件总数(Conditions to Cover

4.3 单元测试覆盖率

它是 Line Coverage 和 Condition Coverage 的混合体。

代码中单元测试的覆盖率,计算方法: C o v e r a g e = C T + C F + L C 2 × B + E L ∗ 100 % Coverage=\frac{CT+CF+LC}{2×B+EL}*100\% Coverage=2×B+ELCT+CF+LC100%

  • C T CT CT:至少有一次被判断为 true 的条件数
  • C F CF CF:至少有一次被判断为 false 的条件数
  • L C LC LC:已覆盖的行数(Lines to Cover - Uncovered Lines
  • B B B:条件总数(Conditions to Cover
  • E L EL EL:所有可执行的代码总行数(Lines to Cover

5.重复

重复度 = 重复行数 总行数 ∗ 100 % = D u p l i c a t e d L i n e s L i n e s ∗ 100 % 重复度=\frac{重复行数}{总行数}*100\%=\frac{Duplicated\ Lines}{Lines}*100\% 重复度=总行数重复行数100%=LinesDuplicated Lines100%

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/178906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1128. 等价多米诺骨牌对的数量

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/number-of-equivalent-domino-pa…

Day12 qt QMianWindow,资源文件,对话框,布局方式,常用ui控件

QMianWindow 概述 QMainWindow 是一个为用户提供主窗口程序的类,包含一个菜单栏( menu bar )、多 个工具栏 (tool bars) 、多个铆接部件 (dock widgets) 、一个状态栏 (status bar) 及 一个中心部件 (central widget) 许多应用程序的基础…

postgresql-shared_buffers参数详解

shared_buffers 是 PostgreSQL 中一个非常关键的参数,用于配置服务器使用的共享内存缓冲区的大小。这些缓冲区用于存储数据页,以便数据库可以更快地访问磁盘上的数据。 这个参数在 PostgreSQL 的性能方面有着重要的影响。增加 shared_buffers 可以提高数…

【并发编程】ConcurrentHashMap底层结构和原理

📫作者简介:小明Java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于…

wmvcore.dll丢失怎么办?解决电脑出现wmvcore.dll丢失问题5个方法

wmvcore.dll缺失5个解决方法与wmvcore.dll丢失原因及文件介绍 引言: 在日常使用电脑的过程中,我们可能会遇到一些错误提示,其中之一就是wmvcore.dll缺失。wmvcore.dll是Windows Media Video编码解码相关动态链接库文件之一,它对…

Linux 项目自动化构建工具:make/makefile

什么是 make make 是一个命令,他会在源文件的当前目录下寻找 makefile 或者 Makefile 文件执行这个文件中的代码。 makefile 文件的编写 我们先来见见猪跑,看看 make 怎么用的: 下面是 makefile 文件的内容: 这是 test.c 中的…

WPF创建进度条

使用wpf做一个原生的进度条,进度条上面有值,先看效果。 功能就是点击按钮,后台处理数据,前台显示处理数据的变化,当然还可以对进度条进行美化和关闭的操作,等待后台处理完毕数据,然后自动关闭。…

Python入职某新员工大量使用Lambda表达式,却被老员工喷是屎山

Python中Lambda表达式是一种简洁而强大的特性,其在开发中的使用优缺点明显,需要根据具体场景权衡取舍。 Lambda表达式的优点之一是它的紧凑语法,适用于一些短小而简单的函数。这种形式使得代码更为精炼,特别在一些函数式编程场景中,Lambda表达式可以提高代码的表达力。此外…

DMX512协议及对接口电路的分析

1、DMX512协议简介 DMX 是Digital MultipleX 的缩写,意为多路数字传输(具有512条信息的数字多路复用”)。DMX512控制协议是美国舞台灯光协会(usITT)于1990年发布的灯光控制器与灯具设备进行数据传输的工业标准,全称是USITTDMX512(1990); DMX512 在其物理…

福州大学《嵌入式系统综合设计》 实验八:FFMPEG视频编码

一、实验目的 掌握使用算能平台进行视频编码的流程,包括开发主机环境与云平台的配置,视频编码程序的编写与理解,代码的编译、运行以及学习使用码流分析工具分析视频压缩码流等。 二、实验内容 搭建实验开发环境,编译并运行编码…

Spring Boot 3.2.0 虚拟线程初体验 (部分装配解析)

写在前面 spring boot 3 已经提供了对虚拟线程的支持。 虚拟线程和平台线程主要区别在于,虚拟线程在运行周期内不依赖操作系统线程:它们与硬件脱钩,因此被称为 “虚拟”。这种解耦是由 JVM 提供的抽象层赋予的。 虚拟线程的运行成本远低于平…

组合设计模式

package com.jmj.pattern.combination;/*** 菜单组件,属于抽象根节点*/ public abstract class MenuComponent {//菜单组件的名称protected String name;//菜单组件的层级protected int level;//添加子菜单public void add(MenuComponent menuComponent) {throw new…

12.Spring源码解析-其它标签解析

容易看出,Spring其实使用了一个Map了保存其映射关系,key就是命名空间的uri,value是NamespaceHandler对象或是Class完整名,如果发现是类名,那么用反射的方法进行初始化,如果是NamespaceHandler对象&#xff…

计算虚拟化之CPU——qemu解析

解析 qemu 的命令行,qemu 的命令行解析,就是下面这样一长串。 qemu_add_opts(&qemu_drive_opts);qemu_add_opts(&qemu_chardev_opts);qemu_add_opts(&qemu_device_opts);qemu_add_opts(&qemu_netdev_opts);qemu_add_opts(&qemu_nic_…

C语言枚举的作用是什么?

我在知乎上看到这个问题,一开始,也有一些疑惑,后面查了一些资料,对于这个问题,简单的说一下我的看法。 枚举有多大 枚举类型到底有多大,占多少空间呢?这个要具体情况具体分析,编译器…

【shell】多行重定向与免交互expect与ssh、scp的结合使用

目录 一、多行重定向 举例1:使用read命令接收用户的输入值会有交互过程 举例2:设置变量的值 举例3:创建用户密码 举例4:使用多行重定向写入文件中(以repo文件举例) 举例5:变量设定 二、免…

C++初阶模板

介绍: 我们先认识以下C中的模板。模板是一种编程技术,允许程序员编写与数据类型无关的代码,它是一种泛型编程的方式,可以用于创建可处理多种数据类型的函数或类,也就是说泛型编程就是编写与类型无关的通用代码&#xf…

多线程(补充知识)

STL库,智能指针和线程安全 STL中的容器是否是线程安全的? 不是. 原因是, STL 的设计初衷是将性能挖掘到极致, 而一旦涉及到加锁保证线程安全,会对性能造成巨大的影响. 而且对于不同的容器, 加锁方式的不同, 性能可能也不同(例如hash表的锁表和锁桶). 因此 STL 默认…

【LeetCode】每日一题 2023_11_25 二叉树中的伪回文路径(dfs,数组/位运算)

文章目录 刷题前唠嗑题目:二叉树中的伪回文路径题目描述代码与解题思路偷看大佬题解 结语 刷题前唠嗑 LeetCode?启动!!! 这个月第一次周末早起~ 题目:二叉树中的伪回文路径 题目链接:1457. 二…

20世纪的葡萄酒有哪些创新?

葡萄酒是用酵母发酵的,直到20世纪中叶,这一过程都依赖于自然产生的酵母。这些发酵的结果往往不一致,而且由于发酵时间长,容易腐败。 酿酒业最重要的进步之一是在20世纪50、60年代引进了地中海的纯发酵菌种酿酒酵母,俗称…