• 正文
    • 1 為什么要代碼審查
    • 2 代碼審查原則
    • 3 怎么做代碼審查
    • 4 代碼審查避免流于形式
    • 5 小節(jié)
  • 推薦器件
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

代碼審查那些事

2024/01/04
2097
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

代碼審查(code review)是指對源代碼進行系統(tǒng)化地審查,是軟件開發(fā)中的最佳實踐之一,代碼合并之前必須審查通過才行,可及時發(fā)現(xiàn)隱藏問題,提高代碼質(zhì)量。

1 為什么要代碼審查

代碼審查環(huán)節(jié),或者流于形式,或者根本沒有,軟件質(zhì)量只依賴事后的測試;認真執(zhí)行是有諸多價值的。

統(tǒng)一編碼規(guī)范
審查代碼風格,統(tǒng)一編碼規(guī)范,有助于代碼的可讀性,也方便接盤者快速上手。

提前發(fā)現(xiàn)缺陷
代碼審查最直接的優(yōu)點是發(fā)現(xiàn)軟件邏輯問題,性能等等潛在風險,提前發(fā)現(xiàn)缺陷可以有效節(jié)省人力和時間。

提高代碼質(zhì)量
代碼審查與優(yōu)化修復,確保代碼在健壯性、設(shè)計合理性、代碼結(jié)構(gòu)等方面持續(xù)提升整體質(zhì)量。

知識分享
每一次的代碼審查都是一次知識的分享,磨合一定時間后,軟件設(shè)計融合集體的智慧,團隊內(nèi)相互審查,也是互相學習的一種途徑。

團隊共識
經(jīng)過討論與交流逐步達成的團隊共識,特別是對架構(gòu)理解和設(shè)計原則的認知,在共識的基礎(chǔ)上團隊也會更有凝聚力,軟件設(shè)計方式會趨于一致,特別是在較多新人加入時尤為重要。微信公眾號【嵌入式系統(tǒng)】提醒,一些建議性的共識《代碼的保養(yǎng)》。

2 代碼審查原則

如果變更可提升整體代碼質(zhì)量,就可以讓它通過,即使還不完美,這是代碼評審準則的最高原則。沒有完美的代碼,只有更好的代碼。評審者不應(yīng)強求代碼提交者在每個細節(jié)都寫得很完美,應(yīng)該考量修復時間與修改重要性之間的平衡。

以客觀的技術(shù)數(shù)據(jù)為準,而非個人偏好。在代碼排版樣式上,遵從編碼規(guī)范,所有代碼保持風格一致,但如果新奇代碼在編碼規(guī)范未提及,那就接受作者的樣式。同時有多種可行方案時,如果作者能證明這些方案基本差不多,那就接受作者的選擇;否則,應(yīng)以軟件設(shè)計原則為準(參考《嵌入式軟件設(shè)計原則隨想》),而不應(yīng)由評審者的個人喜好來決定。微信公眾號【嵌入式系統(tǒng)】提醒,編碼規(guī)范可以參考《嵌入式C編碼規(guī)范》。

如果沒有參考規(guī)則,那么評審者應(yīng)該保證新代碼與當前軟件庫風格一致,至少不會惡化軟件的質(zhì)量,一旦惡化就會帶來破窗效應(yīng),導致軟件質(zhì)量逐漸下降。

代碼審核者應(yīng)該看什么

命名:變量、函數(shù)等命名是否清晰易懂?
注釋:核心代碼的注釋是否都一目了然?
代碼排版:所有的代碼是否都遵循編碼規(guī)范?
設(shè)計:代碼是否設(shè)計良好?是否適合當前系統(tǒng)?有沒兼容舊版或預留擴展接口?
功能:代碼實現(xiàn)的行為與需求是否相符?
復雜性:代碼可以更簡單嗎?如果由其他開發(fā)者接手,能否很快理解嗎?
文檔:開發(fā)者是否同時更新了相關(guān)文檔?

推行代碼審查機制,開發(fā)流程上專門有這個環(huán)節(jié),代碼必須審核通過才可以提交。審核結(jié)果或記錄公開透明,團隊內(nèi)互相審查其他人的代碼,甚至明確考評和代碼審查表現(xiàn)相關(guān),這樣就能落實代碼審查制度。

3 怎么做代碼審查

3.1 作為代碼提交者

發(fā)起時機:軟件變更發(fā)布前提交代碼審查申請。
代碼行數(shù):提交代碼行數(shù)最好在500-1000行以下(非有效代碼除外),一個高質(zhì)高效的代碼審查最好控制在一個小時以內(nèi)。

