Spring Boot集成findbug快速入门Demo

1.什么是findbug?

FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用 Visitor 模式来鉴别代码是否符合一些固定的规范。

2.代码工程

实验目的

通过findbug发现程序中存在的问题

pom.xml

通过mvn package执行findbug check命令

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springboot-demo</artifactId><groupId>com.et</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>findbug</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><!-- findbugs插件 --><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>findbugs-maven-plugin</artifactId><version>3.0.5</version><configuration><!-- 设置分析工作的等级,可以为Min、Default和Max --><effort>Low</effort><!-- Low、Medium和High (Low最严格) High只扫描严重错误。建议用Medium--><threshold>Medium</threshold><failOnError>true</failOnError><includeTests>true</includeTests><!--findbugs需要忽略的错误的配置文件--><excludeFilterFile>conf/findbugs-exclude-filter.xml</excludeFilterFile></configuration><executions><execution><id>run-findbugs</id><!-- 在package(也可设为compile) 阶段触发执行findbugs检查,比如执行 mvn clean package --><phase>package</phase><goals><goal>check</goal></goals></execution></executions></plugin></plugins>
</build></project>

模拟错误

package com.et.findbug;/*** @author liuhaihua* @version 1.0* @ClassName MockError* @Description todo* @date 2024/06/25/ 17:30*/public class MockError {private static String dbrBO;public final void refresh() {dbrBO = null;}
}

忽略检测

<?xml version="1.0" encoding="UTF-8"?>
<FindBugsFilter><Match><Class name="com.et.findbug.MockError" /></Match><Match><Package name="com.et.findbug.controller" /></Match><Match><Class name="com.et.findbug.controller" /><Method name="showHelloWorld"></Method></Match><Match><!--装箱后拆箱紧接着装箱,忽略不处理 --><!-- Boxed value is unboxed and then immediately reboxed--><Package name="~.*" /><Bug pattern="BX_UNBOXING_IMMEDIATELY_REBOXED" /></Match></FindBugsFilter>

手工模拟一些错误

