Java代码质量评估工具

news2025/1/10 23:38:44

概述

Java代码的质量评估主要包括代码的可维护性、健壮性、以及在运行时能达到既定的性能目标,可维护性主要包括代码的可读性、在关键的代码上提供详细注释、在设计类、方法以及代码逻辑时符合设定的编码规范,健壮性主要包括编写代码时应使用常用的设计模式、在代码发生异常时能提供合理的容错性,代码运行的性能目标主要包括代码能高效地运行、代码在执行计算的过程中应合理地使用内存资源、处理器资源以及其他系统资源。

本文主要描述Eclipse IDE的集成开发工具提供的相关插件,这些插件主要包括阿里云的P3C、CheckStyle、PMD、FindBugs、SourceMonitor、Sonar,使用这些插件对项目工程代码执行静态扫描,从而输出代码存在的问题,研发人员可以根据这些问题初步评估代码的质量,然后,修改以及优化这些代码问题,这些插件的功能与作用如下所示:

阿里云的P3C

P3C是阿里云提供的编程规范的插件,支持Eclipse IDE或者其他IDE,其提供的编程规约包括命名规范、常量定义、代码格式、OOP规约、集合处理、并发处理、控制语句、注释规约以及其他规约

CheckStyle

Check Style是一款开发工具,开发者可以使用该工具检查代码是否符合既定的标准规范,其提供的检查范围包括类设计问题、方法设计问题、代码编写格式或者布局问题、其他问题,其支持Eclipse IDE或者Maven插件

 

PMD

PMD是一款静态代码分析工具,使用该工具检查代码可以帮助开发者发现的问题包括未被使用的变量、无用或者空的代码块、多余被创建的类对象、其他问题,其支持Eclipse IDE或者Maven插件

 

FindBugs

FindBugs是一款专用于Java语言的代码安全审计的工具,其提供的代码检查功能包括发现代码类型安全问题、发现传输协议数据安全问题,其支持OWASP标准以及CWE标准的安全性检查,其提供Eclipse IDE或者Maven插件

 

SourceMonitor

SourceMonitor是一款用于统计代码行数、检查代码圈复杂度的工具,代码圈复杂度能直接反映出代码算法的计算效率的问题,复杂度越高,则代码算法的执行效率越低

 

Sonar

Sonar提供三种方式的代码检查工具,包括Eclipse IDE插件本地代码检查、支撑企业内开发团队的代码检查平台、在DevOps  CI/CD领域中提供有效的工具集成到云环境

 

阿里云的P3C

https://github.com/alibaba/p3c/

图片

如上所示,git上下载P3C源代码到本地开发环境

https://p3c.alibaba.com/plugin/eclipse/update

图片

如上所示,在Eclipse IDE中,输入P3C的插件网络地址即可安装

图片

如上所示,Alibaba Code Guidelines代码检查插件安装成功

图片

如上所示,使用Alibaba Code Guidelines代码检查插件对Java项目工程代码执行扫描,输出代码存在的问题,开发人员可以根据这些问题及时修复以及优化代码

CheckStyle

https://checkstyle.org/index.html

https://maven.apache.org/plugins/maven-checkstyle-plugin/usage.html

    

图片

如上所示,在Eclipse IDE的Maven工程中配置Maven checkstyle插件

图片

如上所示,在Eclipse IDE执行Maven的命令生成代码检查报告

图片

图片

如上所示,在项目构建的目标目录site中,输出checkstyle的报告

图片

如上所示,checkstyle.html页面中可以查看代码存在的问题

PMD

https://docs.pmd-code.org/latest/pmd_userdocs_tools_maven.html

图片

图片

如上所示,在Eclipse IDE项目工程中配置Maven的pom.xml

图片

如上所示,在Eclipse IDE中运行Maven的命令执行PMD对代码的分析

图片

如上所示,在项目工程的构建目录中输出pmd.html的代码分析报告

FindBugs

https://find-sec-bugs.github.io/

图片

图片

如上所示,在Eclipse IDE项目工程中配置Maven的pom.xml

mvn compile

mvn spotbugs:spotbugs

mvn spotbugs:gui

图片

如上所示,在Eclipse IDE中运行Maven命令,执行findbugs的代码分析

