Android 如何写代码更少出现bug?借助IDE的检测代码质量插件来解决。

news2024/11/7 22:48:23

目录

在这里插入图片描述


前言

大家好呀~,我是前期后期,在网上冲浪的一名程序员,分享一些自己学到的知识,希望能够帮助大家节省时间。

如何写代码更少出现bug?

很多一些人可能会推荐我们,多看一些阿里巴巴的规范,又或者不断的提升自己的代码能力。但,人难免犯错,难免存在认知不足的地方,何其难,并且规范太多,我们自己都记不住,有时候脑子发热,就写了隐患的代码。

那么还有其他方法?

答案是:YES

我们可以借助一些工具,这些工具,会帮助我们分析代码存在不规范的地方,帮助我们找出可能会出现bug的地方,内存滥用的地方,甚至他还会给出建议,甚至它还可以帮助我们修复。

在编写代码时,插件会实时检测并提供建议。用户可以根据插件的提示进行代码修改,或者利用插件的自动修复功能快速纠正错误。

接下来,我们介绍一些常用的规范工具。

  1. Alibaba Java Coding Guidelines【检查代码规范】
  2. CheckStyle【检查代码规范】
  3. PMD【检查代码规范、潜在错误,Bug】
  4. SonarLint【检查代码规范、潜在错误,Bug】(更加推荐)



一、Alibaba Java Coding Guidelines

Alibaba Java Coding Guidelines插件是一款由阿里巴巴开源的代码规范检查工具,它基于阿里巴巴Java开发手册制定的一系列编码规范。

代码规范性问题:

1.命名规范:插件会检查变量、方法、类等命名是否符合阿里巴巴的Java编码规范。
2. 代码格式:包括缩进、空格、换行等代码格式问题,确保代码风格的一致性。
3. 异常处理:检查异常捕获和处理是否符合规范,避免异常被忽略或处理不当。
4. 注释:检查代码中的注释是否清晰、准确,是否符合规范要求的注释风格。

1.1 如何安装呢?


  1. File > Settings > Plugins > Marketplace 搜索 “Alibaba Java Coding Guidelines”,下载可能需要点时间,下载完成后重启IDE
    在这里插入图片描述

1.2 如何使用呢?


可以Tools > 阿里编码规约 > 编码规约扫描

在这里插入图片描述
(1)编码规约扫描 :开始扫描代码
(2)打开/关闭实时检测功能 :实时检测代码是否有不规范

比如下面的Test类,它会提示没有author
在这里插入图片描述
按住Alt,然后点击回车,就会提示修复建议。
在这里插入图片描述
在这里插入图片描述

1.3 规范等级


扫描结果主要分为 Blocker、Critical、Major三个大类,它们表示的是问题的严重程度,严重程度由高到低为:Blocker > Critical > Major

Blocker(阻挡者):
代表最高级别的严重问题,这类问题可能会直接阻碍项目的进行或导致严重的后果。
一旦检测到此类问题,通常意味着代码中存在重大缺陷,需要立即修复。

Critical(严重问题):
表示较为严重的代码规范问题,虽然不会直接阻碍项目的进行,但可能会对代码的可读性、可维护性或性能产生负面影响。
这类问题通常也需要及时修复,以确保代码的质量和稳定性。
举例来说,ArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException异常;Map/Set的key为自定义对象时,必须重写hashCode和equals;SimpleDateFormat是线程不安全的类,一般不要定义为static变量等,这些都属于Critical级别的问题。

Major(主要的):
代表一般性的代码规范问题,这些问题通常不会对代码的功能产生直接影响,但可能会影响代码的可读性和可维护性。
这类问题可以在有时间的情况下进行修复,以提升代码的整体质量。

在这里插入图片描述
出现的问题,你甚至,还可以使用插件的功能,为你自动修复,当然,修复后也要立马运行一下,避免有异常。

在这里插入图片描述
equals可能存在null的问题。

在这里插入图片描述

缺点:只能检测Java代码,如果你使用的是Kotlin,那么这个规范就不起作用了。


二、CheckStyle

CheckStyle更注重对代码风格的检查,如命名约定、注释规范、代码格式等。
Alibaba Java Coding Guidelines则涵盖了更广泛的编码规范,包括面向对象设计、异常处理、集合使用等方面的指导。

CheckStyle提供了高可配置性,以便适用于各种代码规范。除了可以使用它提供的Sun的代码标准外,用户也可以定制自己的标准。

在这里插入图片描述

Checkstyle插件中默认内置有2个执行代码检查的配置文件(Sun Checks 和 GoogleChecks)
在这里插入图片描述

在这里插入图片描述
内容上差不多。


三、PMD