package com.et.findbug;import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.Random;public class FindBugsDemo {private static final DateFormat yyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");public static String yyyyMMddForMat(Date date) {return yyyyMMdd.format(date);}public static int getRanDom() {return new Random().nextInt();}public static int round(int num) {return Math.round(num);}public static void printMap(Map<?, ?> map) {if (map != null && map.size() > 0) {for (Object key : map.keySet()) {System.out.println("key--->" + key);System.out.println("value--->" + map.get(key));}}}public static String trimString(String str) {str.trim();return str;}@Overridepublic boolean equals(Object obj) {return super.equals(obj);}}

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • GitHub - Harries/springboot-demo: a simple springboot demo with some components for example: redis,solr,rockmq and so on.

3.测试

执行打包命令

mvn package

返回结果

[INFO] 
[INFO] --- findbugs-maven-plugin:3.0.5:check (run-findbugs) @ findbug ---
[INFO] BugInstance size is 3
[INFO] Error size is 0
[INFO] Total bugs: 3
[INFO] Random object created and used only once in com.et.findbug.FindBugsDemo.getRanDom() [com.et.findbug.FindBugsDemo] At FindBugsDemo.java:[line 18] DMI_RANDOM_USED_ONLY_ONCE
[INFO] int value cast to float and then passed to Math.round in com.et.findbug.FindBugsDemo.round(int) [com.et.findbug.FindBugsDemo] At FindBugsDemo.java:[line 22] ICAST_INT_CAST_TO_FLOAT_PASSED_TO_ROUND
[INFO] com.et.findbug.FindBugsDemo.printMap(Map) makes inefficient use of keySet iterator instead of entrySet iterator [com.et.findbug.FindBugsDemo] At FindBugsDemo.java:[line 29] WMI_WRONG_MAP_ITERATOR
[INFO] 
To see bug detail using the Findbugs GUI, use the following command "mvn findbugs:gui"

4.引用

  • suorceforge 地址:FindBugs™ - Find Bugs in Java Programs
  • 官方的文档 :FindBugs™ Manual
  • Spring Boot集成findbug快速入门Demo | Harries Blog™

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

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

相关文章

常见漏洞之XSS

一、XSS简介 XSS&#xff08;Cross-Site Scripting&#xff0c;跨站脚本攻击&#xff09;是一种常见的网络攻击方式&#xff0c;通过在网页中注入恶意脚本&#xff0c;当其他用户浏览这些网页时&#xff0c;这些嵌入的恶意脚本会在其浏览器上执行&#xff0c;从而进行各种恶意…

Eureka服务治理深度解析:服务下线与剔除机制揭秘

Eureka服务治理深度解析&#xff1a;服务下线与剔除机制揭秘 在微服务架构中&#xff0c;服务的动态注册与发现是保证系统高可用性的关键。Netflix开源的Eureka作为服务发现框架&#xff0c;其服务下线与剔除机制是确保服务列表准确性的重要手段。本文将深入探讨Eureka中的服务…

通过docker启动Jenkins容器报错

项目场景&#xff1a; 通过docker启动Jenkins容器 问题描述 Jenkins容器启动失败&#xff0c;通过sudo docker logs -f jenkins命令 查看日志如下&#xff1a; touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied Can not write to /var…

如何实现免交互

如何实现免交互 一、免交互 交互&#xff1a;我们发出指令控制程序的运行&#xff0c;程序在接收到指令之后按照指令的效果做出对应的反应 免交互&#xff1a;间接的通过第三方的方式把指令传送给程序&#xff0c;不用直接的下达指令 Here Document免交互&#xff1a;这是命…

Stirling-PDF 安装和使用教程

PDF (便携式文档格式) 目前已经成为了文档交换和存储的标准。然而&#xff0c;找到一个功能全面、安全可靠、且完全本地化的 PDF 处理工具并不容易。很多在线 PDF 工具存在隐私和安全风险&#xff0c;而桌面软件往往价格昂贵或功能有限。那么&#xff0c;有没有一种解决方案能够…

消防工程乙级资质申报办理所需标准

企业资质要求&#xff1a; 必须具备独立的法人资格。社会信誉良好&#xff0c;无不良记录。注册资本不少于100万元人民币。 技术条件&#xff1a; 专业技术人员配置&#xff1a;至少需要10名主要技术人员&#xff0c;具体包括电气专业2人、自动控制专业2人、给排水专业2人、暖通…

Appium+python自动化(二十七)-让你在手机找到溜冰一样的感觉666,溜得飞起来 - 低级滑动(超详解)

简介 随着现在智能手机的普及和应用&#xff0c;小到五六岁或者更小的娃娃&#xff0c;老至七八十岁老头老太太都是智能手机的用户&#xff0c;基本上达到每个人都在用&#xff0c;每次在地铁或者公交上&#xff0c;就看看到这样的场面&#xff0c;手指不停地在手机屏幕上来来回…

使用Spring Boot和Thymeleaf构建动态Web页面

使用Spring Boot和Thymeleaf构建动态Web页面 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将探讨如何利用Spring Boot和Thymeleaf构建动…

游戏服务器研究三:bigworld 的 load balance 算法

1. 前言 bigworld 的 load balance 算法的大致思路是知道的&#xff0c;即 动态区域分割 动态边界调整。但具体是怎么实现的&#xff0c;不清楚&#xff0c;网上也不找到相关的文章介绍&#xff0c;所以只能自己看代码进行分析。 本文大致记录我所分析到的算法实现&#xff…

R、RStudio、VScode、jupyter-notebook 联动手册【如何优雅的使用R?】

R 语言是数据处理中常用的语言&#xff0c;由于其开源、简洁的语法、良好的社区生态等特性而广受追捧。 本文不涉及具体的安装过程&#xff0c;主要对各种使用方式进行比较&#xff0c;但是会给出对应下载地址和一些关键之处的小tips。 一、R 第一步&#xff1a;安装R R语言官…

【ARM64 常见汇编指令学习 19.4 -- 条件设置指令 CSET 详细介绍】

请阅读【嵌入式开发学习必备专栏】 文章目录 ARM CSET 指令CSET 指令格式使用示例使用场景条件码 ARM CSET 指令 在ARMv8/v9架构中&#xff0c;CSET指令是一种条件设置指令&#xff0c;用于根据条件标志&#xff08;Condition flags&#xff09;的状态来设置寄存器的值。CSET指…

企业做等保的好处

等保&#xff0c;即网络安全等级保护&#xff0c;是对信息系统进行安全防护的一种制度化、标准化的方法。它对企业具有深远的影响和诸多好处。 提升企业安全防护能力 等保工作涵盖了系统定级、建设、管理和监督等多个环节&#xff0c;这些环节相互配合&#xff0c;共同构建起…

Appium+python自动化(二十八)- 滑呀滑,滑到奈何桥喝碗孟婆汤 - 高级滑动(超详解)

简介   奈何桥上叹奈何&#xff0c;三生石前憾三生&#xff0c;彼岸花下非彼岸&#xff0c;奈何三生彼岸人。 相传过了鬼门关便上一条路叫黄泉路&#xff0c;路上盛开着只见花&#xff0c;不见叶的彼岸花。花叶生生两不见&#xff0c;相念相惜永相失&#xff0c;路尽头有一条…

【JavaScript】流程控制和函数

目录 一、分支语句 1、if语句&#xff1a; 2、switch语句&#xff1a; 二、循环语句 1、while循环语句 2、for循环语句 三、函数声明 1、function 函数名(形参列表){ 函数体 } 2、var 函数名function(形参列表){函数体} 一、分支语句 1、if语句&#xff1a; if(表达式){ }else …

Vue-cli搭建项目----基础版

什么是Vue-cli 全称:Vue command line interface 是一个用于快速搭建Vue.js项目的标准工具,他简化了Vue.js应用的创建和管理过程,通过命令工具帮助开发者快速生成,配置和管理Vue项目. 主要功能 同一的目录结构本地调试热部署单元测试集成打包上线 具体操作 第一步创建项目:…

【小学期】本地安装SQL并测试

1. 什么是SQL&#xff1f; SQL&#xff0c;全称为 Structured Query Language&#xff0c;即结构化查询语言。它是一种用于管理和操作关系型数据库的标准化编程语言。SQL 语言主要用于以下几个方面&#xff1a; 数据查询&#xff08;Data Query&#xff09;&#xff1a;检索数…

Memcached add 命令

Memcached add 命令 Memcached 是一种高性能的分布式内存对象缓存系统,通常用于缓存数据库调用、API响应或页面渲染结果,以减少服务器负载并加快访问速度。add 命令是 Memcached 中用于添加新键值对的基本命令之一。 命令语法 Memcached add 命令的基本语法如下: add ke…

第三届人工智能、物联网与云计算技术国际会议(AIoTC 2024)

第三届人工智能、物联网与云计算技术国际会议(AIoTC 2024)将于2024年9月13日-15日在中国武汉举行。本次会议由华中师范大学伍伦贡联合研究院与南京大学联合主办、江苏省大数据区块链与智能信息专委会承办、江苏省概率统计学会、江苏省应用统计学会、Sir Forum、南京理工大学、南…

备战秋招day5

算法 344. 反转字符串 class Solution {public void reverseString(char[] s) {//拿一个中间变量来承载即可int l 0;int r s.length-1;while(l<r){char tmp s[l];s[l] s[r];s[r] tmp;l;r--;}} } 541. 反转字符串 II class Solution {public String reverseStr(Strin…

西门子智能电气阀门定位器在冶金生产控制的应用

西门子智能电气阀门定位器在冶金生产控制的应用 1 前 言 在自动化程度越来越高的冶金行业中 ,调节阀起着至关重要的作用,一旦其发生故障, 轻则出现生产事故,停机,停炉影响各级生产指标,生产任务,影响装置的安全运行。重则可能出现人身安全事故,将直接影响家庭的幸福和企…