今天你 CR(code review)了嗎奠衔?
CR 塘娶?哈哈刁岸,并沒有。
老實說迫横,就是自己寫的代碼酝碳,過了一段時間后击敌,再去查看,也會很驚訝的說:這是我寫的嗎圣蝎,也太不規(guī)范了吧徘公。這首先說明了我在進步牲证,其次坦袍,之前寫的代碼是有問題的捂齐。那就引出了一個問題奠宜,之前怎么沒有發(fā)現(xiàn)呢瞻想?
對于自己寫的代碼蘑险,會潛在地產(chǎn)生一種信任和依賴佃迄,所以自己有時候是很難發(fā)現(xiàn)其中的明顯的錯誤以及規(guī)范問題的和屎。然而柴信,對于其他人來說宽气,一開始是不會進入這種 “自我信任” 狀態(tài)的,所以較容易發(fā)現(xiàn)問題绪氛。CR就創(chuàng)造了這個機會枣察,以第二雙眼睛再次檢查代碼,幫助我們及時地發(fā)現(xiàn)潛在的問題臂痕。
有沒有遇到過以下情況:因為一個非空判斷而查找了好久猿涨;因為變量命名不規(guī)范而吐槽握童;因為關(guān)鍵參數(shù)沒有添加說明,然后詢問團隊成員叛赚,但卻被告知澡绩,相關(guān)人員已經(jīng)離職了......諸如此類,其實大部分在CR的時候就能夠發(fā)現(xiàn)并規(guī)避了俺附。如果之前這樣做了肥卡,現(xiàn)在根本就不用花費這么大的成本去還這些代碼債務(wù)了。
CR分為正式代碼評審和輕量級代碼評審事镣。后者更加便捷召调,也是經(jīng)常被采用的。我們需要根據(jù)自身所處的環(huán)境進行選擇蛮浑,適當調(diào)整實踐的方式唠叛。CR的主要目的是為了提高代碼質(zhì)量以及團隊內(nèi)部知識共享,提升團隊的整體水平沮稚,并不是借此機會以缺陷和錯誤來批判他人艺沼。一直相信這一點蕴掏,CR是不需要花大量的時間來執(zhí)行的,但效果卻是很顯著的定拟。
意識到CR的重要性后,怎樣正確有效的實踐CR也是很重要的。
Code Review的最大的功用是純社會性的荠藤。如果你在編程的時候,知道將會有同事檢查自己的代碼牡彻,那編程的態(tài)度就完全不一樣了严就,寫出的代碼將會更加整潔,有更好的注釋祟印,更好的程序結(jié)構(gòu)套鹅。若沒有代碼審查,盡管還是會有人看到你的代碼,但這種事情不是立即發(fā)生的事,誰知道是哪個時間點(so,you don't care),并且它不會給你帶來同等的緊迫感和重視凿宾。
實踐CR之前,團隊成員間需要達成一個共識产禾,制定一份合理的代碼規(guī)范標準哈雏。以此為前提,后續(xù)再補充。代碼規(guī)范與代碼優(yōu)化一定要區(qū)分開,不可相提并論憋活。作為一個審查者辜梳,你的任務(wù)不是確保被審查的代碼都采用你的編碼風格宗挥,因為它不可能跟你寫的一模一樣,而是要確保被審查的代碼的正確性透敌。
其次顾瞻,這是一個長期實踐移稳,不能中斷稻薇,并且每次所用時間不宜過長案狠。這是一個循序漸進的過程拉庵,不可能一次性到位名段。我們需要跨出最難的第一步伸辟,然后逐步解決遇到的 ”攔路虎“馍刮,不能因為各種各樣的理由卡啰,就此中斷。
實踐CR的目的是服務(wù)于我們押搪,不是以此為機會去打壓他人厦画。對于他人的代碼躏率,不是一定要做出評論阅爽,表揚或是批評荐开,以突顯自己的存在感付翁。并且,這不僅僅是個人的事情晃听,更應該是團隊層級的百侧,最主要的目的是為了提升團隊的整體水平,保證代碼的高質(zhì)量能扒。