jacoco和sonar

目录

jacoco

引入依赖

构建配置修改 

单元测试 

生成报告 

查看报告 

报告说明 

1. Instructions

2. Branches

3. Cyclomatic Complexity

4. Lines

5. Methods

6. Classes

sonar7.7

基础环境

需要下载软件

解压文件并配置 

运行启动


jacoco

引入依赖

 <dependencies><dependency><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.7</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.7.10</version></dependency>
</dependencies>

构建配置修改 

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target><encoding>UTF8</encoding></configuration><version>3.8.1</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.2</version></plugin><plugin><artifactId>maven-failsafe-plugin</artifactId><version>2.22.2</version></plugin><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.7</version><executions><execution><id>prepare-agent</id><goals><goal>prepare-agent</goal></goals></execution><execution><id>report</id><phase>test</phase><goals><goal>report</goal></goals><configuration><!--定义输出的文件夹--><outputDirectory>target/jacoco-report</outputDirectory><!--执行数据的文件--><dataFile>${project.build.directory}/jacoco.exec</dataFile><!--要从报告中排除的类文件列表,支持通配符(*和?)。如果未指定则不会排除任何内容--><excludes>**/test/*.class</excludes><!--包含生成报告的文件列表,支持通配符(*和?)。如果未指定则包含所有内容--><includes></includes><!--HTML 报告页面中使用的页脚文本。--><footer></footer><!--生成报告的文件类型,HTML(默认)、XML、CSV--><formats>HTML</formats><!--生成报告的编码格式,默认UTF-8--><outputEncoding>UTF-8</outputEncoding><!--抑制执行的标签--><skip></skip><!--源文件编码--><sourceEncoding>UTF-8</sourceEncoding><!--HTML报告的标题--><title>${project.name}</title></configuration></execution><execution><id>jacoco-check</id><goals><goal>check</goal></goals><configuration><rules><rule><element>PACKAGE</element><limits><limit><counter>LINE</counter><value>COVEREDRATIO</value><minimum>0.9</minimum></limit></limits></rule></rules></configuration></execution></executions></plugin></plugins>
</build>

单元测试 

需要保证所有的测试都是成功的

生成报告 

查看报告 

报告说明 

Jacoco从多种角度对代码进行了分析,包括指令(Instructions,C0 Coverage),分支(Branches,C1 Coverage),圈复杂度(Cyclomatic Complexity),行(Lines),方法(Methods),类(Classes)

1. Instructions

        Jacoco计算的最小单位就是字节码指令。指令覆盖率表明了在所有的指令中,哪些被执行过以及哪些没有被执行。这项指数完全独立于源码格式并且在任何情况下有效,不需要类文件的调试信息。

2. Branches

        Jacoco对所有的if和switch指令计算了分支覆盖率。这项指标会统计所有的分支数量,并同时指出哪些分支被执行,哪些分支没有被执行。这项指标也在任何情况都有效。异常处理不考虑在分支范围内。

在有调试信息的情况下,分支点可以被映射到源码中的每一行,并且被高亮表示。

红色背景:无覆盖,该行的所有指令均无执行。

黄色背景:部分覆盖,该行部分指令被执行。

绿色背景:全覆盖,该行所有指令被执行。

3. Cyclomatic Complexity

        Jacoco为每个非抽象方法计算圈复杂度,并也会计算每个类,包,组的复杂度。根据McCabe1996的定义,圈复杂度可以理解为覆盖所有的可能情况最少使用的测试用例数。这项参数也在任何情况下有效。

        根据由McCabe1996圈复杂度的定义是,在(线性)组合中,计算在一个方法里面所有可能路径的最小数目。所以复杂度可以作为度量单元测试是否有完全覆盖所有场景的一个依据。复杂度即使是在没有调试信息的情况下也可以计算。

圈复杂度V(G)的正式定义是基于方法的控制流图的有向图表示:

v(G) = E – N + 2

E是边界的数量,N是节点的数量。Jacoco 基于下面的方程来计算复杂度,B是分支的数量,D是决策点的数量:

v(G) = B – D + 1

基于每个分支的被覆盖情况,Jacoco也为每个方法计算覆盖和缺失的复杂度。缺失的复杂度同样表示测试案例没有完全覆盖到这个模块。注意Jacoco不将异常处理作为分支,try/catch块也同样不增加复杂度。

4. Lines

        该项指数在有调试信息的情况下计算。因为每一行代码可能会产生若干条字节码指令,所以我们用三种不同状态表示行覆盖率

红色背景:无覆盖,该行的所有指令均无执行。

黄色背景:部分覆盖,该行部分指令被执行。

绿色背景:全覆盖,该行所有指令被执行。

5. Methods

        每一个非抽象方法都至少有一条指令。若一个方法至少被执行了一条指令,就认为它被执行过。因为JaCoco直接对字节码进行操作,所以有些方法没有在源码显示(比如某些构造方法和由编译器自动生成的方法)也会被计入在内。

6. Classes

        每个类中只要有一个方法被执行,这个类就被认定为被执行。同5一样,有些没有在源码声明的方法被执行,也认定该类被执行。

sonar7.7

基础环境

jdk1.8

maven
mysql >= 5.6 && <8.0

需要下载软件

sonarqube-7.7

sonar-scanner-3.3.0.1492 

解压文件并配置 

1.创建空数据库并创建用户

CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; 
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;

2.解压文件sonarqube-7.7,进入conf目录修改 sonar.properties 配置文件

# 数据库 sonar 创建空数据库即可
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
# 你的数据库账号
sonar.jdbc.username=root
# 你的数据库密码
sonar.jdbc.password=root
# 你的数据库编码
sonar.sorceEncoding=UTF-8
# sonarQube 的 登录账号 默认admin即可 等自己玩明白了 再来改动
sonar.login=admin
# sonarQube 的 登录密码  默认admin即可
sonar.password=admin

3.解压文件sonar-scanner-3.3.0.1492 ,进入conf文件夹 修改文件sonar-scanner.properties

sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.jdbc.username=root
sonar.jdbc.password=root
sonar.sourceEncoding=UTF-8

4.配置环境变量,新建系统环境变量

变量名:SONAR_RUNNER_HOME 
变量值:你解压sonar-scanner-3.3.0.1492 的文件夹,路径为bin的上层路径,不包括bin

编辑path 加入%SONAR_RUNNER_HOME%\bin
打开cmd 输入 sonar-scanner -v   提示成功 

5.进入你要质量检测代码的项目。在你的项目根目录下创建一个配置文件 名字为:sonar-project.properties

# 因为可能会检测多个项目 所以这个标识就是唯一标识key 你自己定义 这里我定义的是manage
sonar.projectKey=sonar-test
# 项目名,我用了和key一样的名字
sonar.projectName=sonar-test
#版本 随便定义
sonar.projectVersion=1.0
# Comma-separated paths to directories with sources (required)
# 根目录一般指的是pom.xml 同一个目录下
# 这个是要检测的文件路径一般是根目录比如说D盘test项目那么就是D:/test
# 因为我只检测java文件 所以 我指定的就是 D:/test/src/java,也就是说检测到哪个就指定到哪里,检测全部也可以。因为这个工具也可以过滤,指定的文件js或java或css等
sonar.sources=D:/workspace/sonar-test/src
#这个是classes目录 也是必须填写的。我的classes是 D:/test/target/classes 如果检测全部就是D:/test/target
sonar.java.binaries=D:/workspace/sonar-test/target
# Language
sonar.language=java
# Encoding of the source files
sonar.sourceEncoding=UTF-8
#如果是git项目 就加入下面配置 没有就不加
#sonar.scm.provider=git
sonar.scm.disabled=true

6.配置中文插件sonar-l10n-zh-plugin-1.22.jar,这样sonar的页面就会变成中文。把插件放在sonarqube-7.7文件夹 \extensions\plugins  下即可

运行启动

1.打开文件 sonarqube-7.7 下的bin目录,根据自己需要选择不同系统的文件,我的是windows,进入windows文件夹 执行 StartSonar.bat双击即可。sonarQube is up 启动成功

2.输入网址 localhost:9000 帐号密码 admin/admin ,即可看到主界面。
3.开始代码扫描,2种方式:

方式一:在idea中安装插件sonarLint并扫描代码

方式二:在项目路径下也就是你创建sonar-project.properties 的文件夹下,开启cmd命令,输入命令 sonar-scanner 

扫描分析成功。再次刷新网站页,就有分析中,或已经分析完成的项目了

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

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

相关文章

【论文阅读】PSDF Fusion:用于动态 3D 数据融合和场景重建的概率符号距离函数

【论文阅读】PSDF Fusion&#xff1a;用于动态 3D 数据融合和场景重建的概率符号距离函数 Abstract1 Introduction3 Overview3.1 Hybrid Data Structure3.2 3D Representations3.3 Pipeline 4 PSDF Fusion and Surface Reconstruction4.1 PSDF Fusion4.2 Inlier Ratio Evaluati…

Spring boot集成sentinel限流服务

Sentinel集成文档 Sentinel控制台 Sentinel本身不支持持久化&#xff0c;项目通过下载源码改造后&#xff0c;将规则配置持久化进nacos中&#xff0c;sentinel重启后&#xff0c;配置不会丢失。 架构图&#xff1a; 改造步骤&#xff1a; 接着我们就要改造Sentinel的源码。…

Hikyuu 1.3.0 发布,高性能量化交易研究框架

Hikyuu 是一款基于 C/Python 的高性能开源量化交易研究框架&#xff0c;用于快速策略分析及回测。与其他量化平台或回测软件相比&#xff0c;具备&#xff1a; 超快的回测速度&#xff1b;对完整的系统交易理念进行抽象&#xff0c;并分解为不同的组件&#xff0c;通过重用不同…

Windows下MSYS2下载与安装

下载地址&#xff1a; 官网下载地址 https://www.msys2.org/阿里云镜像下载 https://mirrors.aliyun.com/msys2/distrib/x86_64/https://mirrors.aliyun.com/msys2/distrib/x86_64/msys2-x86_64-20231026.exe?spma2c6h.25603864.0.0.12b92551XW5OSM官网下载 ![官网下载](htt…

使用vscode开发uniapp项目常用的辅助插件,提升开发效率

为什么不使用hbuilder开发呢&#xff1f;因为hbuilder对ts和vue3语法支持并不友好&#xff0c;而且代码提示不智能&#xff0c;也不能使用最近很流行的coplit和CodeGeex智能提示&#xff0c;所以就换掉hbulider&#xff0c;使用我们熟悉的vscode开发吧。 第一个&#xff1a;un…

高德地图设置电子围栏

高德地图设置电子围栏 需求效果图代码实现 需求 给地图上人员锚点设置围栏区域&#xff0c;如果在此区域内则是在线状态&#xff0c;不在此区域内则是离线状态 效果图 双击可编辑或清除当前围栏 代码实现 前端实现区域框选&#xff1a; //引入高德地图sdk"amap/amap…

将全连接层替换为卷积层的意义(CNN和FCN)

全连接层&#xff1a;CNN 将特征整合&#xff0c;用于分类&#xff0c;在图像中具体化为知道图像中有猫&#xff0c;但是不知道猫在哪儿。 在传统CNN中&#xff0c;输入是唯一确定大小的。因为全连接层要求输入是固定的。 全卷积网络&#xff1a;FCN 不仅可以用来分类&…

项目文件下载器,基于Thread多线程

目录 1、Http 工具类 2、关于下载的关系类 2.1 展示下载信息 #下载信息展现线程类 #在主下载类中&#xff0c;进行调用上述线程类 2.2 文件的分块下载 #文件分块下载类 #文件按分块进行分别切分的方法 # 使用 LongAdder 类型&#xff0c;更改 DownLoadInfoThread 展现…

计算机中丢失mfc140u.dll怎么解决

mfc140u.dll是一个Microsoft Visual C库文件&#xff0c;主要用于MFC&#xff08;Microsoft Foundation Class&#xff09;应用程序的开发。它包含了MFC应用程序所需的一些常用功能&#xff0c;如对话框、窗口、菜单等。当mfc140u.dll丢失时&#xff0c;可能会导致MFC应用程序无…

margin-bottom、margin-top设置不起效

问题&#xff1a; 如下&#xff0c;在uniapp项目中使用了tag标签&#xff0c;设置margin时&#xff0c;只有margin-left、margin-right生效&#xff0c;margin-bottom、margin-top设置不起效。f12直接在元素中修改也无效。 原因&#xff1a; uni-ui中的tag标签是行内元素&…

idea 模板参数注释 {@link}

1. 新增组 2. 设置方法注释及变量 增加模板文本 ** * $param$ * return {link $return$} */3. 设置变量表达式 勾选跳过param 参数表达式 groovyScript("def result ;def params \"${_1}\".replaceAll([\\\\[|\\\\]|\\\\s], ).split(,).toList();def param…

Vscode禁止插件自动更新

由于电脑的vscode版本不是很新。2022.10月份的版本1.7.2&#xff0c;电脑vscode的python插件装的也是2022年4月份的某个版本&#xff0c;但插件经常自动更新&#xff0c;导致python代码无法Debug,解决办法&#xff1a; 点设置&#xff0c;搜autoUpdate, 把红色框选成无

Linux中固定ip端口和修改ip地址

一&#xff0c;更改虚拟网络编辑器 1&#xff0c;首先启动VMware&#xff0c;选择自己要更改ip或固定ip的虚拟机&#xff0c;并找到虚拟网络配编辑器&#xff0c;点击进入 2&#xff0c;进入之后需要点击右下角获取管理员权限后才能修改&#xff0c;有管理员权限之后图片如下 …

setpci设定PCIe寄存器

PCIe寄存器信息读取、分析、配置 1.获取bdf &#xff08;bus:device.function&#xff09;地址2.根据bdf地址抓取pci信息3.结合PCIe Spec对读到的信息进行分析使用setpci修改 1.获取bdf &#xff08;bus:device.function&#xff09;地址 在Linux系统下使用命令&#xff1a; l…

django+drf+vue 简单系统搭建 (2) - drf 应用

按照本系统设置目的&#xff0c;是为了建立一些工具用来处理简单的文件。 1. 准备djangorestframework 关于drf的说明请参见&#xff1a;Django REST Framework教程 | 大江狗的博客 本系列直接使用drf的序列化等其他功能。 安装 conda install djangorestframework conda i…

Redis系列之常见数据类型应用场景

文章目录 String简单介绍常见命令应用场景 Hash简单介绍常见命令应用场景 List简单介绍常见命令应用场景 Set简单介绍常见命令应用场景 Sorted Set(Zset)简单介绍常见命令应用场景 Bitmap简单介绍常见命令应用场景 附录 Redis支持多种数据类型&#xff0c;比如String、hash、li…

【达梦数据库】mysql与达梦整数类型对比关系

最近遇了mysql 和达梦整数类型的数据范围对比&#xff0c;做了个表格供大家分享 对比表格 要说明的是我整理的时候&#xff0c;达梦貌似没有无符号整数类型&#xff08;防杠保护&#xff09;&#xff0c;也就是只能将mysql/dm 的有符号整数类型的的范围值进行对比 MYSQL - t…

高性能网络编程 - select、 poll 、epoll 、libevent

文章目录 概述优缺点SelectPollEpollLibEvent 概述 Select&#xff08;选择&#xff09;&#xff1a; Select 是一种传统的 I/O 多路复用机制&#xff0c;用于在类 Unix 操作系统&#xff08;如 Linux&#xff09;中同时管理多个文件描述符&#xff08;如网络套接字或文件&…

Java2 - 数据结构

5 数据类型 5.1 整数类型 在Java中&#xff0c;数据类型用于定义变量或表达式可以存储的数据的类型。Java的数据类型可分为两大类&#xff1a;基本数据类型和引用数据类型。 byte&#xff0c;字节 【1字节】表示范围&#xff1a;-128 ~ 127 即&#xff1a;-2^7 ~ 2^7 -1 sho…

Rust学习日记(二)变量的使用--结合--温度换算/斐波那契数列--实例

前言&#xff1a; 这是一个系列的学习笔记&#xff0c;会将笔者学习Rust语言的心得记录。 当然&#xff0c;这并非是流水账似的记录&#xff0c;而是结合实际程序项目的记录&#xff0c;如果你也对Rust感兴趣&#xff0c;那么我们可以一起交流探讨&#xff0c;使用Rust来构建程…