如何高效的Code Review
原文地址:https://www.jianshu.com/p/55020a2a5266
公司內(nèi)部有Code Review,感覺不得要領(lǐng),在網(wǎng)上找了一份CheckList用來作為Review的標(biāo)準(zhǔn)。原文鏈接
0.Code Review的好處
0.1 知識傳播
相信很多人第一次提交Code Review都有類似的經(jīng)歷:短短幾百行代碼,卻被提了密密麻麻幾十條 comments,更新了十多次代碼,才最終被accept。其實當(dāng)代碼被accept,提交代碼的工程師通過這次review就學(xué)習(xí)到了代碼規(guī)范和很多好的實踐。同時,通過review更資深工程師的代碼,年輕的工程師也更直觀地學(xué)習(xí)架構(gòu)和編碼;另外,工程師之間也可以通過review代碼來共享項目知識,看代碼實現(xiàn)在絕大多數(shù)時候是了解項目的最好方式。
0.2 增進代碼質(zhì)量
這點也很容易理解,有經(jīng)驗的工程師可以在架構(gòu)設(shè)計、代碼細(xì)節(jié)等各個方面幫助到初學(xué)者。不同工程師也會有知識盲點,互相review進步也很快。另外,被review的代碼質(zhì)量更高還有一個很多人注意不到的心理因素:在狀態(tài)不佳的時候,工程師難免會匆忙寫些“潦草”的代碼,但是當(dāng)你知道自己的代碼會被review的工程師提交comment打回來,自然會更仔細(xì)些 : -)
0.3 找出潛在的 bug
這是大部分團隊進行Code Review的目的。就像上面提到的,Code Review在這方面效果不錯。其實我認(rèn)為大部分代碼bug應(yīng)該由單元測試,功能測試,性能測試和回歸測試來保障。不過由于靜態(tài)分析不理解業(yè)務(wù),另外有些bug在測試中并不容易復(fù)現(xiàn),這兩種情況下,經(jīng)驗豐富的工程師來review代碼就尤其重要了
1.Code Review的前提
進入Code Review需要檢查的條件如下:
1.1 Code Review人員是否理解了Code Review的概念和Code Review將做什么。
如果做Code Review的人員不能理解Code Review對項目成敗和代碼質(zhì)量的重要程度,他們的做法可能就會是應(yīng)付了事。
1.2 代碼是否已經(jīng)正確的build,build的目的使得代碼已經(jīng)不存在基本語法錯誤
我們總不希望高級開發(fā)人員或是主管將時間浪費在檢查連編譯都通不過的代碼上吧。
1.3 代碼執(zhí)行時功能是否正確
Code Review人員也不負(fù)責(zé)檢查代碼的功能是否正確,也就是說,需要復(fù)查的代碼必須由開發(fā)人員或質(zhì)量人員負(fù)責(zé)該代碼的功能的正確性。
1.4 Review人員是否理解了代碼
做復(fù)查的人員需要對該代碼有一個基本的了解,其功能是什么,是哪一方面的代碼,涉及到數(shù)據(jù)庫或是通訊,這樣才能采取針對性的檢查
1.5 開發(fā)人員是否對代碼做了單元測試
這一點也是為了保證Code Review前一些語法和功能問題已經(jīng)得到解決,Code Review人員可以將精力集中在代碼的質(zhì)量上。
2.Code Review 需要做什么
Code Review主要檢查代碼中是否存在以下方面問題:
代碼的一致性、編碼風(fēng)格、代碼的安全問題、代碼冗余、是否正確設(shè)計以滿足需求(性能、功能)等等
2.1 完整性檢查(Completeness)
代碼是否完全實現(xiàn)了設(shè)計文檔中提出的功能需求
代碼是否已按照設(shè)計文檔進行了集成和Debug
代碼是否已創(chuàng)建了需要的數(shù)據(jù)庫,包括正確的初始化數(shù)據(jù)
代碼中是否存在任何沒有定義或沒有引用到的變量、常數(shù)或數(shù)據(jù)類型
2.2 一致性檢查(Consistency)
代碼的邏輯是否符合設(shè)計文檔
代碼中使用的格式、符號、結(jié)構(gòu)等風(fēng)格是否保持一致
2.3 正確性檢查(Correctness)
代碼是否符合制定的標(biāo)準(zhǔn)
所有的變量都被正確定義和使用
所有的注釋都是準(zhǔn)確的
所有的程序調(diào)用都使用了正確的參數(shù)個數(shù)
2.4 可修改性檢查(Modifiability)
代碼涉及到的常量是否易于修改(如使用配置、定義為類常量、使用專門的常量類等)
代碼中是否包含了交叉說明或數(shù)據(jù)字典,以描述程序是如何對變量和常量進行訪問的
代碼是否只有一個出口和一個入口(嚴(yán)重的異常處理除外)
2.5 可預(yù)測性檢查(Predictability)
代碼所用的開發(fā)語言是否具有定義良好的語法和語義
是否代碼避免了依賴于開發(fā)語言缺省提供的功能
代碼是否無意中陷入了死循環(huán)
代碼是否是否避免了無窮遞歸
2.6 健壯性檢查(Robustness)
代碼是否采取措施避免運行時錯誤(如數(shù)組邊界溢出、被零除、值越界、堆棧溢出等)
Error handling是否都處理完畢(例如空指針檢查、應(yīng)該catch哪些異常)
2.7 結(jié)構(gòu)性檢查(Structuredness)
程序的每個功能是否都作為一個可辯識的代碼塊存在
循環(huán)是否只有一個入口
2.8 可追溯性檢查(Traceability)
代碼是否對每個程序進行了唯一標(biāo)識
是否有一個交叉引用的框架可以用來在代碼和開發(fā)文檔之間相互對應(yīng)
代碼是否包括一個修訂歷史記錄,記錄中對代碼的修改和原因都有記錄
是否所有的安全功能都有標(biāo)識
2.9 可理解性檢查(Understandability)
注釋是否足夠清晰的描述每個子程序
是否使用到不明確或不必要的復(fù)雜代碼,它們是否被清楚的注釋
使用一些統(tǒng)一的格式化技巧(如縮進、空白等)用來增強代碼的清晰度
是否在定義命名規(guī)則時采用了便于記憶,反映類型等方法
每個變量都定義了合法的取值范圍
代碼中的算法是否符合開發(fā)文檔中描述的數(shù)學(xué)模型
2.10可驗證性檢查(Verifiability)
代碼中的實現(xiàn)技術(shù)是否便于測試
2.11 效率
代碼效率包括讀代碼的效率與執(zhí)行代碼的效率,如何盡量減小算法復(fù)雜度、減少臨時對象等等。
番外1
##code review常規(guī)項目代碼是否符合公共的編程規(guī)范?包括變量名,函數(shù)名,縮進,格式和注釋。是否有被注釋掉的代碼或者調(diào)試代碼?代碼書寫是否簡單明了?是否存在多余的或是重復(fù)的代碼?代碼是否盡可能的模塊化?循環(huán)是否設(shè)置了長度和正確的終止條件?是否有可以被庫函數(shù)替代的代碼?是否進行異常處理?是否有更好的處理方法?有沒有遺漏任何corner case?文件組織,函數(shù)是不是應(yīng)該放到其他lib或庫中?是否應(yīng)該使用繼承保持風(fēng)格統(tǒng)一?##線程是否安全?是否可以使用更好的設(shè)計模式?擴展性是否良好?番外2
鏈接
轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/articles/11019396.html
總結(jié)
以上是生活随笔為你收集整理的如何高效的Code Review的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从flink-example分析flin
- 下一篇: 图解WebGLThree.js工作原理【