PMD插件是一款功能强大的静态代码分析工具,它能够帮助开发者及时发现和修复代码中的潜在缺陷、提高代码质量、确保代码的一致性和可读性。
在这里插入图片描述

3.1 PMD的常用规则集


  1. 最佳实践(Best Practices): 这类规则集关注于代码中的最佳实践,如避免使用过时的方法或类、减少不必要的对象创建等。
  2. 代码风格(Code Style):代码风格规则集关注于代码的格式和可读性,如缩进、空格、注释等。
  3. 设计(Design):设计相关的规则集关注于代码的结构和设计模式,如类的复杂度、方法的长度、继承关系的合理性等。
  4. 文档化(Documentation):它们检查代码中的注释是否完整、清晰,以及是否符合项目的文档规范。
  5. 多线程(Multithreading):这类规则集关注于多线程编程中的常见问题,如线程安全、死锁、资源竞争等。它们帮助开发者识别可能导致并发错误的代码模式。
  6. 错误易发(Errorprone):这类规则集旨在检测代码中容易出错的地方,如空指针引用、数组越界、不必要的对象创建等。它们有助于减少运行时错误和潜在的性能问题。
  7. 性能(Performance):性能相关的规则集关注于代码中可能影响性能的部分,如不必要的同步、复杂的表达式等。

在这里插入图片描述

在这里插入图片描述


四、SonarLint

SonarLint是一个开源工具,它可以在开发人员在编写代码时,帮助发现潜在的问题和错误。通过与多种集成开发环境(IDE)如Eclipse、IntelliJ IDEA等的集成,SonarLint能够提供实时的代码质量反馈。

使用起来会比前面的PMD高级一些,主要是在提示方面做的很到位。

在这里插入图片描述
在这里插入图片描述它会在后面提示一些解决方案

在这里插入图片描述
还可以只对新增的代码进行检测。
在这里插入图片描述
还可以对kotlin进行检测。
在这里插入图片描述
可以对当个文件进行检测,也可以对整个项目。


五、总结

  1. 检查代码规范的话,直接使用 Alibaba Java Coding Guidelines 。
  2. 找 BUG 的话,使用 PMD、SonarLint 相互补充。

好了,这篇文章就介绍到这里,我是前期后期,我们 下一篇文章 见·~

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

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

相关文章

洛谷 P2113 看球泡妹子(DP)

传送门https://www.luogu.com.cn/problem/P2113 解题思路 可以设 表示前 场比赛看了 场,小红的满足度为 的最大精彩度。 然后可以枚举前面的一个比赛 ,可以得到转移方程: 但是,我们发现数组空间有一点小大,可以…

HTAP数据库国产化改造技术可行性方案分析

