java代码检查

目录

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 

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jenkins安装以及基本配置

一、docker 1.安装docker 联网安装命令如下 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun或者也可以使用国内 daocloud 一键安装命令&#xff1a; curl -sSL https://get.daocloud.io/docker | sh2.启动docker systemctl start docker二、docker…

pycharm更改远程服务器地址

一、问题描述 在运行一些项目时&#xff0c;我们常需要在pycharm中连接远程服务器&#xff0c;但万一远程服务器的ip发生了变化&#xff0c;该如何修改呢&#xff1f;我们在file-settings-python interpreter中找到远程服务器&#xff0c;但是发现ip是灰色的&#xff0c;没有办…

Azure 机器学习 - 使用 Visual Studio Code训练图像分类 TensorFlow 模型

了解如何使用 TensorFlow 和 Azure 机器学习 Visual Studio Code 扩展训练图像分类模型来识别手写数字。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员…

curl(七)上传和下载

一 上传 ① -T | --upload 上传 ​1、向ftp服务器 传一个文件&#xff1a;curl -T localfile -u name&#xff1a;passwd ftp://upload_site&#xff1a;port/path/2、向http服务器上传文件curl -T localfile http://www.wzj.com/wzj.html注意: 这时候使用的协议是HTTP的PUT…

基于STM32设计的室内环境监测系统(华为云IOT)_2023

一、设计需求 基于STM32+华为云物联网平台设计一个室内环境监测系统,以STM32系列单片机为主控器件,采集室内温湿度、空气质量、光照强度等环境参数,将采集的数据结果在本地通过LCD屏幕显示,同时上传到华为云平台并将上传的数据在Android移动端能够实时显示、查看。 【1…

5.数据表基本操作

目录 1.创建数据表 创建数据表的语法格式&#xff1a; 查看当前数据库的表&#xff1a; 主键 1.单字段主键 (1)在定义列的同时指定主键&#xff0c;语法规则如下&#xff1a; (2)在定义完所有列之后指定主键。 2.多字段联合主键 外键&#xff1a; 非空约束&#xff1…

react_11

MobX 介绍 需求&#xff0c;组件0 改变了数据&#xff0c;其它组件也想获得改变后的数据&#xff0c;如图所示 这种多个组件之间要共享状态数据&#xff0c;useState 就不够用了&#xff0c;useContext 也不好用了 能够和 react 配合使用的状态管理库有 MobX Redux 其中…

黑猫带你学NandFlash第3篇:NAND寻址(行列地址和block/page/LUN之间的关系)

本文依据不同型号NandFlash spec及个人工作经验整理而成,如有错误请留言。 文章为付费内容,已加入原创侵权保护,禁止私自转载及抄袭。 文章所在专栏:《黑猫带你学:NandFlash详解》 本文大约2000字,主要讲解:nand flash如何物理寻址、多plane又是如何寻址、相关计算公式等…

Spring Data Redis + RabbitMQ - 基于 string 实现缓存、计数功能(同步数据)

目录 一、Spring Data Redis 1.1、缓存功能 1.1.1、分析 1.1.2、案例实现 1.1.3、效果演示 1.2、计数功能&#xff08;Redis RabbitMQ&#xff09; 1.2.1、分析 1.2.2、案例实现 一、Spring Data Redis 1.1、缓存功能 1.1.1、分析 使用 redis 作为缓存&#xff0c; M…

ArmSom---I2C开发指南

1. 简介 RK3588从入门到精通 本⽂介绍在rockchip平台下如何配置i2c接口的方法并且添加调试验证i2c外设的例子 开发板&#xff1a;ArmSoM-W3 Kernel&#xff1a;5.10.160 OS&#xff1a;Debian11 2. i2c接口概述 i2c 总线控制器通过串行数据&#xff08;SDA&#xff09;线…

【hcie-cloud】【1】华为云Stack解决方案介绍、华为文档获取方式 【上】

