什麼是Code Review
中文為代碼審查,是指一種有意識和系統的召集其他程序員來檢查彼此的代碼是否有錯誤的地方.
通常進行Code Review會有以下效果:
- 更好的代碼質量,提高代碼的可維護性,統一性,可理解性等.
- 查找缺陷,發現性能問題,安全漏洞,可能的後門和惡意代碼等.
- 最佳實踐,能夠更好的完成任務和需求的有效方法.
- 知識分享,review別人代碼的同時,也是學習有益技術的方式之一.
要不要Code Review
Code Review是一把雙刃劍,用的好就事半功倍,用的不好,反而對團隊和項目有不利影響.
一些道理和技術雖好,但也要看看是什麼場合和環境,因勢利導,求同存異才是核心所在.
顯然review和其他事物一樣,也需要花費大量的時間,對於任務本就極其緊張的團隊,在如何取捨上值得好好思考一番.
review也需要人與人之間的溝通和配合,同時也比較檢驗技術深度.
要知道,最難搞定的就是人.人都有惰性,也有自己的一套行為準則和規範,在這個層面強加進來,很容易產生抗拒心理.
最後,怎麼說呢,試試又不吃虧,不要心存完美主義,小步快走,快速迭代,不正是軟件開發的第一要義嗎?
Code Review前置條件
Code Review本身是一件後置工作,有著查漏補缺的作用.
但是推行它也需要準備一些前置條件,能夠讓團隊更快更好的去接受和實施.
- 建立團隊規範,不論是代碼層面還是協作層面,如命名規則,語法檢查,分支規範等.
- 建立完善的文檔,方便團隊和新人查閱,在內容上大家可以共建和建議,不能某個人一言而決.
- review流程制定,設定職責,設定週期,設定目標,從輕量級代碼審查開始,同時建立積極的審查文化.
完成上述基本骨架後,就可以開始嘗試review了.
這一時期通常是刀耕火種的時間段,極大概率迎來各種阻力,如果推行之後的效益低於之前的,可以在適當時間調整和放棄.
如何有效的Code Review
先不提細節,每個團隊和技術架構都有各自的規範.
從通用的方法層面有以下幾點可以進行有效的審查:
- 一次查看少於400行代碼
- 一次檢查不要超過30分鐘
- 使用清單(上述內容提到的團隊規範文檔,可以更細化為某個目標清單)
人的精力是有限的,瞭解自己的當前狀態尤為重要.
一些常見的規範和審查元素:
- 命名可讀性,能自我闡述的最好,英文用詞儘量準確(命名是所有程序員的頭痛之一)
- 註釋,恰到好處的註釋,重要的地方及時備註,不需要的地方要刪除一定的註釋信息,代碼既是給機器運行的,也同時是交接給人看的.
- git commit提交規範,不標註信息和不及時commit都是嚴重阻擾review的因素之一,除了常規的描述信息外,還可以按類型等備註:feat: 新特性/fix: 修改問題/refactor: 代碼重構/docs: 文檔修改/chore: 其他修改/test: 測試用例修改/style: 代碼格式修改等等等
注意到沒,上述的都是在信息層面做文章,這也是有效溝通的方式之一.
你的代碼,你的註釋,你的提交,不僅僅是業務,也同時包含了很多對外的信息,對團隊是否友好可讀,都潛移默化的表達了出來.
任何事物都可以分為初級/中級/高級,也可以理解為草稿/正文/優化/美化,等層層遞進的關係和階段.
從易到難,你還可以做以下審查(通用的居多):
- 低級的錯誤,語法錯誤,多餘變量,類型檢查,全局汙染,強耦合,代碼格式化等,通常可以先用自動化插件檢查,其次才是人工檢查.
- 最佳實踐,避免過時的語法,避免過多的if else,避免參數過多,嘗試用新特性,語法糖,更好的設計模式,數據結構等重構代碼.
- 重複代碼,主要看有沒有把公共的組件,函數,可複用的代碼片段抽離出來,僅此一點,可省去後期大量時間和避免錯誤發生率.
- 代碼的健壯和優雅,是否可擴展,低耦合,邏輯是否健壯,有沒有潛在的bug,保證數據和行為的統一性,如統一錯誤提示,統一緩存等
到此涵蓋了review的一小部分,剩下的可以自行擴展,並非是固定的標準,每個團隊的實現和目標都不一樣.
Tips
一句老生常談的話,大家都是成年人了,該做什麼,怎麼做,都要自己獨立思考,積極行動.
團隊的Code Review有沒有推行沒關係,有,固然可能更好,沒有,也並不妨礙你的自我提升.
但凡有好的事物都應該主動去嘗試,去堅持,克服外來因素影響,一個人,也同樣可以review自己和同事代碼.
尤其是自己的.
感謝大家能耐著性子看完這篇文章
在這裡小編分享一份自己收錄整理的Android學習PDF+架構視頻+面試文檔+源碼筆記,還有高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料幫助大家學習提升進階,也節省大家在網上搜索資料的時間來學習,也可以分享給身邊好友一起學習
如果你有需要的話,可以點贊+評論+轉發,關注我,然後私信我【進階】我發給你
閱讀更多 像程序那樣思考 的文章