3.2 作為代碼評審者

主要從代碼邏輯和質(zhì)量兩方面來評審。

代碼邏輯

功能完整:代碼實現(xiàn)是否滿足需求,有沒理解偏差。
邏輯設(shè)計:是否符合軟件框架,功能細節(jié)處理是否考慮邊界條件和并發(fā)控制。
數(shù)據(jù)安全:是否存在數(shù)據(jù)安全隱患,參數(shù)篡改或丟失。
性能隱患:是否存在損害性能的隱患,如死循環(huán)等。
測試用例:單元測試用例的驗證邏輯是否有效,測試用例的代碼行覆蓋率和分支覆蓋率。

代碼質(zhì)量

編碼規(guī)范:命名、注釋、架構(gòu)分層、軟件排版等是否符合編碼規(guī)范。
可讀性:是否邏輯清晰、易理解,避免使用奇淫巧技。
簡潔性:是否有重復可簡化的復雜邏輯,代碼復雜度是否過高。
可維護性:是否分層清晰、模塊化合理、高內(nèi)聚低耦合、遵從基本設(shè)計原則。
可擴展性:是否僅滿足本次需求,是否有必要的擴展設(shè)計。
可測試性:代碼是否方便寫單元測試及分支覆蓋,是否便于自動化測試

3.3 評審注意事項

溝通是至關(guān)重要的,團隊要始終保持溝通,并在整個過程中保持透明度,代碼審查提供清晰的反饋修復建議。同時,要記住反饋應(yīng)該集中在批評代碼本身,而不是代碼的作者。盡快完成評審,避免過度追求完美,抓住重點,水至清則無魚。

4 代碼審查避免流于形式

代碼審查失去意義,主要是審核與否不影響流程,或者時間緊迫必須保證項目進度,或者審核結(jié)果修改建議無法執(zhí)行。一旦認為審查是可有可無,后續(xù)就越發(fā)流于形式。

時間與進度的矛盾

項目壓力大時間緊,以致草草分析不做設(shè)計,直接編碼不做重構(gòu),前期快了最后總要有誰來背鍋。

每次代碼審查的建議都是一次技術(shù)交流,但是審查后,發(fā)現(xiàn)問題太多,或者改動太大,影響項目計劃,理論上要求編碼前設(shè)計評審方案,實際工作可能是發(fā)布前審查,為了項目進度只能認可既定事實。

或者代碼審查的力度不夠,只能提出一些淺表的問題,建議無非是一些格式、注釋、命名之類不痛不癢的問題,草草了事,這個現(xiàn)象其實更為普遍。

評審者不了解業(yè)務(wù)和代碼

代碼提交人需編寫清晰的修改描述,必要的情況下評審者應(yīng)熟悉需求,否則,脫離功能實現(xiàn)無法發(fā)現(xiàn)真正的邏輯問題。

反饋建議未修改

這一點極為重要,需要對修改后的代碼再次審查,確保理解一致,問題建議有被接受執(zhí)行。

代碼審查耗費人力

代碼審查可能很耗時,特別是處理大型代碼庫或復雜變更時,評審人員需要花費時間和精力仔細審查代碼,這可能會影響整體的開發(fā)速度和項目進度。代碼審查需要多個團隊成員的參與,包括作者和評審人員。這可能對團隊資源產(chǎn)生負擔,特別是在人員有限的組織中。

5 小節(jié)

程序員的智慧結(jié)晶都盡在代碼之中,而代碼審查是打磨它更加的純潔無瑕、精致完美,這也值得大家一起持續(xù)精進,即使實際存在諸多阻礙。關(guān)于編碼技術(shù)路,路漫漫其修遠兮,吾將上下而求索。

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
FCLF8522P2BTL 1 Finisar Corporation Transceiver, 1250Mbps(Tx), 1250Mbps(Rx), SFP Connector, ROHS COMPLIANT PACKAGE
$301.4 查看
NC7WZ07P6X 1 Fairchild Semiconductor Corporation Buffer, LVC/LCX/Z Series, 2-Func, 1-Input, CMOS, PDSO6, 1.25 MM, EIAJ, SC-88, SC-70, 6 PIN
$0.28 查看
SP000063871 1 Avago Technologies FIBER OPTIC TRANSMITTER, 630-685nm, THROUGH HOLE MOUNT, ROHS COMPLIANT, PLASTIC, PACKAGE-2

ECAD模型

下載ECAD模型
$8.74 查看

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

嵌入式系統(tǒng)開發(fā)技術(shù)交流,軟件開發(fā)的思路與方案共享,行業(yè)資訊的分享。