軟件工程師完整的代碼質(zhì)量指南
譯文【51CTO.com快譯】有些人在使用軟件時(shí)會(huì)遇到出錯(cuò)或體驗(yàn)不佳的情況,但可能沒有意識(shí)到代碼質(zhì)量問題,但是軟件工程師查看軟件的代碼時(shí)可能知道這一點(diǎn)。造成這種情況可能是由于編程方式不合理,充滿錯(cuò)誤,過于冗長(zhǎng),或在使用術(shù)語(yǔ)和命名約定時(shí)非常不一致。幸運(yùn)的是,軟件工程師可以通過多種方法來提高代碼質(zhì)量,使其更易于檢查和測(cè)試,并減少以后必須修復(fù)所有錯(cuò)誤的麻煩。
代碼質(zhì)量的基礎(chǔ)知識(shí)
代碼質(zhì)量是指代碼的屬性和特征。代碼質(zhì)量可能會(huì)根據(jù)組織的特定業(yè)務(wù)和團(tuán)隊(duì)的特定需求而有所不同。雖然沒有明確的清單,但大致上有幾種策略或措施將高質(zhì)量的代碼與劣質(zhì)的代碼區(qū)分開。
良好代碼的標(biāo)志:
- 清潔。
- 一致。
- 功能性或有用性—代碼應(yīng)按其將要執(zhí)行的操作。
- 易于用戶理解,而不僅是編程者自己了解。
- 高效:簡(jiǎn)潔的代碼。
- 可測(cè)試:良好的代碼應(yīng)進(jìn)行測(cè)試,以確保沒有錯(cuò)誤或缺陷。
- 易于維護(hù)。
- 將來易于構(gòu)建、重用或復(fù)制。
- 有良好的文件記錄:編寫得很好,并遵守公認(rèn)的標(biāo)準(zhǔn)或風(fēng)格指南。
值得注意的是,所有這些標(biāo)志對(duì)于不同的人員或團(tuán)隊(duì)來說可能意味著不同的含義。例如某人可能會(huì)認(rèn)為代碼寫得清晰并且易于理解,而另一個(gè)人卻認(rèn)為代碼不清楚并且很難維護(hù)。但是,使用一些參數(shù)會(huì)很有幫助。
文檔、代碼標(biāo)準(zhǔn)和樣式指南
正如行業(yè)專家Damien Conway所描述的那樣:“文檔和代碼中的注釋是編程人員向未來自己傳達(dá)信息的一種方式,說明了可能以某種方式編寫代碼的原因。或者為什么團(tuán)隊(duì)成員在特定時(shí)間做出了特殊決定,這也為其他團(tuán)隊(duì)成員提供了做出決策的見解。”
代碼標(biāo)準(zhǔn)也有助于在整個(gè)團(tuán)隊(duì)中提供統(tǒng)一的代碼,這讓其使用和維護(hù)變得更加容易。行業(yè)專家William Moore將它們描述為“特定編碼語(yǔ)言的一系列過程,是需要一種編碼格式、方法和不同的過程。”
樣式指南在一個(gè)地方提供了組織的標(biāo)準(zhǔn)約定(例如命名約定)和其他優(yōu)秀實(shí)踐。其目的是確保所有團(tuán)隊(duì)成員的代碼都是一致的,從而更易于使用和審查。如果希望真正擁有并采用它,并且可能需要對(duì)團(tuán)隊(duì)成員進(jìn)行一些培訓(xùn),但是應(yīng)該得到他們的同意。
谷歌、微軟和WebKit等一些公司已經(jīng)在網(wǎng)上發(fā)布了樣式指南,這些指南可以幫助用戶創(chuàng)建自己的樣式指南。此外,還有許多特定于編程語(yǔ)言的指南,例如為RealPython編寫Alexander Van Tol,為Python程序員提供了一些很好的資源,其包括特定于Python的樣式指南和應(yīng)用代碼校驗(yàn)(Linter)。
代碼審查的重要性
代碼審查對(duì)于確保良好的代碼并提供查找問題的方式至關(guān)重要,以便可以盡早解決。他們還可以確保所構(gòu)建軟件的一致性和可靠性。對(duì)于采用DevOps方式的組織而言,代碼評(píng)審是理所當(dāng)然的,并且已經(jīng)盡早地嵌入到流程中。發(fā)現(xiàn)錯(cuò)誤越早,解決錯(cuò)誤的速度就越快、越容易、代價(jià)也就越低。
SmartBear Software公司在2020年6月開展了一項(xiàng)全球在線調(diào)查活動(dòng),對(duì)20個(gè)不同行業(yè)的740多位軟件開發(fā)人員、測(cè)試人員、IT /運(yùn)營(yíng)專業(yè)人員以及業(yè)務(wù)負(fù)責(zé)人進(jìn)行調(diào)查。受訪者認(rèn)為代碼審查是提高代碼質(zhì)量最好的一種方式。
此次調(diào)查還表明,提高代碼質(zhì)量是影響代碼審查工具需求的業(yè)務(wù)驅(qū)動(dòng)因素。
此外,接受調(diào)查的80%以上的開發(fā)人員表示,對(duì)代碼審查流程的滿意度與對(duì)軟件發(fā)布總體質(zhì)量的信心直接相關(guān)。
除了對(duì)代碼進(jìn)行審查之外,一些受訪者表示,進(jìn)行單元、連續(xù)和功能測(cè)試是提高代碼質(zhì)量的有效步驟之一。持續(xù)集成和集成也被認(rèn)為是軟件開發(fā)的優(yōu)秀實(shí)踐。
就頻率來說,大約63%的受訪者至少每周一次參與某種形式的代碼審查。關(guān)于頻率和使用哪種方法的問題,27%的受訪者表示每天進(jìn)行基于工具的代碼審查,而有19%的受訪者表示每周進(jìn)行一次。
全面的代碼審查可以確保代碼符合良好代碼標(biāo)志所提到的屬性。代碼審查可確保代碼高效、無缺陷、符合標(biāo)準(zhǔn),并且其總體目標(biāo)是在問題頻發(fā)之前盡早發(fā)現(xiàn)問題。
組織可以通過多種方式進(jìn)行代碼審查,其中包括人工審查、配對(duì)編程、指導(dǎo)以及使用共享文檔以方便審查。但是,所有這些方法都可能很耗時(shí),并且代碼審查工具提供了一種使過程自動(dòng)化的方法。
審查代碼質(zhì)量的工具
大多數(shù)開發(fā)人員已經(jīng)使用GitHub維護(hù)其Git存儲(chǔ)庫(kù),并習(xí)慣于使用pull請(qǐng)求和forks來檢查代碼。還有許多其他工具可幫助團(tuán)隊(duì)實(shí)現(xiàn)代碼審查過程的自動(dòng)化:
- Codacy
- Code Climate
- CodeGrip
- CodeScene
- Reviewboard
- Smartbear
- SonarQube
- Veracode
有關(guān)其他代碼檢查工具,需要查看在Geekflare公司編譯的列表。值得注意的是,安全性是代碼質(zhì)量的關(guān)鍵部分。
代碼質(zhì)量和安全性相似,因?yàn)榭梢酝ㄟ^靜態(tài)分析來識(shí)別這兩種類型的問題。開發(fā)人員通常使用靜態(tài)分析方法來設(shè)計(jì)和測(cè)試組件。在這種情況下,代碼可能沒有運(yùn)行或執(zhí)行,但是工具本身使用源代碼作為輸入數(shù)據(jù)執(zhí)行。靜態(tài)分析使開發(fā)人員還可以使用工具早期發(fā)現(xiàn)安全問題,通常是在編寫代碼時(shí)實(shí)時(shí)發(fā)現(xiàn)。這些工具在開發(fā)人員編寫時(shí)進(jìn)行掃描,然后在工程師的集成開發(fā)環(huán)境(IDE)或編輯器中標(biāo)記任何的安全問題。通過查看通過應(yīng)用程序的數(shù)據(jù)流路徑,靜態(tài)分析工具可以識(shí)別應(yīng)用程序在哪里處理數(shù)據(jù)或代碼會(huì)產(chǎn)生意想不到的結(jié)果。
靜態(tài)代碼審查軟件還可以幫助開發(fā)人員了解代碼結(jié)構(gòu)和編碼標(biāo)準(zhǔn),并實(shí)施自己的編碼標(biāo)準(zhǔn)。當(dāng)開發(fā)人員將代碼直接投入生產(chǎn)時(shí),靜態(tài)代碼分析還可以驗(yàn)證代碼質(zhì)量,減少以后出現(xiàn)的錯(cuò)誤。這些工具可以識(shí)別應(yīng)用程序?qū)?shù)據(jù)錯(cuò)誤的處理或代碼導(dǎo)致意外后果時(shí)對(duì)數(shù)據(jù)錯(cuò)誤的處理。
代碼重構(gòu)
另一種提高代碼質(zhì)量的方法是重構(gòu)。源代碼重構(gòu)將雜亂的、不正確的或重復(fù)的代碼轉(zhuǎn)化為具有較低復(fù)雜性的干凈代碼。它解決了當(dāng)多個(gè)開發(fā)人員提交他們自己的代碼時(shí)可能出現(xiàn)的標(biāo)準(zhǔn)化問題。重構(gòu)后的代碼更易于閱讀和維護(hù),它也更容易擴(kuò)展和添加新功能。刪除不必要的部分(如重復(fù)項(xiàng))也會(huì)導(dǎo)致代碼使用更少的內(nèi)存,執(zhí)行速度更快。
減少技術(shù)債務(wù)
生成不良的代碼最初可能看起來很有效,但是一旦需要修復(fù),可能會(huì)帶來麻煩。從一開始就生成高質(zhì)量代碼的優(yōu)點(diǎn)之一是減少了技術(shù)債務(wù)。良好的代碼起初可能需要更長(zhǎng)的時(shí)間才能生成,但是可以減少錯(cuò)誤修復(fù)和重構(gòu)的時(shí)間,并且消除技術(shù)債務(wù)帶來的長(zhǎng)期痛苦。而高質(zhì)量的代碼可以使長(zhǎng)期開發(fā)和可維護(hù)性更加容易。
提高代碼質(zhì)量的方法之一是不斷跟蹤技術(shù)債務(wù)并確定其優(yōu)先級(jí),以便使業(yè)務(wù)案例能夠重構(gòu)代碼庫(kù)中最重要的部分。
結(jié)論
編寫高質(zhì)量的代碼不僅可以帶來更高質(zhì)量的軟件,而且可以提高團(tuán)隊(duì)滿意度。當(dāng)使用工具和框架以及樣式指南來消除決策中的許多猜測(cè)時(shí),這一點(diǎn)尤其重要,從而使開發(fā)人員能夠?qū)W⒂诟P(guān)鍵的任務(wù)。然而,保持高質(zhì)量的代碼與編寫代碼一樣重要,可以防止出現(xiàn)技術(shù)債務(wù)問題。
原文標(biāo)題:The Engineer’s Complete Guide to Code Quality,作者:Cate Lawrence
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】