图片

如上所示,findbugs提供的分析工具显示代码存在的问题

SourceMonitor

https://www.derpaul.net/SourceMonitor/

图片

如上所示,下载安装SourceMonitor工具、对Java代码工程执行圈复杂度的分析、输出分析报告

Sonar

https://docs.sonarsource.com/sonarlint/eclipse/

如上所示,在Eclipse IDE插件市场中搜索安装SonarLint

如上所示,在Eclipse IDE中使用SonarLint对Java项目工程执行代码分析

如上所示,SonarLint对Java项目工程执行代码分析,输出分析报告

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

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

相关文章

【JAVA-Day26】数组解析:什么是数组?如何定义?

数组解析:什么是数组?如何定义? 数组解析:什么是数组?如何定义?摘要一、什么是数组数组的特性:不同类型的数组:数组的应用场景:数组的限制和挑战: 二、如何定…

【论文阅读 07】Anomaly region detection and localization in metal surface inspection

比较老的一篇论文,金属表面检测中的异常区域检测与定位 总结:提出了一个找模板图的方法,使用SIFT做特征提取,姿态估计看差异有哪些,Hough聚类做描述符筛选,仿射变换可视化匹配图之间的关系&#xf…

【算法基础】数学知识

质数 质数的判定 866. 试除法判定质数 - AcWing题库 时间复杂度是logN #include<bits/stdc.h> using namespace std; int n; bool isprime(int x) {if(x<2) return false;for(int i2;i<x/i;i){if(x%i0) return false;}return true; } signed main() {cin>&g…

Git学习笔记1

任务要求&#xff1a; 1、使用git提交代码到仓库&#xff1b; 2、实现自动代码发布系统&#xff1b; 1、了解DevOps的发展历程和思想&#xff1b; 2、学会git版本控制&#xff1b; 3、会使用github公有仓库和gitlab私有仓库&#xff1b; 4、了解CI/CD&#xff1b; 5、使用…

svn(乌龟svn)和SVN-VS2022插件(visualsvn) 下载

下载地址: https://www.visualsvn.com/visualsvn/download/

Go的error接口

从本书的开始&#xff0c;我们就已经创建和使用过神秘的预定义error类型&#xff0c;而且没有解释它究竟是什么。实际上它就是interface类型&#xff0c;这个类型有一个返回错误信息的单一方法&#xff1a; type error interface { Error() string } 创建一个error最简单的方…

cutree 算法

传播 ​ 由于块与块之间具有参考关系&#xff0c;提升被参考块的质量&#xff0c;可以改善后续参考块的质量 ​ Pn1帧中CU0,1完全参考Pn的CU1,1。且Pn1帧中CU0,1块帧内预测和帧间预测的代价分别为 c x , y n 1 ( 0 , 0 ) c_{x,y}^{n1}(0,0) cx,yn1​(0,0)和 c x , y n 1 ( d…

vue获取本地缓存并转为json格式

场景 要求获取当前登录用户id&#xff0c;传入后台去筛选属于该用户的数据&#xff1b; 当前登录用户信息一般会在本地存储中&#xff0c;有些则是在session中&#xff0c;此处只对本地存储做讨论&#xff1b; 本地缓存的用法 1 存储数据 localStorage.setltem(userId,"…

【版本控制】Github和Gitlab同时使用ssh

前言 最近在使用 WSL 时会同时用到 GitHub和 Gitlab &#xff0c;因此与传统配置 ssh 方式有些不一样的地方&#xff0c;这里特别记录一下 本地生成公私密钥 首先确保把之前的 ssh 信息清除&#xff0c;也可以将整个 ~/.ssh 目录删除 rm -rf ~/.ssh/*我们分别生成 Github 和…

Bigemap如何添加谷歌历史影像

工具 Bigemap gis office地图软件 BIGEMAP GIS Office-全能版 Bigemap APP_卫星地图APP_高清卫星地图APP 很多粉丝私信都在问怎么才可以看到谷歌的历史影像&#xff0c;其实这个图源目前是没有对大陆网络ip进行开放&#xff0c;所以如果需要查看&#xff0c;也是需要看你当前…

