前言 對(duì)于大部分程序員來(lái)說(shuō),主要的工作時(shí)間是在開(kāi)發(fā)和修復(fù)BUG。 有可能修改了一個(gè)BUG,會(huì)導(dǎo)致幾個(gè)新BUG的產(chǎn)生,不斷循環(huán)。 那么,有沒(méi)有辦法能夠減少BUG,保證代碼質(zhì)量,提升工作效率? 答案是肯定的。 如果能做到,我們多出來(lái)的時(shí)間,多摸點(diǎn)魚(yú),做點(diǎn)自己喜歡的事情,不香嗎? 這篇文章跟大家一起聊聊減
對(duì)于大部分程序員來(lái)說(shuō),主要的工作時(shí)間是在開(kāi)發(fā)和修復(fù)BUG。
有可能修改了一個(gè)BUG,會(huì)導(dǎo)致幾個(gè)新BUG的產(chǎn)生,不斷循環(huán)。
那么,有沒(méi)有辦法能夠減少BUG,保證代碼質(zhì)量,提升工作效率?
答案是肯定的。
如果能做到,我們多出來(lái)的時(shí)間,多摸點(diǎn)魚(yú),做點(diǎn)自己喜歡的事情,不香嗎?
這篇文章跟大家一起聊聊減少代碼BUG的10個(gè)小技巧,希望對(duì)你會(huì)有所幫助。
在日常工作中,找一款好用的開(kāi)發(fā)工具,對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)非常重要。
不光可以提升開(kāi)發(fā)效率,更重要的是它可以幫助我們減少BUG。
有些好的開(kāi)發(fā)工具,比如:
idea
中,對(duì)于包沒(méi)有引入,會(huì)在相關(guān)的類(lèi)上面
標(biāo)紅
。
并且idea還有
自動(dòng)補(bǔ)全
的功能,可以有效減少我們?cè)谌粘i_(kāi)發(fā)的過(guò)程中,有些單詞手動(dòng)輸入的時(shí)候敲錯(cuò)的情況發(fā)生。
Findbugs是一款Java靜態(tài)代碼分析工具,它專(zhuān)注于尋找真正的缺陷或者潛在的性能問(wèn)題,它可以幫助java工程師提高代碼質(zhì)量以及排除隱含的缺陷。
Findbugs運(yùn)用Apache BCEL 庫(kù)分析類(lèi)文件,而不是源代碼,將字節(jié)碼與一組缺陷模式進(jìn)行對(duì)比以發(fā)現(xiàn)可能的問(wèn)題。
可以直接在idea中安裝FindBugs插件:
之后可以選擇分析哪些代碼:
分析結(jié)果:
點(diǎn)擊對(duì)應(yīng)的問(wèn)題項(xiàng),可以找到具體的代碼行,進(jìn)行修復(fù)。
Findbugs的檢測(cè)器已增至300多條,被分為不同的類(lèi)型,常見(jiàn)的類(lèi)型如下:
Correctness:這種歸類(lèi)下的問(wèn)題在某種情況下會(huì)導(dǎo)致bug,比如錯(cuò)誤的強(qiáng)制類(lèi)型轉(zhuǎn)換等。
Bad practice:這種類(lèi)別下的代碼違反了公認(rèn)的最佳實(shí)踐標(biāo)準(zhǔn),比如某個(gè)類(lèi)實(shí)現(xiàn)了equals方法但未實(shí)現(xiàn)hashCode方法等。
Multithreaded correctness:關(guān)注于同步和多線程問(wèn)題。
Performance:潛在的性能問(wèn)題。
Security:安全相關(guān)。
Dodgy:Findbugs團(tuán)隊(duì)認(rèn)為該類(lèi)型下的問(wèn)題代碼導(dǎo)致bug的可能性很高。
CheckStyle作為檢驗(yàn)代碼規(guī)范的插件,除了可以使用配置默認(rèn)給定的開(kāi)發(fā)規(guī)范,如Sun、Google的開(kāi)發(fā)規(guī)范之外,還可以使用像阿里的開(kāi)發(fā)規(guī)范的插件。
目前國(guó)內(nèi)用的比較多的是阿里的代碼開(kāi)發(fā)規(guī)范,我們可以直接通過(guò)idea下載插件:
如果想檢測(cè)某個(gè)文件:
可以看到結(jié)果:
阿里巴巴規(guī)約掃描包括:
Alibaba Java Coding Guidelines 專(zhuān)注于Java代碼規(guī)范,目的是讓開(kāi)發(fā)者更加方便、快速規(guī)范代碼格式。
該插件在掃描代碼后,將不符合規(guī)約的代碼按 Blocker、Critical、Major 三個(gè)等級(jí)顯示出來(lái),并且大部分可以自動(dòng)修復(fù)。
它還基于Inspection機(jī)制提供了實(shí)時(shí)檢測(cè)功能,編寫(xiě)代碼的同時(shí)也能快速發(fā)現(xiàn)問(wèn)題。
最近就業(yè)形式比較困難,為了感謝各位小伙伴對(duì)蘇三一直以來(lái)的支持,我特地創(chuàng)建了一些工作內(nèi)推群, 看看能不能幫助到大家。
你可以在群里發(fā)布招聘信息,也可以?xún)?nèi)推工作,也可以在群里投遞簡(jiǎn)歷找工作,也可以在群里交流面試或者工作的話題。
進(jìn)群方式,添加蘇三的私人微信:su_san_java,備注:博客園+所在城市,即可加入。
SonarQube是一種自動(dòng)代碼審查工具,用于檢測(cè)代碼中的錯(cuò)誤,漏洞和代碼格式上的問(wèn)題。
它可以與用戶(hù)現(xiàn)有的工作流程集成,以實(shí)現(xiàn)跨項(xiàng)目分支和提取請(qǐng)求的連續(xù)代碼檢查,同時(shí)也提供了可視化的管理頁(yè)面,用于查看檢測(cè)出的結(jié)果。
SonarQube通過(guò)配置的代碼分析規(guī)則,從可靠性、安全性、可維護(hù)性、覆蓋率、重復(fù)率等方面分析項(xiàng)目,風(fēng)險(xiǎn)等級(jí)從A~E劃分為5個(gè)等級(jí);
同時(shí),SonarQube可以集成pmd、findbugs、checkstyle等插件來(lái)擴(kuò)展使用其他規(guī)則來(lái)檢驗(yàn)代碼質(zhì)量。
一般推薦它跟Jenkins集成,做成每天定時(shí)掃描項(xiàng)目中test分支中的代碼問(wèn)題。
Fortify 是一款廣泛使用的靜態(tài)應(yīng)用程序安全測(cè)試(SAST)工具。
它具有代碼掃描、漏斗掃描和滲透測(cè)試等功能。它的設(shè)計(jì)目的是有效地檢測(cè)和定位源代碼中的漏洞。
它能幫助開(kāi)發(fā)人員識(shí)別和修復(fù)代碼中的安全漏洞。
Fortify的主要功能:
靜態(tài)代碼分析:它會(huì)對(duì)源代碼進(jìn)行靜態(tài)分析,找出可能導(dǎo)致安全漏洞的代碼片段。它能識(shí)別多種類(lèi)型的安全漏洞,如 SQL 注入、跨站腳本(XSS)、緩沖區(qū)溢出等。
數(shù)據(jù)流分析:它不僅分析單個(gè)代碼文件,還跟蹤應(yīng)用程序的數(shù)據(jù)流。這有助于找到更復(fù)雜的漏洞,如未經(jīng)驗(yàn)證的用戶(hù)輸入在應(yīng)用程序中的傳播路徑。
漏洞修復(fù)建議:發(fā)現(xiàn)潛在的安全漏洞時(shí),它會(huì)為開(kāi)發(fā)人員提供修復(fù)建議。
集成支持:它可以與多種持續(xù)集成(CI)工具(如 Jenkins)和應(yīng)用生命周期管理(ALM)工具(如 Jira)集成,實(shí)現(xiàn)自動(dòng)化的代碼掃描和漏洞跟蹤。
報(bào)告和度量:它提供了豐富的報(bào)告功能,幫助團(tuán)隊(duì)了解項(xiàng)目的安全狀況和漏洞趨勢(shì)。
使用Fortify掃描代碼的結(jié)果:
一般推薦它跟Jenkins集成,定期掃描項(xiàng)目中test分支中的代碼安全問(wèn)題。
有些小伙伴可能會(huì)問(wèn):寫(xiě)單元測(cè)試可以減少代碼的BUG?
答案是肯定的。
我之前有同事,使用的測(cè)試驅(qū)動(dòng)開(kāi)發(fā)模式,開(kāi)發(fā)一個(gè)功能模塊之前,先把單元測(cè)試寫(xiě)好,然后再真正的開(kāi)發(fā)業(yè)務(wù)代碼。
后面發(fā)現(xiàn)他寫(xiě)的代碼速度很快,而且代碼質(zhì)量很高,是一個(gè)開(kāi)發(fā)牛人。
如果你后期要做系統(tǒng)的代碼重構(gòu),你只是重寫(xiě)了相關(guān)的業(yè)務(wù)代碼,但業(yè)務(wù)邏輯并沒(méi)有修改。
這時(shí),因?yàn)橛辛酥皩?xiě)好的單位測(cè)試,你會(huì)發(fā)現(xiàn)測(cè)試起來(lái)非常方便。
可以幫你減少很多BUG。
功能自測(cè),是程序員的基本要求。
但有些程序員自測(cè)之后,BUG還是比較多,而有些程序員自測(cè)之后,BUG非常少,這是什么原因呢?
可能有些人比較粗心,有些人比較細(xì)心。
其實(shí)更重要的是測(cè)試的策略。
有些人喜歡把所有相關(guān)的功能都開(kāi)發(fā)完,然后一起測(cè)試。
這種情況下,相當(dāng)于一個(gè)黑盒測(cè)試,需要花費(fèi)大量的時(shí)間,梳理業(yè)務(wù)邏輯才能測(cè)試完整,大部分情況下,開(kāi)發(fā)人員是沒(méi)法測(cè)試完整的,可能會(huì)有很多bug測(cè)試不出來(lái)。
這種做法是沒(méi)有經(jīng)過(guò)單元測(cè)試,直接進(jìn)行了集成測(cè)試。
看似節(jié)省了很多單元測(cè)試的時(shí)間,但其實(shí)后面修復(fù)BUG的時(shí)間可能會(huì)花費(fèi)更多。
比較推薦的自測(cè)方式是:一步一個(gè)腳印。
比如:你寫(xiě)了一個(gè)工具類(lèi)的一個(gè)方法,就測(cè)試一下。如果這個(gè)方法中,調(diào)用了另外一個(gè)關(guān)鍵方法,我們可以先測(cè)試一下這個(gè)關(guān)鍵方法。
這樣可以寫(xiě)出BUG更少的代碼。
最近就業(yè)形式比較困難,為了感謝各位小伙伴對(duì)蘇三一直以來(lái)的支持,我特地創(chuàng)建了一些工作內(nèi)推群, 看看能不能幫助到大家。
你可以在群里發(fā)布招聘信息,也可以?xún)?nèi)推工作,也可以在群里投遞簡(jiǎn)歷找工作,也可以在群里交流面試或者工作的話題。
進(jìn)群方式,添加蘇三的私人微信:su_san_java,備注:博客園+所在城市,即可加入。
有些公司引入了自動(dòng)化測(cè)試的功能。
每天都會(huì)自動(dòng)測(cè)試,保證系統(tǒng)的核心流程沒(méi)有問(wèn)題。
因?yàn)槲覀兊娜粘i_(kāi)發(fā)中,經(jīng)常需要調(diào)整核心流程的代碼。
不可能每調(diào)整一次,都需要把所有的核心流程都測(cè)試一遍吧,這樣會(huì)浪費(fèi)大量的時(shí)間,而且也容易遺漏一些細(xì)節(jié)。
如果引入了自動(dòng)化測(cè)試的功能,可以幫助我們把核心流程都測(cè)試一下。
避免代碼重構(gòu),或者修改核心流程,測(cè)試時(shí)間不夠,或者測(cè)試不完全的尷尬。
自動(dòng)化測(cè)試,可以有效的減少核心流程調(diào)整,或者代碼重構(gòu)中的BUG。
很多公司都有代碼review機(jī)制。
我之前也參與多次代碼review的會(huì)議,發(fā)現(xiàn)代碼review確實(shí)可以找出很多BUG。
比如:一些代碼的邏輯錯(cuò)誤,語(yǔ)法的問(wèn)題,不規(guī)范的命名等。
這樣問(wèn)題通過(guò)組內(nèi)的代碼review一般可以檢查出來(lái)。
有些國(guó)外的大廠,采用
結(jié)對(duì)編程
的模式。
同一個(gè)組的兩個(gè)人A和B一起開(kāi)發(fā),開(kāi)發(fā)完之后,A reivew B的代碼,同時(shí)B review A的代碼。
因?yàn)橥M的A和B對(duì)項(xiàng)目比較熟,對(duì)對(duì)方開(kāi)發(fā)的功能更有了解,可以快速找出對(duì)外代碼中的一些問(wèn)題。
能夠有效減少一些BUG。
如果你想減少日常工作中的代碼BUG,或者線上事故,少犯錯(cuò),少踩坑。
經(jīng)?磩e人真實(shí)的踩坑分享,是一個(gè)非常不錯(cuò)的選擇,可以學(xué)到一些別人的工作經(jīng)驗(yàn),幫助你少走很多彎路。
網(wǎng)上有許多博主寫(xiě)過(guò)自己的踩坑記錄,大家可以上網(wǎng)搜一下。
也可以看看我自己總結(jié)的《 程序員最常見(jiàn)的100個(gè)問(wèn)題 》,里面有非常詳細(xì)的記錄,干貨很多,還是非常值得一看的。
最后說(shuō)一句,本文總結(jié)了10種減少代碼BUG的小技巧,但我們要根據(jù)實(shí)際情況選擇使用,并非所有的場(chǎng)景都適合。
如果這篇文章對(duì)您有所幫助,或者有所啟發(fā)的話,幫忙掃描下發(fā)二維碼關(guān)注一下,您的支持是我堅(jiān)持寫(xiě)作最大的動(dòng)力。
求一鍵三連:點(diǎn)贊、轉(zhuǎn)發(fā)、在看。
關(guān)注蘇三的公眾號(hào):【蘇三說(shuō)技術(shù)】,在公眾號(hào)中回復(fù):面試、代碼神器、開(kāi)發(fā)手冊(cè)、時(shí)間管理有超贊的粉絲福利,另外回復(fù):加群,可以跟很多BAT大廠的前輩交流和學(xué)習(xí)。
機(jī)器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實(shí)現(xiàn)對(duì)象集合與DataTable的相互轉(zhuǎn)換
閱讀鴻蒙NEXT元服務(wù):論如何免費(fèi)快速上架作品
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀升訊威在線客服與營(yíng)銷(xiāo)系統(tǒng)介紹
閱讀基于鴻蒙NEXT的血型遺傳計(jì)算器開(kāi)發(fā)案例
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶(hù)端的超詳細(xì)使用
閱讀Java代理模式:靜態(tài)代理和動(dòng)態(tài)代理的對(duì)比分析
閱讀Win11筆記本“自動(dòng)管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]
湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)