<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          谷歌開源的代碼評(píng)審規(guī)范,值得借鑒!

          共 2713字,需瀏覽 6分鐘

           ·

          2020-08-19 19:44

          Java技術(shù)棧

          www.javastack.cn

          關(guān)注閱讀更多優(yōu)質(zhì)文章



          本文經(jīng)機(jī)器之心(微信公眾號(hào):almosthuman2014)授權(quán)轉(zhuǎn)載,禁止二次轉(zhuǎn)載

          項(xiàng)目作者:Max Kanat-Alexander 機(jī)器之心編譯


          谷歌以前建立了一套通用的工程實(shí)戰(zhàn)指南,它差不多囊括了所有編程語言與各種類型的項(xiàng)目。今天,谷歌將這一套代碼評(píng)審(Code Review)規(guī)范開源了出來,它代表了谷歌最佳實(shí)戰(zhàn)經(jīng)驗(yàn)的集合。


          項(xiàng)目地址:https://github.com/google/eng-practices



          開源項(xiàng)目作者或其它開發(fā)者都能從這個(gè)項(xiàng)目獲得有用的知識(shí),因此谷歌開源了這一份代碼規(guī)范,并將持續(xù)維護(hù)。如項(xiàng)目所言,目前這份代碼評(píng)審規(guī)范主要包含兩組獨(dú)立的文檔:


          1. 代碼評(píng)審者的指南


          • 代碼評(píng)審標(biāo)準(zhǔn)

          • 代碼評(píng)審希望達(dá)到什么

          • 在代碼評(píng)審中導(dǎo)航修改列表

          • 代碼評(píng)審的速度

          • 如何寫審查的評(píng)論

          • 處理代碼評(píng)審的回退


          2.CL 作者指南


          • 寫一個(gè)好的修改列表描述

          • 構(gòu)建一些小的修改列表

          • 如何處理代碼評(píng)審者的評(píng)論


          其中代碼評(píng)審者指南包括一些做代碼評(píng)審的最佳方式,它們都是根據(jù)長(zhǎng)期經(jīng)驗(yàn)得出來的。代碼評(píng)審者指南本來是一個(gè)完整的文檔,但作者將其分為了 6 部分,讀者可根據(jù)需要閱讀。修改列表(Change List/CL)制定者指南包括一些瀏覽代碼評(píng)審的最佳方式,開發(fā)者可以快速處理評(píng)審結(jié)果。



          代碼評(píng)審都在干些什么


          代碼評(píng)審最主要的目的是確保代碼庫一直保持「健康」的狀態(tài),代碼評(píng)審的所有工具和過程都是為了這個(gè)目的而構(gòu)建的。代碼評(píng)審會(huì)系統(tǒng)化地查一遍源代碼,并希望檢查出開發(fā)初期未察覺的一些錯(cuò)誤,從而提升代碼質(zhì)量。


          那么代碼評(píng)審都在感謝什么呢?一般而言,代碼評(píng)審希望完成以下的評(píng)估:


          • 設(shè)計(jì):代碼是不是經(jīng)過精心的設(shè)計(jì),并適合我們的系統(tǒng)?

          • 功能性:代碼的行為是否和作者的意圖保持一致?代碼的行為方式對(duì)用戶是否正常?

          • 復(fù)雜度:代碼能更簡(jiǎn)單一些嗎?在未來,其它開發(fā)者能更容易地理解并使用這些代碼嗎?

          • 測(cè)試:代碼是不是正確的,是不是通過了精心設(shè)計(jì)的自動(dòng)測(cè)試?

          • 命名:開發(fā)者是不是選擇易于理解的名稱給變量、類和方法進(jìn)行命名?

          • 評(píng)論:代碼評(píng)論是不是足夠清晰并有用?

          • 風(fēng)格:代碼是不是采用了標(biāo)準(zhǔn)的編寫風(fēng)格?

          • 文檔:開發(fā)者是不是更新了相關(guān)的文檔?


          既然代碼評(píng)審要進(jìn)行眾多的檢查,那么找一個(gè)優(yōu)秀的評(píng)審者就非常重要了。一般對(duì)于修改列表的不同部分,都會(huì)有不同的評(píng)審者進(jìn)行細(xì)致的審查。另外,關(guān)注公眾號(hào)Java技術(shù)棧回復(fù)手冊(cè)可以獲取阿里巴巴的最新Java開發(fā)手冊(cè),非常有價(jià)值和參考意義。

          當(dāng)然如果是結(jié)對(duì)編程,且你的隊(duì)友能進(jìn)行高質(zhì)量的代碼評(píng)審,那么這樣寫的代碼一般可以視為已經(jīng)過評(píng)審了。此外,我們也可以進(jìn)行面對(duì)面的評(píng)審,評(píng)審者會(huì)問開發(fā)者一些問題。


          代碼評(píng)審的通用規(guī)范


          整個(gè)代碼評(píng)審指南分為了很多模塊,我們也沒辦法全部介紹一遍。因此,在本文的最后,我們將介紹谷歌開發(fā)者在做代碼評(píng)審時(shí),最一般的評(píng)審標(biāo)準(zhǔn)。



          谷歌表示他們以如下規(guī)則作為期望的標(biāo)準(zhǔn):


          「通常而言,一旦修改列表能提升整體代碼的健康程度,那么即使修改列表不完善,評(píng)審者同樣也應(yīng)該傾向于批準(zhǔn)該列表。


          這條準(zhǔn)則是所有代碼評(píng)審指南的最高原則。它也會(huì)有一些限制,例如,如果 CL 添加了一些評(píng)審者不需要的特性,那么即使代碼經(jīng)過了精心的設(shè)計(jì),評(píng)審者也應(yīng)該不予通過。


          這里的一個(gè)關(guān)鍵點(diǎn)是沒有「完美」代碼這個(gè)概念,只有更好的代碼。評(píng)審者不應(yīng)該要求代碼作者在批準(zhǔn)前對(duì)每一小塊 CL 進(jìn)行打磨。

          相反,評(píng)審者應(yīng)該權(quán)衡向前繼續(xù)開發(fā)的需求和修改建議的重要性。評(píng)審者要求的是持續(xù)性地改進(jìn),而不是追求完美的代碼。CL 作為一個(gè)整體,如果它能提升系統(tǒng)的可維護(hù)性、可讀性和可理解性,那么就不要因?yàn)樗€不完美而推遲數(shù)天或數(shù)周更新。


          評(píng)審者應(yīng)該經(jīng)常留下一些評(píng)論,以表達(dá)能導(dǎo)致更好性能的做法。如果這些做法并不是非常重要的,那么需要加上前綴「Nit:」,從而令代碼作者知道這些內(nèi)容是可以忽略的。《兩年 Code Review 實(shí)戰(zhàn)經(jīng)驗(yàn)分享!》這篇推薦看下。


          評(píng)審指導(dǎo)


          代碼評(píng)審有一個(gè)很重要的功能,即教開發(fā)者一些開發(fā)經(jīng)驗(yàn),不論是語言、框架還是一般軟件設(shè)計(jì)準(zhǔn)則。留一些評(píng)論總會(huì)幫助開發(fā)者學(xué)習(xí)一些新的知識(shí),共享知識(shí)也是改善系統(tǒng)代碼健康狀態(tài)的重要部分。當(dāng)然,如果評(píng)審者的評(píng)論僅僅只是教育性的,且對(duì)于標(biāo)準(zhǔn)要求不那么重要,那么還是要加上前綴「Nit:」的。


          評(píng)審準(zhǔn)則


          技術(shù)事實(shí)和數(shù)據(jù)要優(yōu)先于觀點(diǎn)與個(gè)人風(fēng)格。


          在代碼風(fēng)格方面,谷歌的代碼風(fēng)格指南是最權(quán)威的參考資料。任何不在風(fēng)格指南中的代碼習(xí)慣,都屬于個(gè)人風(fēng)格,但我們應(yīng)該保證基本的風(fēng)格和谷歌風(fēng)格指南是一致的。


          谷歌風(fēng)格指南:http://google.github.io/styleguide/


          軟件設(shè)計(jì)方面幾乎不會(huì)有純粹的風(fēng)格問題,或者純粹個(gè)人的習(xí)慣問題。很多風(fēng)格問題都基于一些基本準(zhǔn)測(cè),它們并不是簡(jiǎn)單地由個(gè)人觀點(diǎn)決定的。此外,如果代碼作者通過數(shù)據(jù)或基本工程原則證明了幾種方法同樣有效,那么評(píng)審者應(yīng)該接受作者的風(fēng)格。否則,偏好的選擇還是取決于軟件設(shè)計(jì)的標(biāo)準(zhǔn)原則。


          如果沒有其它適用規(guī)則,那么評(píng)審者可以要求作者的偏好與當(dāng)前代碼庫保持一致,同時(shí)不對(duì)整體的代碼健康水平產(chǎn)生影響。


          解決沖突


          在代碼評(píng)審中,如果發(fā)生了任何沖突,第一步應(yīng)該是開發(fā)者和評(píng)審者基于本項(xiàng)目的 CL 指南達(dá)成共識(shí)。當(dāng)達(dá)成共識(shí)非常困難時(shí),開發(fā)者與評(píng)審者應(yīng)該面對(duì)面地交流,而不只是通過審查中的評(píng)論來交流。如果開會(huì)討論還解決不了,那么就要擴(kuò)大會(huì)議了,我們可以通過與代碼維護(hù)人員、工程經(jīng)理等開發(fā)者的交流,達(dá)成最終的共識(shí)。


          以上只是代碼規(guī)范的一般標(biāo)準(zhǔn),它還是非常抽象的,如果讀者想要了解更多細(xì)節(jié)的內(nèi)容,那么可以繼續(xù)查看該項(xiàng)目。
          最近熱文:
          1、重磅!《Java開發(fā)手冊(cè)(嵩山版)》最新發(fā)布
          2、打破你的認(rèn)知!Java空指針居然還能這樣玩
          3、盤點(diǎn) 35 個(gè) Apache 頂級(jí)項(xiàng)目,我拜服了…
          4、Spring Boot 太狠了,一次發(fā)布 3 個(gè)版本!
          5、Spring Boot 如何快速集成 Redis?
          6、盤點(diǎn) 6 個(gè)被淘汰的 Java 技術(shù),曾經(jīng)風(fēng)光過!
          7、Spring Boot Redis 實(shí)現(xiàn)分布式鎖,真香!
          8、Spring Boot 干掉了 Maven 擁抱 Gradle!
          9、公司來了個(gè)新同事不會(huì)用 Lombok!
          10、同事寫了個(gè)隱藏 bug,我排查了 3 天!
          掃碼關(guān)注Java技術(shù)棧公眾號(hào)閱讀更多干貨。

          點(diǎn)擊「閱讀原文」獲取面試題大全~

          瀏覽 68
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  啊啊啊啊91 | 片黄AA | 国产精品综合视频 | 国产操屄 | 三级欧美一区国产 |