阿里云产品试用系列-Serverless 应用引擎 SAE

Serverless 应用引擎 SAE&#xff08;Serverless App Engine&#xff09;是一个全托管、免运维、高弹性的通用 PaaS平台。SAE 支持 Spring Boot、Spring Cloud、Dubbo、HSF、Web 应用和 XXL-JOB、ElasticJob任务的全托管&#xff0c;零改造迁移、无门槛容器化、并提供了开源侧诸…

【JAVA-Day23】Java反射的五大神奇妙用,令人惊叹

Java反射的五大神奇妙用&#xff0c;令人惊叹 Java反射的五大神奇妙用&#xff0c;令人惊叹摘要引言一、什么是反射?一、什么是反射?1.1 为什么需要反射?1.1.1 动态加载类1.1.2 序列化和反序列化1.1.3 框架和库开发 1.2 反射基础 二、类2.1 类完整路径2.2 包路径2.3 类名2.4…

乐鑫科技全球首批支持蓝牙 Mesh Protocol 1.1 协议

乐鑫科技 (688018.SH) 非常高兴地宣布&#xff0c;其自研的蓝牙 Mesh 协议栈 ESP-BLE-MESH 现已支持最新蓝牙 Mesh Protocol 1.1 协议的全部功能&#xff0c;成为全球首批在蓝牙技术联盟 (Bluetooth SIG) 正式发布该协议之前支持该更新的公司之一。这意味着乐鑫在低功耗蓝牙无线…

vue 封装element公共组件 +后端联调

首先封装的是一个分页&#xff0c;也是项目组封装公共组件最多之一 1-1创建一个新的页面放分页功能 <template><div><el-pagination size-change"handleSizeChange" current-change"handleCurrentChange" :current-page"currentPage…

掷骰子的多线程应用程序2基于互斥量的线程同步(复现《Qt C++6.0》)

说明&#xff1a;在复现过程中出现两点问题&#xff08;1&#xff09;run()函数中对m_diceValued的赋值&#xff08;2&#xff09;do_timeOut()函数中没有对m_seq、m_diceValued进行定义。修改后的复现程序如下所示&#xff1a; 主线程&#xff1a; .h #pragma once#include…

python excel复制数据保留单元格格式(.xls.xlsx)

最近帮朋友开发一个数据excel根据条件动态过率的功能.读取生成用pandas很方便,但是这里有一点比较麻烦的是得保留原来的单元格格式.这点操作起来就要麻烦一点了.下面总结了.xlsx和.xls处理 1.xlsx 文件处理 xlsx文件处理可以使用openpyxl库进行处理,比较简单,流程如下 1.获取…

接入网络技术

接入网络&#xff1a;是实现网络边缘的端系统与网络核心连接与接入的网络。 常见有以下几类&#xff1a; 1、电话拨号接入&#xff1a;这类接入方式在早期接入网络中主要用于家庭接入&#xff0c;利用了电话网络覆盖广泛的优点&#xff0c;能够方便地实现分散的家庭用户接入网…

指针笔试题讲解(让指针变得简单易懂)

数组名的理解 : 数组名就是首元素地址 但是有两个例外&#xff1a; 1. sizeof&#xff08;数组名&#xff09;这里的数组名表示整个数组的大小&#xff0c;sizeof&#xff08;数组名&#xff09;计算的是整个数组的大小&#xff0c;单位是字节 2. &数组名 这里的数组…

MouseBoost 3.2.3 Pro右键助手 for Mac

MouseBoost Mac 右键助手是一款专为 Mac 平台开发的鼠标增强工具&#xff0c; 其主要特点如下&#xff1a; 1. 可自定义菜单&#xff1a;MouseBoost Mac 右键助手允许用户自定义右键菜单&#xff0c;可以添加或删除菜单项&#xff0c;以适应不同用户的需求。 2. 多种快捷操作&a…

蓝桥杯 题库 简单 每日十题 day5

01 字符计数 #include<stdio.h> int main() { char c; int i,j0,k0; while((cgetchar())!\n){if(ca||ce||ci||cu||co)j;else k;} printf("%d\n%d",j,k); return 0; }02 棋盘 #include<iostream> using namespace std; const int N 2010; int n,m; int …