java代码分析及分析工具

2023-11-13

一个项目从搭建开始,开发的初期往往思路比较清晰,代码也比较清晰。随着时间的推移,业务越来越复杂。代码也就面临着耦合,冗余,甚至杂乱,到最后谁都不敢碰。

作为一个互联网电子商务网站的业务支撑系统,业务复杂不言而喻。从09年开始一直沿用到现在,中间代码经过了多少人的手,留下了多少的坑,已经记不清楚了,谁也说不清了。

代码的维护成本越来越高。代码已经急需做调整和改善。最近项目组专门设立了一个小组,利用业余时间做代码分析的工作,目标对核心代码进行分析并进行设计重构。

  代码分析如果用人工来做,需要两点:1、开发人员代码造诣要求很高。2、开发人员投入时间成本非常大。

然而现在网络上 Java代码分析工具做的比较好。所以考虑开始利用这些工具对代码进行分析,并做修改。当然最好在最后有个资深人士做相关的review或开发人员自检。

先考虑工具吧,工欲善其事,必先利其器。所以决定search一下,代码分析和代码分析的工具,便于更好的利用和进行。

  学习一下并做一些归纳:

      提到静态代码的概念:个人理解为 不需要运行起来的代码所关注的点。就是就代码看代码,语法、结构、接口、类等。

    整个软件开发生命周期中,网上说30% 至 70% (占有量还是很大的)的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。看来效果还是很明显的。

  静态代码分析的好处,的确有很多好处:

    1. 帮助程序开发人员自动执行静态代码分析,快速定位代码隐藏错误和缺陷。

    2. 帮助代码设计人员更专注于分析和解决代码设计缺陷。

    3. 显著减少在代码逐行检查上花费的时间,提高软件可靠性并节省软件开发和测试成本

概念不多提了,看工具:

1、findbugs:

  安装:http://sourceforge.net/projects/findbugs/

  看使用体验:针对一个项目启动findbugs,会进入findbugs的工作视图

 

 如上图

  蓝色区域:罗列出了findbugs在代码中检测到的代码问题。同样的红色为严重的,黄色为警告。

       由于自己写的学习项目所以代码不庞大,质量也还行,所以检测出来的都是黄色警告的。

  紫色区域:点击对应的检测点,能定位到问题代码具体的位置,并且在左边有个bug虫子给出具体问题的信息

  绿色区域:对应左边蓝色区域的检测点,给出的详细描述和建议。

     个人觉得findbugs对于代码检测的深度力度要更好。比如,子类名和父类名相同,死存储(没有调用却开辟空间的),一个方法没有对参数对象验证空等等。

  对代码的质量检查做的很到位。而且很清晰。当然findbugs 也有自定义的设置,个人觉得现有功能已经很好用了,不需要自定义。

2、Checkstyle :

    安装:http://sourceforge.net/projects/eclipse-cs/files/latest/download下载插件,links plugin的方式安装到eclipse中

    重点看使用体验:针对一个项目启动checkStyle之后

 

    

      刚检测完,项目所有类都泛黄,甚至有的类打上了小红叉。静心仔细的看下:

      提示有:public修饰符多余,一行超过80个字符,缺少文档注释,魔法数字等等等等。出现中文代码的地方会直接打红叉。非常精细。

      蓝色区域:包括Errors和warnings。Errors重点列出了代码中的问题,比如代码中有中文等等,Warnings:一般是代码风格不好的地方。比如代码

                    最后一行加注释算是不好的风格

      紫色区域:发现用于特定的注释分割,很多注释都有问题,和eclipse自动格式化有冲突,我觉得可以是忽略的。左边的小放大镜有详细的不规范信息。

    个人觉得检查的精度还是很细的,但是对于注解等的检测过于精细,很扰乱视眼。Errors级别就可以了。和eclipse的格式化有很多的冲突。导致很多也是不必要的检验。

    当然,也是可以自定义设置检测项,如下:

 

    

  这样可以把注释的或者和日常格式化有问题的检查撤销掉。主要检查代码的问题。不过说实话这个设置起来还是很麻烦的,我觉得还不如将就着看所有的提示    

  信息。不需要改的就人为忽略吧。重点关注Errors。从中看出,这款其实主要侧重的还是代码的风格的检测。