文章目录 华为文档获取方式前言云计算发展背景国家政策、社会发展驱动数字经济开启新时代深化数字化转型提升效率&#xff0c;国家数字主权云进入落地阶段从Cloud-Based到Cloud-Native&#xff0c;两种模式长期并存适合政企智能升级的云华为云Stack&#xff0c;政企智能升级首选…

ks ios快手极速版、概念版、创作版sig sig3

风控&#xff1a; 快手除了正版下&#xff0c;还有极速版&#xff0c;概念版&#xff0c;创作版。 然而看了下概念版还是风控比正版要低的多~ 抓包&#xff1a; 对于快手的ios版本抓包很简单&#xff0c;直接vpn转发抓包方式即可&#xff0c;不可用代理抓包&#xff1b;这个…

[SSD综述 1.4] SSD固态硬盘的架构和功能导论

依公知及经验整理,原创保护,禁止转载。 专栏 《SSD入门到精通系列》 <<<< 返回总目录 <<<< ​ 前言 机械硬盘的存储系统由于内部结构, 其IO访问性能无法进一步提高,CPU与存储器之间的性能差距逐渐扩大。以Nand Flash为存储介质的固态硬盘技术的发展,…

redis rdb aof

appendonly yes # appendfsync always appendfsync everysec # appendfsync no E:\Document_Redis_Windows\redis-2.4.5-win32-win64\64bit appendonly.aof

基于单片机的养殖场温度控制系统设计

博主主页&#xff1a;单片机辅导设计 博主简介&#xff1a;专注单片机技术领域和毕业设计项目。 主要内容&#xff1a;毕业设计、简历模板、学习资料、技术咨询。 文章目录 主要介绍一、控制系统设计二、系统方案设计2.1 系统运行方案设计2.1.1 羊舍环境温度的确定 三、 系统仿…

ElasticSearch高级功能详解与原理剖析

ES数据预处理 Ingest Node Elasticsearch 5.0后&#xff0c;引入的一种新的节点类型。默认配置下&#xff0c;每个节点都是Ingest Node&#xff1a; 具有预处理数据的能力&#xff0c;可拦截lndex或Bulk API的请求对数据进行转换&#xff0c;并重新返回给Index或Bulk APl 无…

项目实战:优化Servlet,把所有围绕Fruit操作的Servlet封装成一个Servlet

1、FruitServlet 这些Servlet都是围绕着Fruit进行的把所有对水果增删改查的Servlet放到一个Servlet里面&#xff0c;让tomcat实例化一个Servlet对象 package com.csdn.fruit.servlet; import com.csdn.fruit.dto.PageInfo; import com.csdn.fruit.dto.PageQueryParam; import c…

(景行锐创) 高性能计算平台 Pytorch 深度学习环境超详细教程

文章目录 前言1. 账号申请2. 登录高算平台网站3. 安装 Xshell&#xff0c;Xftp 软件4. 连接高算平台5. 安装 Anaconda6. 安装 CUDA7. 配置 cuDNN8. 安装 torch 和 torchvision9. 提交作业测试10. 解压与压缩文件11. 其他结语 前言 目前一些学校为了便于师生进行大规模的计算任…

vue工程化开发和脚手架

工程化开发和脚手架 1.开发Vue的两种方式 核心包传统开发模式&#xff1a;基于html / css / js 文件&#xff0c;直接引入核心包&#xff0c;开发 Vue。工程化开发模式&#xff1a;基于构建工具&#xff08;例如&#xff1a;webpack&#xff09;的环境中开发Vue。 工程化开…

使用免费 FlaskAPI 部署 YOLOv8

目标检测和实例分割是计算机视觉中关键的任务&#xff0c;使计算机能够在图像和视频中识别和定位物体。YOLOv8是一种先进的、实时的目标检测系统&#xff0c;因其速度和准确性而备受欢迎。 Flask是一个轻量级的Python Web框架&#xff0c;简化了Web应用程序的开发。通过结合Fla…