一、现状及需求痛点 当前地市统一支撑平台是为地市租户提供全方位业务支持的核心系统,以满足地市级用户在业务处理、数据分析、用户服务及内部管理等多方面的需求。主要承载业务系统的联机事务处理(OLTP)与联机分析处理(OLAP&…

ELK-ELK基本概念_ElasticSearch的配置

文章目录 一、什么是ELK?有什么用?ELK是什么?ElasticsearchLogstashKibana ELK的作用 二、ElasticSearch的安装与基本配置为何需要依赖JDK?使用yum install java-11-openjdk和使用Oracle官网提供的jdk的rpm包安装JDK的区别 参考资…

OpenAI大事记;GPT到ChatGPT参数量进化

目录 OpenAI大事记 GPT到ChatGPT参数量进化 OpenAI大事记 GPT到ChatGPT参数量进化 ChatGPT是从初代 GPT逐渐演变而来的。在进化的过程中,GPT系列模型的参数数量呈指数级增长,从初代GPT的1.17亿个参数,到GPT-2的15 亿个参数,再到 GPT-3的1750 亿个参数。模型越来越大,训练…

DDD领域分析

DDD领域分析是一种对现实业务进行建模分析的一种方法,它对业务问题做了分类,分层与抽象,为后面代码的编写理清了思路。 如何理解DDD呢?首先DDD中有许多名称,我这里一一列举出来:领域,子域&…

ES集群搭建(仅供自己参考)

单节点问题:单机的elasticsearch做数据存储,面临的两个问题:海量的数据存储问题、单节点故障。 一个节点存储的数据是有限的。 海量数据存储问题:将索引库从逻辑上拆分为N个分片(shard),存储到…

【测试工具篇一】全网最强保姆级教程抓包工具Fiddler(2)

本文接上篇Fiddler介绍,开始讲fiddler如何使用之前,给大家讲讲http以及web方面的小知识,方便大家后面更好得理解fiddler使用。 目录 一、软件体系结构---B/S与C/S架构 B/S架构 C/S架构 二、HTTP基础知识 什么是http请求和响应? http协…

诗林工作室(编号:mb0003)分享:Finbiz自适应响应式网页设计模版,适用于前端设计、博客、官网等多类型开发模版

本设计模版来自外网,为HTML类型的模版,色彩多样,适合Web开发人员做前端站点设计参考使用。全站模版倾向于官网设计、自主博客等多行业的平台模版开发,适合各大CMS的主题模版开发参考,如常见的Wordpress主题开发、Z-Blo…

2-142【软件无线电原理与应用作业】基于matlab的圆形阵列的波束形成进行仿真

【软件无线电原理与应用作业】基于matlab的圆形阵列的波束形成进行仿真,具有14页文档。假设发射信号载频为1GHz,圆形阵列半径为0.8米,在圆周上均匀布置30个阵元。1.画出指向0度的方向图。2.如果目标在0度,有一不相干的干扰信号在3…

[CUDA] 设置sync模式cudaSetDeviceFlags

文章目录 1. 设置cuda synchronize的等待模式2 设置函数3. streamQuery方式实现stream sync等待逻辑Reference 1. 设置cuda synchronize的等待模式 参考资料:https://docs.nvidia.com/cuda/pdf/CUDA_Runtime_API.pdf cuda的 synchronize等待模式分为: Y…

[OS]vma? trap? Sys_mmap根据思路来实现!!

// Defined in user.hvoid *mmap(void *addr, size_t length, int prot, int flags, int fd, off_toffset);// TODO: kernel mmap executed in sysfile.cuint64sys_mmap(void){}#define VMASIZE 16struct vma {uint64 addr; // 映射的虚拟地址起始位置int len; …

性能调优专题(5)之深入理解Mysql事务隔离级别与锁机制

一、概述 我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。 这些问题的本质都是数据库的多并发事务问题,为了解决多事务并发问题&a…

CentOS 7 软件/程序安装示例

安装软件/程序 wget,前提需要用 root 用户 1、搜索软件/程序 yum search wget 搜索到软件/程序。 2、安装软件/程序 yum -y install wget 安装完成。 ---------------------------------------------------------------------------------------------------…

MySQL详细安装教程

一、从MySQL官网安装 可以翻译成中文看起来就舒服多了 下载并打开安装包,能看到版本是8.0.36,双击运行或者右键选择打开,打开后是一个安装向导,这个安装向导会先帮我们安装一个 mysql-installer 的程序,再通过该程序安…

Dubbo使用Nacos作为注册中心

使用 Nacos 作为注册中心实现自动服务发现 本示例演示 Nacos 作为注册中心实现自动服务发现&#xff0c;示例基于 Spring Boot 应用展开&#xff0c;可在此查看 完整示例代码 1 基本配置 1.1 增加依赖 增加 dubbo、nacos-client 依赖&#xff1a; <dependencies><…

洗衣小程序/洗鞋小程序 洗衣店系统,洗衣系统源码

多城市洗衣店小程序&#xff0c;对接京东物流&#xff0c;支持城市合伙人&#xff0c;支持在线商城&#xff0c;在线预约下单 支持抖音验券支持 支持电子券 支持水洗码

数据结构 —— 红黑树

目录 1. 初识红黑树 1.1 红黑树的概念 1.2 红⿊树的规则 1.3 红黑树如何确保最长路径不超过最短路径的2倍 1.4 红黑树的效率:O(logN) 2. 红黑树的实现 2.1 红黑树的基础结构框架 2.2 红黑树的插⼊ 2.2.1 情况1&#xff1a;变色 2.2.2 情况2&#xff1a;单旋变色 2.2…

吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)4.11

目录 第四门课 卷积神经网络&#xff08;Convolutional Neural Networks&#xff09;第四周 特殊应用&#xff1a;人脸识别和神经风格转换&#xff08;Special applications: Face recognition &Neural style transfer&#xff09;4.11 一维到三维推广&#xff08;1D and 3…

unity3d————四元数概念

一、定义与表示 四元数是由一个实数部分和三个虚数部分组成&#xff0c;通常表示为q w xi yj zk&#xff0c;其中w是实数&#xff0c;x、y、z是实数系数&#xff0c;i、j、k是虚数单位&#xff0c;满足以下关系&#xff1a; i j k -1ij k&#xff0c;ji -kjk i&…

大数据分库分表方案

分库分表介绍 分库分表应用场景 分库分表介绍 大数据分库分表是一种数据库架构技术&#xff0c;旨在应对大数据量场景下的数据库性能瓶颈。以下是对大数据分库分表的详细解释&#xff1a; 一、定义与背景 定义&#xff1a; 分库&#xff1a;将一个大型数据库按照一定的规则…