3、PMD

  下载安装:http://sourceforge.net/projects/pmd/files/pmd-eclipse

  安装完成,针对一个项目启用PMD检测,进入pmd工作视图

  如上图:

    蓝色区域:是汇总的有问题的代码,pmd将代码分析完之后的级别划分的更细致了,就是5个小圈对应:error high, error, warning high, warning,infomation。

    绿色区域:定位,并且给出问题描述。

      这款代码检测软件应该说是和findbugs是属于一种类型的。在我检测的代码中,被pmd标记最多的是代码中有system.out.println() ,的确在正式项目中不应出现这种语句。

  同样方法的大小写是否符合规范也会检查出来。在代码检测中也更多的关注error high,error。

    另一方面pmd插件有20M大小,说明他的检测会很细致,也很广泛。

总结

对于工具的探索就到这,因为我觉得这三款工具对于现在项目的检测力度已经够用了。而jtest由于是商业非开源产品,就不去下载破解版验证了。

  现在对以上工具进行一下总结:

    findbugs:非常好用的一款代码检测工具,检测的深度比较深,对代码中渗透的性能,内存的使用释放有很好的检测。能检测出可能导致错误的代码,如空指针引用等等。

          我觉得这款检测工具应该是首选必备的。

    checkstyle:顾名思义,他就是一款检测代码风格样式的工具,对ccs都会有检测,可以用以辅助提高开发过程中的代码风格。缺点很多检测过于细致和格式化冲突,

          比如注释都会高亮显示,很扰乱视线,所以使用时候组号可以做自定义的风格规范。对代码的bug发现力度较弱。

    PMD:20M大小,说明他的检测非常的广,在我看来的确也是,system.out.println 也会做为error提示。一些命名的检测等。的确并不是代码的bug,

          而是项目中代码的规范检测。深度没有findbugs深,在使用findbugs的情况下,可以配合pmd来检测一些不规范的代码。

 能通过以上这三款软件的检测,并加上业务代码的review。相信代码的质量级别应该是很高了,相信也能很好的满足日常的开发和后期的维护了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java代码分析及分析工具 的相关文章

  • 代码优化-减少if else

    写在前面 不知大家有没遇到过像 横放着的金字塔 一样的 if else 嵌套 xff1a 我并没夸大其词 xff0c 我是真的遇到过了 xff01 嵌套 6 7 层 xff0c 一个函数几百行 xff0c 简 xff01 直 xff01 看
  • QGC代码分析

    首先这个人写了一份文档 xff0c 里面内容非常多 xff0c 我觉得不错 https download csdn net download kangsite 10690473
  • Android设置页面PreferenceFragment使用详细+代码分析

    Android设置页面PreferenceFragment使用详细 文章目录Android设置页面PreferenceFragment使用详细一 设置页面核心代码二 设置页面布局核心代码三SettingFragment核心代码四 setti
  • px4最新版commander代码分析

    commander位于Firmware src modules commander文件夹中 该部分主要负责对地面站 遥控器以及其它部分发布的cmd命令 xff0c 包括vehicle command VEHICLE CMD DO SET M
  • px4最新版navigation代码分析

    navigation部分位于代码Firmware navigator文件夹中 其中不仅仅包含navigator的代码 xff0c 最主要的9种不同的飞行模式的代码 xff0c 它们针对不同的飞行模式计算出不同的期望的位置 xff0c 即po
  • mtk android 4.4 audio framework 代码分析(未完成)

    mtk android 4 4 audio framework 代码分析 未完成 xff0c 有需要的朋友可以参考下 mtk android 4 4 audio framework 代码分析 未完成 2 28 2015 3 01 24 PM
  • vlc代码分析(4)——mpgv的demux

    Mpgv c 是对mpeg vedio的解码部分 xff0c 从demux开始 xff0c 到sample到输出 其中 xff0c 核心部分是函数ParseMPEGBlock 两种数据格式 xff1a video format 是video
  • YOLOv2代码分析_读取labels[by zhangzexuan]

    YOLOv2代码分析 读取labels by zhangzexuan YOLOv2代码分析 读取labelsby zhangzexuan YOLOv2的输入代码阅读 嗯 现在参与的项目要求在人脸检测步骤直接连同人脸特征点一起预测出来 xff
  • 485代码分析

    rs485 h ifndef RS485 H define RS485 H include 34 sys h 34 extern u8 RS485 RX BUF 64 接收缓冲 最大64个字节 extern u8 RS485 RX CNT
  • doom3 源代码评测 1

    原文地址 http fabiensanglard net doom3 2012年6月8日 DOOM3源代码评测 简介 第1部分 共6部分 gt gt 2011年11月23日 id软件保持传统 并发布了其以前引擎的源代码 这一次是轮到了idT
  • 【Unity问题&错误】list问题

    error CS0305 Using the generic type System Collections Generic List
  • 静态代码分析工具清单:开源篇

    http hao jobbole com static code analysis tool list opensource lang utm source blog jobbole com utm medium sidebar resou
  • Gimpel Software推出C和C ++的首选静态分析工具 PC-lint Plus,不再维护PC-lint/FlexeLint。

    Gimpel Software已不再维护PC lint FlexeLint版本9 最终更新是2014年发布的版本9 00L Gimpel Software在2018年底之前为PC lint FlexeLint提供技术支持 Gimpel So
  • chinaUnix中的linux源代码学习

    原文地址 http bbs chinaunix net thread 1930079 1 1 html 大家好 内核源码版对本版块的精华帖进行了分类汇总 所有的精华帖分为十大类 各个分类的精华帖相关信息分布在该贴2 11楼 每个分类各占1楼
  • Adam优化算法详细解析

    本文转载于以下博客地址 http www atyun com 2257 html 如有冒犯 还望谅解 Adam优化算法是一种对随机梯度下降法的扩展 最近在计算机视觉和自然语言处理中广泛应用于深度学习应用 在引入该算法时 OpenAI的Die
  • 静态代码分析工具清单:开源篇(多语言)

    http hao jobbole com static code analysis tool list opensource utm source hao jobbole com utm medium relatedResources 静态
  • linux下代码分析工具Splint

    1 C代码静态分析工具 Its4 读取一个或多个 C C 源程序 将每个源程序分割成函数标志流 然后检查生成的标志是否存在于漏洞数据库中 从而得到每个源程序的所有错误警告列表 并带有相关的描 述 其规则库vulns i4d定义了各种函数的危
  • java代码分析及分析工具

    一个项目从搭建开始 开发的初期往往思路比较清晰 代码也比较清晰 随着时间的推移 业务越来越复杂 代码也就面临着耦合 冗余 甚至杂乱 到最后谁都不敢碰 作为一个互联网电子商务网站的业务支撑系统 业务复杂不言而喻 从09年开始一直沿用到现在 中
  • (转)StyleCop

    微软的StyleCop作为一款代码分析插件 集成到Visual Studio 2008和Visual Studio 2010之中 可以帮助开发人员迅速地理清编程规范问题 对确保软件质量 确保软件开发效率而言 意义非凡 与同样出自微软的另一款
  • 矩阵转置代码,速度优化

    今天心血来潮 想写个CPU版本的矩阵转置代码 过几天写GPU版本的 按照我的想法 就是以下几种方式 1 gt 整块矩阵转置 横读纵写或纵读横写 2 gt 将矩阵分成固定大小的block block与block可以分成横读纵写或纵读横写 而b

