我用这10招,能减少了80%的BUG
前言
对于大部分程序员来说,主要的工作时间是在开发和修复BUG。
有可能修改了一个BUG,会导致几个新BUG的产生,不断循环。
那么,有没有办法能够减少BUG,保证代码质量,提升工作效率?
答案是肯定的。
如果能做到,我们多出来的时间,多摸点鱼,做点自己喜欢的事情,不香吗?
这篇文章跟大家一起聊聊减少代码BUG的10个小技巧,希望对你会有所帮助。
1 找个好用的开发工具
在日常工作中,找一款好用的开发工具,对于开发人员来说非常重要。
不光可以提升开发效率,更重要的是它可以帮助我们减少BUG。
有些好的开发工具,比如:idea
中,对于包没有引入,会在相关的类上面标红
。
并且idea还有自动补全
的功能,可以有效减少我们在日常开发的过程中,有些单词手动输入的时候敲错的情况发生。
2 引入Findbugs插件
Findbugs是一款Java静态代码分析工具,它专注于寻找真正的缺陷或者潜在的性能问题,它可以帮助java工程师提高代码质量以及排除隐含的缺陷。
Findbugs运用Apache BCEL 库分析类文件,而不是源代码,将字节码与一组缺陷模式进行对比以发现可能的问题。
可以直接在idea中安装FindBugs插件:
之后可以选择分析哪些代码:
分析结果:
点击对应的问题项,可以找到具体的代码行,进行修复。
Findbugs的检测器已增至300多条,被分为不同的类型,常见的类型如下:
Correctness:这种归类下的问题在某种情况下会导致bug,比如错误的强制类型转换等。
Bad practice:这种类别下的代码违反了公认的最佳实践标准,比如某个类实现了equals方法但未实现hashCode方法等。
Multithreaded correctness:关注于同步和多线程问题。
Performance:潜在的性能问题。
Security:安全相关。
Dodgy:Findbugs团队认为该类型下的问题代码导致bug的可能性很高。
3 引入CheckStyle插件
CheckStyle作为检验代码规范的插件,除了可以使用配置默认给定的开发规范,如Sun、Google的开发规范之外,还可以使用像阿里的开发规范的插件。
目前国内用的比较多的是阿里的代码开发规范,我们可以直接通过idea下载插件:
如果想检测某个文件:
可以看到结果:
阿里巴巴规约扫描包括:
- OOP规约
- 并发处理
- 控制语句
- 命名规约
- 常量定义
- 注释规范
Alibaba Java Coding Guidelines 专注于Java代码规范,目的是让开发者更加方便、快速规范代码格式。
该插件在扫描代码后,将不符合规约的代码按 Blocker、Critical、Major 三个等级显示出来,并且大部分可以自动修复。
它还基于Inspection机制提供了实时检测功能,编写代码的同时也能快速发现问题。
最近就业形式比较困难,为了感谢各位小伙伴对苏三一直以来的支持,我特地创建了一些工作内推群, 看看能不能帮助到大家。
你可以在群里发布招聘信息,也可以内推工作,也可以在群里投递简历找工作,也可以在群里交流面试或者工作的话题。
进群方式,添加苏三的私人微信:su_san_java,备注:博客园+所在城市,即可加入。
4 用SonarQube扫描代码
SonarQube是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码格式上的问题。
它可以与用户现有的工作流程集成,以实现跨项目分支和提取请求的连续代码检查,同时也提供了可视化的管理页面,用于查看检测出的结果。
SonarQube通过配置的代码分析规则,从可靠性、安全性、可维护性、覆盖率、重复率等方面分析项目,风险等级从A~E划分为5个等级;
同时,SonarQube可以集成pmd、findbugs、checkstyle等插件来扩展使用其他规则来检验代码质量。
一般推荐它跟Jenkins集成,做成每天定时扫描项目中test分支中的代码问题。
5 用Fortify扫描代码
Fortify 是一款广泛使用的静态应用程序安全测试(SAST)工具。
它具有代码扫描、漏斗扫描和渗透测试等功能。它的设计目的是有效地检测和定位源代码中的漏洞。
它能帮助开发人员识别和修复代码中的安全漏洞。
Fortify的主要功能:
静态代码分析:它会对源代码进行静态分析,找出可能导致安全漏洞的代码片段。它能识别多种类型的安全漏洞,如 SQL 注入、跨站脚本(XSS)、缓冲区溢出等。
数据流分析:它不仅分析单个代码文件,还跟踪应用程序的数据流。这有助于找到更复杂的漏洞,如未经验证的用户输入在应用程序中的传播路径。
漏洞修复建议:发现潜在的安全漏洞时,它会为开发人员提供修复建议。
集成支持:它可以与多种持续集成(CI)工具(如 Jenkins)和应用生命周期管理(ALM)工具(如 Jira)集成,实现自动化的代码扫描和漏洞跟踪。
报告和度量:它提供了丰富的报告功能,帮助团队了解项目的安全状况和漏洞趋势。
使用Fortify扫描代码的结果:
一般推荐它跟Jenkins集成,定期扫描项目中test分支中的代码安全问题。
6 写单元测试
有些小伙伴可能会问:写单元测试可以减少代码的BUG?
答案是肯定的。
我之前有同事,使用的测试驱动开发模式,开发一个功能模块之前,先把单元测试写好,然后再真正的开发业务代码。
后面发现他写的代码速度很快,而且代码质量很高,是一个开发牛人。
如果你后期要做系统的代码重构,你只是重写了相关的业务代码,但业务逻辑并没有修改。
这时,因为有了之前写好的单位测试,你会发现测试起来非常方便。
可以帮你减少很多BUG。
7 功能自测
功能自测,是程序员的基本要求。
但有些程序员自测之后,BUG还是比较多,而有些程序员自测之后,BUG非常少,这是什么原因呢?
可能有些人比较粗心,有些人比较细心。
其实更重要的是测试的策略。
有些人喜欢把所有相关的功能都开发完,然后一起测试。
这种情况下,相当于一个黑盒测试,需要花费大量的时间,梳理业务逻辑才能测试完整,大部分情况下,开发人员是没法测试完整的,可能会有很多bug测试不出来。
这种做法是没有经过单元测试,直接进行了集成测试。
看似节省了很多单元测试的时间,但其实后面修复BUG的时间可能会花费更多。
比较推荐的自测方式是:一步一个脚印。
比如:你写了一个工具类的一个方法,就测试一下。如果这个方法中,调用了另外一个关键方法,我们可以先测试一下这个关键方法。
这样可以写出BUG更少的代码。
最近就业形式比较困难,为了感谢各位小伙伴对苏三一直以来的支持,我特地创建了一些工作内推群, 看看能不能帮助到大家。
你可以在群里发布招聘信息,也可以内推工作,也可以在群里投递简历找工作,也可以在群里交流面试或者工作的话题。
进群方式,添加苏三的私人微信:su_san_java,备注:博客园+所在城市,即可加入。
8 自动化测试
有些公司引入了自动化测试的功能。
每天都会自动测试,保证系统的核心流程没有问题。
因为我们的日常开发中,经常需要调整核心流程的代码。
不可能每调整一次,都需要把所有的核心流程都测试一遍吧,这样会浪费大量的时间,而且也容易遗漏一些细节。
如果引入了自动化测试的功能,可以帮助我们把核心流程都测试一下。
避免代码重构,或者修改核心流程,测试时间不够,或者测试不完全的尴尬。
自动化测试,可以有效的减少核心流程调整,或者代码重构中的BUG。
9 代码review
很多公司都有代码review机制。
我之前也参与多次代码review的会议,发现代码review确实可以找出很多BUG。
比如:一些代码的逻辑错误,语法的问题,不规范的命名等。
这样问题通过组内的代码review一般可以检查出来。
有些国外的大厂,采用结对编程
的模式。
同一个组的两个人A和B一起开发,开发完之后,A reivew B的代码,同时B review A的代码。
因为同组的A和B对项目比较熟,对对方开发的功能更有了解,可以快速找出对外代码中的一些问题。
能够有效减少一些BUG。
10 多看别人的踩坑分享
如果你想减少日常工作中的代码BUG,或者线上事故,少犯错,少踩坑。
经常看别人真实的踩坑分享,是一个非常不错的选择,可以学到一些别人的工作经验,帮助你少走很多弯路。
网上有许多博主写过自己的踩坑记录,大家可以上网搜一下。
也可以看看我自己总结的《程序员最常见的100个问题》,里面有非常详细的记录,干货很多,还是非常值得一看的。
最后说一句,本文总结了10种减少代码BUG的小技巧,但我们要根据实际情况选择使用,并非所有的场景都适合。
最后说一句(求关注,别白嫖我)
如果这篇文章对您有所帮助,或者有所启发的话,帮忙扫描下发二维码关注一下,您的支持是我坚持写作最大的动力。
求一键三连:点赞、转发、在看。
关注苏三的公众号:【苏三说技术】,在公众号中回复:面试、代码神器、开发手册、时间管理有超赞的粉丝福利,另外回复:加群,可以跟很多BAT大厂的前辈交流和学习。
我用这10招,能减少了80%的BUG的更多相关文章
- Google-优秀移动站点设计10招
Google-优秀移动网站设计10招 1)添加一个醒目的搜索条:在移动终端上,人们希望能够快速找到自己需要的东西 2)把大表格拆分成小块:别搞一个长长的表格页面,上面包含各种输入框 3)允许用户匿名浏 ...
- 最详细10招Spark数据倾斜调优
最详细10招Spark数据倾斜调优 数据量大并不可怕,可怕的是数据倾斜 . 数据倾斜发生的现象 绝大多数 task 执行得都非常快,但个别 task 执行极慢. 数据倾斜发生的原理 在进行 shuff ...
- 写代码的心得,怎么减少编程中的 bug?
遭遇 bug 的时候,理性的程序员会说:这个 bug 能复现吗? 自负型:这不可能,在我这是好好的. 经验型:不应该,以前怎么没问题? 幻想型:可能是数据有问题. 无辜型:我好几个星期都没碰这块代码了 ...
- [转] 怎么减少编程中的 bug?
[转]http://macshuo.com/?p=1361 怎么减少编程中的 bug? Posted on 2016 年 2 月 17 日 为什么要编程?因为代码没在那里.创造一个世界是如此让人着迷, ...
- 如何减少不能重现的Bug
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何减少不能重现的Bug.
- java.net.ConnectException: failed to connect to /10.0.2.2 (port 80): connect
在使用GENYMOTION作为Android程序调试模拟器连接web服务器时,报了:java.net.ConnectException: failed to connect to /10.0.2.2 ...
- 10招搞定web设计风格指南
From:http://www.ui.cn/detail/27579.html 今时今日,网站的创建正变得越来越复杂,而且一般都不是一个人就能干的了的.在创建网站过程中,我们需要保证设计前后一致,并符 ...
- 10招让你成为杰出的Java程序员(转)
如果你是一个热衷于技术的 Java 程序员, 那么下面的 10 个要点可以让你在众多 Java 开发人员中脱颖而出. 1. 拥有扎实的基础和深刻理解 OO 原则 对于 Java 程序员,深刻理解 Ob ...
- 10招步骤保护IIS服务器安全
问题 IIS(Internet Information Server)是黑客特别喜欢的目标.因此,对于管理IIS网页服务器的管理员来说,确保服务器安全是一件至关重要的事.IIS 4.0和IIS 5.0 ...
- WIN10 10招
还有不到两个月的时间,7 月 29 日 Windows 10 就将正式公布,在此之前已经有不少的用户已经使用上了 Windows 10 的预览版.对于那些苦等 Windows 10 的用户来说,幸福非 ...
随机推荐
- Codeforces Round 799 (Div. 4)G. 2^Sort
暴力枚举每一个端点然后去check 显然是复杂度为\(O(n^2)\)是来不及的. 我们考虑大区间满足小区间一定满足,用两个指针维护一下当前满足不等式的区间,然后长度达到就计算答案. 思路很简单,主要 ...
- inputNextFocus vue - js 跳转 下一个 tab
inputNextFocus vue - js 跳转 下一个 tab <template> <Input v-model="val1" ref="inp ...
- Apollo3 Blue SoC 和 Apollo3 Blue Plus SoC的区别
一 芯片简介 1.简介 Apollo3 Blue系列SoC解决方案代表了超低功耗设计的巨大飞跃,其运行模式和睡眠模式下的功耗数值均十分出色,并且具有高性能的处理引擎. Apollo3Blue器件提供了 ...
- gcc生成静态链接库与动态链接库步骤,并链接生成可执行文件的简单示例
编写 mylib.h void test(); 编写 mylib.c #include<stdio.h> void test(){ printf("hello world&quo ...
- Android 开发Day9
/** * Automatically generated file. DO NOT MODIFY */ package com.hui.tally; public final class Build ...
- CloudXR技术如何运用于农业?
随着科技的不断发展和应用的深入,农业领域也在逐渐引入新技术来优化生产效率和成本.改进管理和监控等.云化XR(CloudXR)作为一种融合了云计算.虚拟现实(VR)和增强现实(AR)等技术的解决方案,也 ...
- Avalonia 11.1.0-beta1 发布
11.1.0-beta1 Avalonia 是 dotnet 的跨平台 UI 框架,提供灵活的样式系统,支持 Windows.macOS.Linux.iOS.Android 和 WebAssembly ...
- npm ERR! code 1 npm ERR! path E:\20231213\vue-element-admin\node_modules\node-sass npm ERR! command failed npm ERR! command C:\WINDOWS\system32\cmd.exe /d /s /c node scripts/build.js
执行npm install报错,根据下面报错信息可知,是由于nodejs和node-sass版本不一致造成的,也就是当前项目比较旧,而我安装的nodejs比较新. PS E:\20231213\vue ...
- 你是怎么理解ES6中Module的?使用场景?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.介绍 模块,(Module),是能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构的集合体). 两个基本的特征:外 ...
- 记录--TS类型写不好?一起来训练提升吧!
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前期准备 本篇文章的编写目的是为了提升TS类型的书写质量,高质量的类型可以提高项目的可维护性并避免一些潜在的漏洞; 在学习本篇之前需要有一 ...