jacoco和sonar

news2024/11/25 0:41:54

目录

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.coloradmin.cn/o/1179717.html

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

相关文章

CAP定理一文带你速解(通俗易懂,图文并茂)

目录 CAP定理 概述 Consistence&#xff08;一致性&#xff09; Availability &#xff08;可用性&#xff09; Partition Tolerance&#xff08;分区容错性&#xff09; 保证P&#xff0c;为什么无法同时满足AC&#xff1f; CP与AP如何取舍 CAP定理是分布式事务的基础…

Node.js |(五)包管理工具 | 尚硅谷2023版Node.js零基础视频教程

学习视频&#xff1a;尚硅谷2023版Node.js零基础视频教程&#xff0c;nodejs新手到高手 文章目录 &#x1f4da;概念介绍&#x1f4da;npm&#x1f407;安装npm&#x1f407;基本使用&#x1f407;生产依赖与开发依赖&#x1f407;npm全局安装&#x1f407;npm安装指定包和删除…

机器视觉工程师注意高新待遇来了,非标设备厂家早就布局海外市场,国内大多数企业是谋生存情况下,而更具有大局观的企业走出去则是谋发展

冬天来了&#xff0c;大家记得多添点衣服&#xff0c;记得穿秋裤&#xff01; 当各个厂家都在国内抢订单的时候&#xff0c;更多的非标设备厂家早已走向海外&#xff0c;布局海外市场&#xff0c;或者在新的领域积极开展新的业务。为自身公司带来大量海外订单。 别的企业都是…

Excel 转 Json 、Node.js实现(应用场景:i18n国际化)

创作灵感来源于在线转换是按照换行符去转换excel内容换行符后很难处理 本文是按单元格转换 const xlsx require(node-xlsx) const fs require(fs) const xlsxData xlsx.parse(./demo.xlsx) // 需要转换的excel文件// 数据处理 方便粘贴复制 const data xlsxData[2].data …

汽车发动机各系统部件构造图解及名称大全(超详细)

我们都知道发动机是汽车的心脏,相信大家都有东拼西凑的学一些发动机知识,今天汽车维修网小编给大家系统的整理整个发动机的基础知识,如果能认真看完,相信肯定有所收获。全文3065字,81幅结构图,建议收藏、分享后再慢慢看。 首先我们来看一下 发动机总成构造图解 发动机…

zookeeper:启动原理

主类&#xff1a; QuorumPeerMain, 其中调用了main对象的initializeAndRun方法&#xff0c; 首先定义了QuorumPeerConfig对象&#xff0c;然后调用了parse方法&#xff0c;parse方法代码如下&#xff1a; 其中调用的parseProperties方法的代码如下&#xff1a; 可以看到&am…

嵌入式C语言自我修养《数据存储与指针》学习笔记

目录 一、数据类型和存储 1.大端模式和小端模式 2.有符号数和无符号数 二、数据对齐 1.为什么要数据对齐 2.结构体对齐 3.联合体对齐 三、数据的可移植性 四、 Linux内核中的size_t类型 五、typedef的使用 1. typedef的基本用法 2.使用typedef的优势 3. typedef的作用域 六…

前端常用的版本管理工具

一、是什么 版本控制&#xff08;Version control&#xff09;&#xff0c;是维护工程蓝图的标准作法&#xff0c;能追踪工程蓝图从诞生一直到定案的过程。此外&#xff0c;版本控制也是一种软件工程技巧&#xff0c;借此能在软件开发的过程中&#xff0c;确保由不同人所编辑的…

汽车驾驶智能座舱太阳光模拟器老化试验

一、太阳光模拟器老化试验目的 太阳光模拟器氙光灯老化试验是一种常用的材料老化测试方法&#xff0c;通过模拟自然光照条件下的老化过程&#xff0c;评估材料的耐光性能和耐候性能其主要目的有: 1.评估材料在长时间暴露于自然光照条件下的耐久性能: 2.比较不同材料的耐光性…

龙芯loongarch64服务器编译安装scipy

前言 根据我之前的文章介绍&#xff0c;龙芯loongarch64服务器中的很多python依赖包安装有问题&#xff0c;发现其中安装的"scikit-learn"就无法正常使用&#xff0c;所有这里在 pip3 install scikit-learn -U -i https://pypi.tuna.tsinghua.edu.cn/simple 的时候发…

telnet的使用

用于查看 某个ip某个端口通不通 telnet 136.126.122.123 6380 这个代表通了

NLP项目windows环境搭建

一、安装Anaconda Free Download | Anaconda 二、安装PyCharm PyCharm&#xff1a;JetBrains为专业开发者提供的Python IDE 三、创建Python虚拟环境 1. 打开命令窗口 "开始"菜单中找到Anaconda3 - Anaconda Powershell Prompt 说明&#xff1a; Anaconda Power…

应用在触摸显示屏中的高性能低功耗触摸芯片

触摸屏显示器(Touch Screen)可以让使用者只要用手指轻轻地碰计算机显示屏上的图符或文字就能实现对主机操作&#xff0c;这样摆脱了键盘和鼠标操作&#xff0c;使人机交互更为直截了当。简单的说&#xff0c;只是在显示器上安装了触摸屏&#xff0c;成为带有触摸功能的显示器。…

el-input-number输入框超过限制后自动变为最大值

input输入框使用了el-input-number 需求&#xff1a;目标室温输入框数据库设置最大是4位整数&#xff0c;限制一位小数&#xff0c;且后面要加单位&#xff0c;当输入数字超过限制&#xff0c;默认显示限制的最大值 &#xff0c;所以就有了输入完图一自动变为图二的数字。 el-i…

CV计算机视觉每日开源代码Paper with code速览-2023.11.3

精华置顶 墙裂推荐&#xff01;小白如何1个月系统学习CV核心知识&#xff1a;链接 点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构】&#xff08;NeurIPS2023&#xff09;Ai…

MySQL第六讲·where和having的异同?

你好&#xff0c;我是安然无虞。 文章目录 面试常考&#xff1a;where与having有什么不同&#xff1f;一个实际查询需求wherehaving怎么正确的使用where和having&#xff1f; 面试常考&#xff1a;where与having有什么不同&#xff1f; 我们在进行查询的时候&#xff0c;经常…

C语言运行代码示例

这是一个基本的 C 爬虫程序&#xff0c;使用了 C11 版本。这个程序使用了 C11 的标准库&#xff0c;包括了网络编程库&#xff08;<net/http>&#xff09;&#xff0c;字符串处理库&#xff08;<string>&#xff09;和文件操作库&#xff08;<fstream>&#…

Centos7下通过docker安装Rancher2.7搭建Kubernetes

Rancher官方网站&#xff08;中文&#xff09; Rancher单节点 Rancher2.7与Kubernetes部署在同一台设备上 关闭防火墙与selinux #关闭防火墙 systemctl stop firewalld && systemctl disable firewalld && iptables -F #关闭selinux sed -i s/enforcing/di…

聚观早报 |小鹏P7i 550版上市;零一万物发布大模型

【聚观365】11月7日消息 小鹏P7i 550版上市 零一万物发布大模型 vivo X100现身Geekbench 小马智行与丰田联合发布Robotaxi 王云鹏出任百度IDG负责人 小鹏P7i 550版上市 小鹏P7i 550版正式上市&#xff0c;新车共推出550 Pro、550 Max 两款新版型&#xff0c;售价分别为22…