随机推荐

  • Keepalived--02--安装和卸载

    一 安装前准备 yum y install gcc gcc c autoconf automake make yum y install zlib zlib devel openssl openssl devel pcre pcre dev
  • 频响特性曲线_OEP30W频率特性测量

    简介 在博文 OEP30W D 类音频功率放大器简单测试 中给出了OPE30W的基本连接方式和功能应用 对于该音频放大芯片的输出特性和温度特性是什么 本文给出了测试方案 在测试芯片的频率相应的时候 需要使用到正弦波产生芯片模块AD9833
  • Docker容器与虚拟化技术:Docker镜像创建、Dockerfile实例

    目录 一 理论 1 Docker镜像的创建方法 2 Docker镜像结构的分层 3 Dockerfile 案例 4 构建Systemctl镜像 基于SSH镜像 5 构建Tomcat 镜像 6 构建Mysql镜像 二 实验 1 Docker镜
  • Linux-Hadoop部署

    部署Hadoop 一 Hadoop部署模式 1 独立模式 2 伪分布式模式 3 完全分布式模式 二 Hadoop集群规划 1 集群拓扑 2 角色分配 三 JDK安装与配置 1 下载JDK压缩包 2 上传到master虚拟机 3 在maste
  • oracle insert 方法 分类

    1 最基本的insert 单表单行插入 insert into tablename 列名 values value 2 单表多行插入 1 insert into select 将select 的结果集插入到目标表中 select 可以是你可
  • docker run 报错: dial tcp xxxxxxxx:443: i/o timeout报错

    报错信息 error pulling image configuration Get https production cloudflare docker com registry v2 docker registry v2 blobs s
  • R语言练习题2

    关注公众号凡花花的小窝 收获更多的考研计算机专业编程相关的资料 3 从mtcars数据集中取出wt gt 2 6并且vs 0的数据 subset mtcars mtcarsKaTeX parse error Expected EOF got
  • 【机器学习】机器故障的二元分类模型-Kaggle竞赛

    竞赛介绍 数据集描述 本次竞赛的数据集 训练和测试 是从根据机器故障预测训练的深度学习模型生成的 特征分布与原始分布接近 但不完全相同 随意使用原始数据集作为本次竞赛的一部分 既可以探索差异 也可以了解在训练中合并原始数据集是否可以提高模型
  • 【seafile】之 预览电子发票PDF显示不全问题

    文章目录 一 问题来源 二 解决 三 题外话 近期在处理网盘和在线文件相关问题 面对的事比较多且杂 记录下 问题 seafile自身预览PDF文件 部分不显示 图片显示如下 一 问题来源 seafile版本 7 0 5 原因 原文件pdf
  • Feign常用的请求拦截器

    IFeignAutoConfiguration Configuration ConditionalOnClass Feign class Order Ordered LOWEST PRECEDENCE 10000 public class
  • 推荐11款开源自动化安全测试实用工具

    安全测试 渗透测试 可以让企业了解现有网络安全措施的成效或不足 进而帮助其调整安全项目 并主动发现漏洞 但是 安全测试是一项工作量很大的工作 测试团队需要在较短时间内快速完成以下任务 侦察并分析组织网络所使用的网络协议 以收集有关网络设备和
  • RC电路分析计算

    RC电路有一个电容和一个电阻组成 可以是并联或者串联 可用作滤波 移相等 下面以RC串联电路为例计算分析电路的电流电压特性和频率特性 RC串联电路 如上图所示 假设RC电路电源电压为Us 电容大小为C 电容两端电压为Uc 电阻大小为R 电阻
  • 用Python分析2000款避孕套,得出这些有趣的结论

    前言 本文的文字及图片来源于网络 仅供学习 交流使用 不具有任何商业用途 如有问题请及时联系我们以作处理 PS 如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资料以及群交流解答点击即可加入 一 分析目标
  • 经销商网上下单系统

    什么是订货通 什么是企业订货管理系统 是一款针对中小型企业通过网络实现 厂家和客户 经销商 批发商 代理商一站式订货系统 最终实现厂家的下游客户通过网络实现实时订货功能 一 订货系统解决的问题 开发网上订货系统用于解决企业和下游订货商对接
  • 文件系统cache机制

    复杂度3 5 机密度3 5 最后更新2021 04 27 AIX并未采用传统Unix的cache模式 传统Unix 包括Linux 的cache模式是把cache作为一个单独的旁路应用 嵌入在文件读写的路径中 当应用请求读文件时 kerne
  • stm32单片机引脚_单片机IO口不够用了,怎么办?

    这几天公子比较闲 像看看手上有没有好玩的模块 于是 公子找到了一款OV系列的摄像头 于是翻了一下自己的2年都没有打开的盒子 公子专门来放开发板的 可是找了半天 都没有找到开发板 费了九牛二虎之力 才找到一块STM32F103C8T6的 长这
  • 带硬件FIFO的串口驱动程序设计思路

    串口具有硬件FIFO可以降低中断频率 对于需要高波特率数据传输 MCU本身速度比较慢 或有更高级优先级中断需要及时处理的场合就显得比较重要 通常 即便串口本身带硬件FIFO 在编写串口驱动程序时 仍然需要在上层在加一层软件FIFO 或Rin
  • Centos7.3服务器配置

    安装node 1 下载并安装NVM脚本 curl https raw githubusercontent com creationix nvm v0 13 1 install sh bash source bash profile 2 列出
  • RabbitMQ--基础--7.5--工作模式--主题模式(Topic)

    RabbitMQ 基础 7 5 工作模式 主题模式 Topic 代码位置 https gitee com DanShenGuiZu learnDemo tree master rabbitMq learn rabbitMq 03 1 介绍
  • java代码分析及分析工具

    一个项目从搭建开始 开发的初期往往思路比较清晰 代码也比较清晰 随着时间的推移 业务越来越复杂 代码也就面临着耦合 冗余 甚至杂乱 到最后谁都不敢碰 作为一个互联网电子商务网站的业务支撑系统 业务复杂不言而喻 从09年开始一直沿用到现在 中