Google鼓勵的13條代碼審查標準 [建議收藏]

{"type":"doc","content":[{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"如何在代碼審查方面表現出色"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在本文中,我們將簡要介紹13種代碼審查標準,這些標準可以極大地幫助改善軟件的運行狀況並保持開發人員滿意。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"顧名思義,"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"代碼審查"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"是一個過程,其中一個或多個開發人員審查或篩選另一位開發者(作者)編寫的代碼,以確保:"}]},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"代碼沒有任何錯誤或問題。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"符合所有質量要求和標準。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"代碼執行了預期的測試。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"合併後,它將使代碼庫的運行狀況保持更好。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這就是爲什麼代碼審查是軟件開發的關鍵部分的原因。代碼審閱者充當代碼庫管理員,負責確定代碼是否處於要成爲代碼庫的一部分並進入生產的狀態。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Google以其卓越的技術而著稱,它們具有有效的代碼審查標準,這些標準似乎突出了審查代碼時要記住的一些要點。在Google,代碼審查的主要目的是確保Google代碼庫的整體代碼運行狀況隨着時間的推移而不斷改善。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這是您在查看更改列表時要記住的事項列表。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"審查標準"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"1.該代碼改善了系統的整體運行狀況"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"每個更改列表(Pull Request)都會改善系統的整體運行狀況。想法是,由於進行了如此小的改進,每次合併後,軟件或代碼庫的運行狀況都會得到改善。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"2.快速的代碼審查,響應和反饋"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"首先,不要延遲推送(合併)更好的代碼。不要指望代碼是完美的。如果它的狀況可以改善系統的整體運行狀況,則請推送。"}]},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"“這裏的關鍵是沒有'完美'的代碼,只有更好的代碼。”"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果您不在一項重點任務的中間,那麼請在代碼完成後立即進行檢查;但是,一個工作日是響應拉取請求所需的最長時間。預計變更列表將在一天之內獲得多輪的部分/完整代碼審查。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"3.在代碼審查期間進行教育和啓發"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"通過儘可能共享知識和經驗,在代碼審查期間提供指導。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"4.審查代碼時遵循標準"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"始終牢記,編碼標準此類文檔是代碼審查期間的絕對權威。例如,要在製表符和空格之間保持一致性,可以引用編碼約定。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"5.解決代碼審查衝突"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"通過遵循樣式指南和編碼標準文檔中商定的最佳實踐,並尋求其他在產品領域具有更多知識和經驗的人的建議,來解決衝突。根據嚴重性,處理衝突有所不同。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/94/94634ec8cb4f0fc7b404b4dcda696b85.jpeg","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果您的評論是可選的或次要的,請在評論中進行說明,然後由作者決定是解決還是忽略它們。作爲代碼審閱者,您至少可以建議在沒有樣式指南或編碼標準的情況下,更改列表(請求)與其餘代碼庫保持一致。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"6.演示UI更改是代碼審查的一部分"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果更改列表(Pull Request)更改了用戶界面,則除了代碼查看之外,還必須進行演示以確保外觀上的所有外觀均符合預期並與模擬匹配。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於前端變更列表(Pull Request),始終建議進行演示/演練,或確保變更列表還包括必要的UI自動化測試,以驗證添加/更新的功能。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"7.確保代碼審查伴隨所有測試"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"除非緊急情況,否則拉取請求(更改列表)應伴隨所有必要的測試,例如單元,集成,端到端等。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"緊急情況可能是需要儘快修復的錯誤或安全漏洞,以後可以添加測試。在這種情況下,請確保創建了適當的問題,並確保有人在完成熱修復或部署後立即擁有所有權才能完成。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/56/56db91da1c27235da9d3201ea97b51c7.jpeg","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"沒有足夠的理由跳過測試。如果由於時間限制,某些目標有無法實現的風險,那麼解決方案不是跳過測試,而是要對可交付成果進行範圍界定。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"8.專注時,不要打擾自己進行代碼審查"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果您正處於重點工作中,請不要打擾自己,因爲這可能需要很長時間才能恢復正常。換句話說,打斷專注的開發人員所付出的代價比讓開發人員等待代碼審查要高得多。在計劃的休息時間(例如午餐,咖啡等)之後進行代碼檢查。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/cf/cf505a92f30563d5e02b045865ff55c5.png","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"期望並非總是在同一天完成併合並整個代碼審查過程。重要的是迅速給作者一些反饋。例如,您可能無法進行完整的檢查,但是您可以快速指出一些可以研究的內容。這將極大地減少代碼審查期間的挫敗感。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"9.複習一切,不要做任何假設"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"查看分配給您檢查的每一行代碼。不要對人工編寫的類和方法做任何假設,並且應該確保您瞭解代碼在做什麼。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/36/3659e5f7f8bae745f2a65e525f161f26.jpeg","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"確保瞭解您正在檢查的代碼。如果沒有,請進行澄清或要求代碼演練/解釋。如果您有部分代碼不具備審閱的資格,請確保還有其他合格的開發人員可以審閱代碼的那些部分。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"10.回顧代碼時要顧全大局"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"從更廣泛的背景來看變化通常是有幫助的。例如,更改了文件,並添加了四行代碼。不要只查看四行代碼;相反,請考慮查看整個文件並檢查新添加的內容。它們會降低現有代碼的質量,還是會使現有功能成爲重構的候選對象?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果不在函數/方法或類的上下文中檢查此類簡單的添加項,則隨着時間的流逝,您將繼承一個類,該類是不可維護的,超級複雜的,難以測試的,無法完成的所有工作,並且難以擴展或重構。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"請記住,隨着時間的推移,很少的改進加起來就可以產生具有最少數量缺陷的優質產品,同樣,隨着時間的流逝,輕微的代碼降級或技術負擔也會加重並導致產品難以維護和擴展。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"11.認可並鼓勵代碼評審期間的良好工作"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果您在變更列表中看到了一些不錯的東西,請別忘了喊出作者的出色作品並鼓勵他們。這是我個人以前從未做過的事情。代碼審查的目的不僅應該是發現錯誤,還應該鼓勵和指導開發人員所做的出色工作。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"12.在代碼審查中要謹慎,尊重,友善和清晰"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"至關重要的是,在代碼審閱期間,您要善良,清晰,禮貌和尊重,同時也要對作者非常清楚和樂於助人。查看代碼時,請確保對代碼而不是開發人員做出評論。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"13.解釋您的代碼審查註釋,並牢記範圍"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"每當代碼審閱意見提出替代方法或進行標記時,至關重要的是要解釋原因並根據您的知識和經驗提供示例,以幫助開發人員瞭解您的建議將如何幫助提高代碼質量。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當建議修復或更改時,請在如何指導作者修復代碼方面找到適當的平衡。例如,我很欣賞指導,解釋,一些提示或建議,而不是整個解決方案。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章