來源html
代碼審覈標準
代碼審覈的核心目的是保證谷歌代碼在不斷的改進發展過程當中還能持續保證健康。全部代碼審覈的流程與工具都是設計用於確保這個目標。 爲了實現這個目標,咱們作了不少的權衡。 首先,研發人員必須可以在我的的任務上作出改進。若是你從不提交代碼的改進,那產品就沒法提高。一樣的,若是代碼審覈者對於任何變動提交都設置很高的門檻,也會影響開發者從此也提交改進的熱情。 從另外一個方面說,代碼審覈者的責任是要確保每一個變動清單(CL)[^1]的內容都可以在全局上保證代碼質量,而不會隨着時間致使質量不斷變差。這樣其實是比較困難的,總體代碼的質量削弱其實是因爲代碼健康度中很小的問題不斷累積引起的,特別當一個小組在明確工期的壓力之下,須要走一些捷徑纔可以達成目標。 審覈者對於他們審覈的代碼是有權利和責任的。他們須要確保代碼基線是一致風格,可維護,以及在《代碼審覈應該審覈什麼》一文中提到的其餘內容。 因此,咱們指望代碼審覈中包含以下標準規則: 一般狀況下,審覈者須要確認一個變動清單對於總體系統代碼必定是有質量提高的,哪怕目前還不是完美的。 在代碼審覈的指導規則中,這是最重要的原則。 固然,這條規則存在不少的限制。例如變動清單包含了一個系統不容許加入的特性,即便代碼的設計和質量很好審覈者也能夠直接拒絕。 有一個很重要的觀念,「完美」的代碼是不存在的,只會有更好的代碼。審覈者不該該要求在接受提交前,就要提交者打磨變動清單中的每一個小細節。審覈者須要在系統持續改進和建議重要變動之間作出平衡。與其要求完美,審覈者更應該重視的是持續改進。當一個變動清單對於總體系統的可維護性,可讀性,可理解性都有改進時,就不該該由於「不完美」而被拒絕幾天或者幾周。 審覈者應該一直都能自由的對能夠改進的地方留下注釋意見,可是若是這並非很重要,能夠在前面加上前綴如「Nit:」這樣能讓提交者知道這只是他們可以忽略的一個小優化點。 注意:本文檔中的不會爲任何惡化代碼健康的提交作辯解,只有在特定的經濟狀況下你能夠考慮這麼作。git
導師制
代碼審覈者有一個很重要的做用就是指導開發者關於語言、框架、或者軟件設計的通用規則的一些新知識。可以留下一些評論幫助開發者學習一些新知識老是好事情。分享知識對於代碼質量改進也是一件好事情。你須要謹記,若是你的評論是處於純粹教育的目的,而不是本文檔中提到的評判標準,請加上「Nit:」的前綴或者提示提交者這些在變動清單中並不是須要強制修改。github
原則
- 專業的現實狀況與數據否認意見和我的偏好。
- 針對樣式問題,《樣式指南》是絕對權威。任何純粹的樣式觀點(如空格等)在樣式指南中沒有說起的都是我的偏好。這部分的風格也應當統一,若是沒有事先約定則接收提交者的樣式。
- 軟件設計的方面幾乎不可能會是純粹的樣式問題或者我的偏好。 這些都是基於根本性的原則構建的,應當倚重於這些原則,而不是我的意見。有時會存在一些有限的選項。若是提交者可以證實(經過數據或者基於實際的工程原則)這些作法都是相近的,審覈者應當接受提交者的偏好。不然就要取決於軟件設計的標準規則。
- 若是沒有其餘可應用的規則,審覈者應當要求提交者與現有的代碼基線保持一致,只要變動內容不會影響到系統的健康程度。
解決衝突
面對代碼審覈中的任何衝突,第一步永遠應該是開發者和審覈者達成一致,原則就是基於本文檔和其餘的文檔如《變動提交者指南》和《審覈者指南》。 當很難達成一致時,提交者和審覈者面對面的溝通或者語音溝通就頗有必要,而不是經過代碼審覈的評論來解決衝突。(可是記住能夠將討論的結果以評論的形式記錄在變動提交中,以便未來方便查閱) 若是上面的方法仍是不能解決衝突,常見的方法就是升級問題。升級的方法一般是發起團隊會議,要求技術領導參與其中,徵詢代碼維護者或者管理者的意見,最終作出決策。不要由於提交者和審覈者沒法達成一致而閒置一份提交。框架
下一篇預告:代碼審覈時,咱們應當尋找什麼內容。ide
總結: 谷歌的代碼審覈中,首先要創建的是原則,編碼樣式、軟件設計等等的原則。基於這些原則才能斷定系統代碼的健康程度,不是以我的喜愛或者使用了某種框架。 審覈者有拒絕提交的權利,可是揹負着系統改進提高和維持健康程度的責任。要熟悉企業的各類原則產生本身的判斷,而且將本身的意見分爲必須和建議兩種等級。 面對衝突時,不該當是提交者或者審覈者某一方面的責任,而是雙方應當力排衆議嘗試說服對方,當相互沒法說服時能夠升級問題,請求上級或者外部來評判。 在這些裏面,全部的角色都有一個很重要的原則:真正的尊重代碼,熱愛代碼。而不是隨便糊弄任務,隨便提交,隨便審覈,隨便經過而且合併。這個要靠團隊的文化和企業的健康來支撐。工具
[^1]:CL: 是 "changelist" 的縮寫,指提交到版本控制或者提交給代碼審覈的一個完整自包含的變動。 在其餘組織中(非股改革)稱之爲變動(change)或者補丁(patch)。學習
原文出處:https://www.cnblogs.com/pluto4596/p/11519528.html優化