国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

7 個建議讓 Code Review 高效又高質

開發 開發工具
Code Review(CR) 的本質是什么?是為了查錯?還是為了 KPI?本文分享阿里資深技術專家的看法:CR 是一種關于社會學的長期行為和組織文化,通過 CR,形成一種良性互動的技術氛圍,傳播和分享知識,提升代碼質量,并給出了 7 個提高 CR 效率和質量的實踐建議。

 Code Review(CR) 的本質是什么?是為了查錯?還是為了 KPI?本文分享阿里資深技術專家的看法:CR 是一種關于社會學的長期行為和組織文化,通過 CR,形成一種良性互動的技術氛圍,傳播和分享知識,提升代碼質量,并給出了 7 個提高 CR 效率和質量的實踐建議。

關于代碼評審(Code Review)的文章也算是汗牛充棟了,代碼評審也已經是許多組織的標準化實踐。不過,許多團隊在嘗試代碼評審實踐時,卻有如下疑問:

  • “政治正確” 的代碼評審活動究竟有沒有達到期望的實際效果?
  • 給了我一大堆代碼,到底該從哪里看起?哪些方面是我該評審的?哪些不是?
  • 別人有沒有認真評審我的代碼?如何讓別人更容易的評審代碼?

這些都不是什么新問題,但是它們是如此的普遍,而且經年累月地在不同的上下文中被提起,不外乎兩個方面:

  • 理解代碼評審的核心目標,建立關于代碼評審的正確預期。
  • 了解代碼評審為什么可能無效,并采取有針對性的實踐來提升代碼評審的效果。

為什么要做代碼評審

不少同學認為代碼評審就是用來查錯的,甚至希望用代碼的缺陷數量來檢驗代碼評審的效果。這低估了代碼評審的價值。代碼評審最本質的作用不是問題發現。除了代碼評審,我們有更多更好的手段來發現問題。代碼評審的作用更多是關于社會學的,是一種長期行為和組織文化。

CR 是代碼規范性的保證

編碼者視角:良性的社交壓力

你正在緊張地編碼,交付時間迫在眉睫。你的組織對代碼的單元測試有一個要求:凡是新增的代碼,必須有完整的自動化單元測試。但是,在壓力之下,你想給自己降低一點要求,不寫這部分的單元測試了,以后再編寫吧,或者為了應付工具的覆蓋率要求,先寫一點不那么有用但是卻能帶來覆蓋率的測試(例如沒有斷言的測試)。

但是,一旦想到你的代碼將會發出去給你的同事做 Review,有沒有為剛才的這種想法產生一絲絲壓力?這種壓力是良性的,它能給你帶來一種即時的反饋,阻止你去選擇那些短期收益、長期損失的 “投機” 行為。如果沒有代碼評審這個環節,或許你就會真的 “為所欲為” 了,其實最終還是要為這種取巧行為買單。

維護者視角:代碼可讀性的保證

有許多方式能實現同一個軟件需求。有興趣的讀者可自行搜索 “Hello World 的 N 種寫法”。盡管條條大路通羅馬,但是,不同的道路代價是不一樣的。小到變量命名,大到設計結構,如果你采用的是一種不那么常見的做法,往往就是給后來的代碼維護者挖坑。這種維護活動可能發生在 1 個月以后,也可能發生在 1 年以后,甚至是更久之后。甚至那時候,作為作者的你,已經不在這個團隊了,已經沒有人能理解當時的軟件為什么這樣設計。

代碼評審強制提前了這個反饋周期,代碼編寫完成之后,就立即有了一位或多位讀者——他們是這個代碼的 Reviewer。所以,這段代碼在編碼完成之后,立即經歷了可讀性的檢驗。更理想地,如果組織已經有了編碼規范和設計規范,還能確保這段代碼遵循了這些規范。如果 CR 過程中發現這段代碼沒有遵循規范,那更是好事,它指向了 CR 的另外一個關鍵價值:知識傳播。

CR 帶來了知識傳播和設計共識

你可能是一個團隊的 Leader,正在為如何提升團隊成員的編程能力發愁。你希望他們去讀書,所以你介紹了諸如《整潔代碼》之類的入門書籍,你還介紹了經典名著《設計模式》,還推薦了《領域驅動設計》。你也希望團隊成員能理解產品的業務邏輯,所以希望團隊成員周期性地進行業務分享。

所有這些努力都很好。但是,也有可能你會被打擊。一個月過去了,似乎團隊成員對命名規范都建立了概念,但是在怎么命名這件事上,大家并未形成共識。不少同學已經了解了一些設計模式,但是有人過度運用模式,搞得代碼臃腫不堪,有人則只知道singleton。團隊成員為什么是實體對象,什么是值對象爭的不可開交,沒有人說得清楚聚合是什么,應該在什么場景下使用。

你真正缺乏的,是一個場景。抽象的概念如果不落到具體的事情上,就很難形成共識。有人或許知道海洋法系的 “判例”,這是在法律層面形成共識的一種非常好的方法。代碼評審,其實也是在形成判例:哪一類設計是合理的,哪一類設計是不合理的。通過針對具體的問題進行分析,團隊就會逐漸形成設計共識,在過程中,對這些共識不那么熟悉的新同學,也可以慢慢融入。

檢驗邏輯正確性

當然,CR 也能用來檢驗邏輯正確性。

保證代碼邏輯正確,是設計者的責任

為了不讓 CR 被濫用并被寄予過高期望,我們在此首先申明一點:保證代碼的邏輯正確,是設計者的責任。出現了一個空指針錯誤,究竟是編碼做的不好,是 CR 做的不好,還是測試做的不好?首先肯定是代碼作者制造了這個問題。把這個板子打在 Reviewer 身上公平嗎?或許,Reviewer 確實有責任發現這樣的問題,但是,如果代碼本來就錯誤多多呢?如果一次性 Review 了 1000 行代碼,根本看不過來呢?我能找到一大把的理由,來說明為什么漏掉這么一個空指針錯誤。

發現邏輯錯誤的其他方法

你還有許多其他的方法來發現錯誤,它們的成本往往并不高,例如:

  • 編寫自動化單元測試
  • 使用代碼靜態檢查工具

無論是否存在 CR 活動,上述兩點都是一名專業的開發者和開發組織應該大力倡導的行為。

發現錯誤的價值

在上述兩點得到承認的前提下,代碼評審確實也應該用于發現錯誤——它本質上建立了一種冗余機制,通過多人工作在同一段代碼上,發現代碼中可能發生的認知錯誤(這對于單個開發者往往是很難發現的)以及疏忽。

高效高質的代碼評審

哪些因素阻礙了代碼評審的效果

代碼評審本身并不困難,但是,如果考慮到如下因素,可能就比較復雜了:

  • 你可能對要評審的代碼的設計上下文一無所知
  • 你可能非常忙碌
  • 你一下子收到了幾千行需要被評審的代碼
  • ...

實際操作建議

建議一:小批量——每次 Review 的代碼量要少

研究發現, 成功的 CR 活動一定是小規模的。例如,《Modern Code Review:A Case at Google》論文介紹說, Google 的 CR 活動中,有 35% 的 CR 僅僅修改了一個文件,90% 的 CR 修改的文件數在 10 個文件以內,甚至有 10% 的 CR 僅僅修改了1行代碼。

代碼量少的好處顯而易見:修改了哪里非常清晰,問題也會一目了然。一次推給別人 1000+ 行代碼,還想得到有價值的 Review,可能性微乎其微。

當然,一次 Review 它代表的功能應該是有意義的,是完整的,如果不是修復缺陷,這一定程度上也對開發者迭代地開發功能的能力提出了要求。

建議二:多批次——Review 要頻繁發生

小批量必然導致了多批次。在微軟 2013 年的一篇論文《iExpectations, Outcomes, and Challenges Of Modern Code Review》和前述的 Google 的論文中都提到了頻繁 Review 的做法。其中,Google 的每周每 Developer 的代碼變更中位數是 3 個,每周每 Reviewer 的 Review 中位數是 4 個。

建議三:找對人——合適的 Reviewer

誰適合 Review 你的代碼?選一個和被 Review 的代碼毫不相干的人肯定是不明智的。下面列出了一些潛在的候選人:

  • 如果你的組織有 Owner 機制,Owner 應該是合適人選
  • 和你工作在相同上下文的同事
  • 近期修改過相同代碼的同事
  • 比你更資深的程序員,希望得到他們的專業反饋

現在已經有一些工具,能夠根據上下文推薦 Reviewer,這也為選擇合適的 Reviewer 提供了便利。

建議四:快速響應

當每次 Review 的粒度不大,Review 又比較頻繁時,快速響應才能成為可能,也是必然的要求。在這個數據上,Google 的中位數是 4 小時。這個指標可以成為一個較好的參照。

建議五:使用現代工具

快速響應、高質量的 Review 離不開現代工具?,F代的 Review 工具能自動集成進工作流,高亮變化,甚至能自動匯總變更。這方面已經有許多現代的工具可以使用,還沒有選好工具的讀者,可以自行搜索。

建議六:考慮結對編程

當我們提到 “小批量、多批次、快速反饋” 的時候,如果有過結對編程經驗的同學,馬上就會反映過來,結對編程和 CR 何其相似。

結對編程,共同編程的兩位同學擁有完全相同的上下文,不存在上下文切換的煩惱,沒有缺乏時間的煩惱,不需要借助額外的工具,反饋隨時隨地。事實上,在我的眼中,結對編程才是最好的 Code Review。

建議七:綜合在線 Review 和線下 Review

在線 Review 應該是常態化的行為??紤]到 CR 的 “知識傳播” 價值,線下 Review 是有益的補充。有經驗的團隊,會周期或者不定期的組織線下 Review,這樣能獲得比在線 Review 更為廣泛的知識傳播面,也能引起更為熱烈的討論和辯論,有助于形成更高質量的共識。

數字化的指標

研發行為的全面數字化,帶來了一些有價值的數據洞察。如果工具支持,可以通過一些指標的觀測,持續推進 CR 活動。我們把一些建議的指標和數據總結如下:

從 Author 角度:

  • 單次評審的代碼行數 (主要指標)
  • 評審的頻度 (參考)

從 Reviewer 角度:

  • 響應時間
  • 評論數和拒絕率

從 Reviewer 的團體角度,還可以發現 Author-Reviewer 之間的社群關系,也是一種有價值地了解知識傳播的信息。

不要做什么:

避免用 CR 的數字化指標進行考核,即使動機良好。CR 的本質是文化建設,強烈建議僅僅把 CR 的指標用作提升指引,而不要用于和績效有關的評價,無論是前述的幾種指標,還是和 Review 的質量甚至是缺陷相關的數據。

實踐

你的組織的代碼質量和技術氛圍如何?你們正在實施代碼評審嗎?

  • 如果暫時還沒有,是否愿意做一些嘗試?
  • 如果已經在實施,既有的實踐是否達到了代碼評審的真正目標?

 

 

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2015-04-15 09:44:58

CodeReview程序員

2009-11-17 10:57:28

Win7網絡下載安全

2018-08-16 15:11:47

Code ReviewPPT代碼

2020-05-27 11:25:48

開發技能代碼

2015-11-17 16:11:07

Code Review

2022-10-27 10:33:48

敏捷開發開發

2013-10-24 09:43:58

代碼代碼審查

2012-07-05 09:45:02

代碼審查

2021-04-25 09:19:22

騰訊Code Reviewleader

2009-08-05 09:59:40

Code Review代碼審查工具

2021-08-09 06:57:41

CodeReview流程

2015-09-06 14:50:05

安卓app高效開發

2014-04-08 10:22:29

Android高效開發App

2017-12-13 13:23:39

數據庫MySQL優化

2012-09-03 13:41:50

Code Review

2017-07-20 13:11:46

Code ReviewPR評審

2014-04-15 13:16:00

Code Review

2022-06-23 09:57:01

code-revie前端代碼

2024-01-01 18:57:01

Code技巧符號

2021-08-08 14:26:24

SQL數據庫開發
點贊
收藏

51CTO技術棧公眾號

国产精品av免费观看| 欧美日韩视频第一区| 91精品国产综合久久男男| 91精品精品| 国产精品久久成人免费观看| 91在线免费播放| av男人的天堂在线| 好看的中文字幕在线播放| 亚洲大片在线观看| 在线成人免费观看| 国产在线自天天| 日韩欧美国产小视频| 日韩欧美中文在线观看| 国产精品二区三区四区| 成人的网站免费观看| 一二三在线视频社区| 日韩欧美久久久| 欧美jizz| 成人无遮挡免费网站视频在线观看| 性感少妇一区| 亚洲精品高清无码视频| 日韩精品视频三区| 亚洲春色在线视频| 疯狂做受xxxx高潮欧美日本| 欧美一级一片| 国产福利影院在线观看| 免费黄色一级网站| 久久久久久久久久久一区| 久久99国产精品二区高清软件| 欧美国产高跟鞋裸体秀xxxhd| 久久婷婷丁香| 2020国产在线| 中文字幕一区二区三区在线乱码 | av黄色在线| 成人美女视频在线观看18| 午夜伦理在线视频| 日本成人三级电影| 91chinesevideo永久地址| 欧美高清在线精品一区| 久久综合影院| 免费黄网站在线| 中国人体摄影一区二区三区| 欧美美女一区二区| 在线视频日韩| av电影在线观看完整版一区二区| 国产伦理精品不卡| 亚洲成人1234| 91精品1区| 欧美高清视频不卡网| 精品国产乱码久久久久久牛牛| 欧美日韩国产免费观看视频| 欧美成人官网二区| 在线视频中文字幕久| 一区二区成人在线| 最近的2019中文字幕免费一页| 亚洲精品国产setv| 国产一区不卡在线观看| 欧美精品在线一区二区三区| 热久久久久久久| 国产精品亚洲欧美一级在线| 亚洲综合欧美激情| 国产日产欧美a一级在线| 色哦色哦哦色天天综合| 大桥未久女教师av一区二区| 免费女人黄页| 一二三四区精品视频| 日韩精品一线二线三线| 午夜精品福利一区二区三区av| 欧美丰满少妇xxxx| 国产免费久久| 激情欧美一区二区三区中文字幕| 国产99久久久精品| 成人免费视频网址| 久久影院午夜片一区| h网站久久久| 天堂va蜜桃一区二区三区漫画版| 成人拍拍拍在线观看| 精品国产在天天线2019| 99精品美女视频在线观看热舞 | 九色91在线| 欧美有码在线观看视频| 极品少妇一区二区三区精品视频| 国产精品免费播放| 久久免费国产视频| 北条麻妃一区二区三区| 色在线视频网| 99久久精品免费| 伊人久久国产| 色呦呦在线看| 91精品国产沙发| 久久综合九色综合97_久久久| 天堂中文а√在线| 99久久精品免费看国产四区| 成人免费在线观看入口| 国产午夜久久av| 最新欧美日韩亚洲| 欧洲亚洲精品在线| 欧美午夜不卡| 色佬视频在线观看| 92国产精品久久久久首页| 亚洲精品欧美二区三区中文字幕| 97久久人人超碰caoprom欧美| 超薄丝袜一区二区| 91成人综合网| 亚洲精品久久在线| 一区二区三区欧美视频| 91久久午夜| 日韩国产大片| 中文av在线全新| 视频免费裸体网站| 精品国产青草久久久久福利| 亚洲第一福利专区| 一区二区三区我不卡| 99re热视频精品| 亚洲国产日韩欧美在线图片| 残酷重口调教一区二区| 亚洲国产精品三区| 国产日韩欧美在线观看| 欧美国产日韩二区| 亚洲电影免费观看高清完整版在线观看 | 久久 天天综合| 精品视频在线一区二区在线| 亚洲少妇久久久| 国产精品久久久久久久免费大片| 日韩在线观看免费av| 午夜影视日本亚洲欧洲精品| 国产视频一二三| 亚洲一区二区三区视频| 亚洲成av人乱码色午夜| 成人一区在线观看| 澳门精品久久国产| 久久久久久久| 日韩性xxx| 精品国产123区| 污视频网站在线看| 亚洲一区国产精品| 久久久久久久久久久av| 综合激情国产一区| 欧美电影免费观看高清| 免费视频一区二区三区在线观看| 日韩毛片在线免费看| www.好吊操| 日本久久精品一区二区| 羞羞小视频视频| 在线亚洲电影| 欧美大片免费高清观看| 最新亚洲精品| 在线综合欧美| 美女性感视频久久| 成人午夜在线播放| 中文字幕在线免费不卡| 1024国产精品| 国产欧美日产一区| 99视频在线精品国自产拍免费观看| 成人影视亚洲图片在线| 韩日精品一区| 黄色日韩网站| 日本综合视频| 亚洲va欧美va人人爽成人影院| 亚洲国产aⅴ精品一区二区三区| 伊人影院蕉久影院在线播放| 手机av免费在线| 91观看网站| 欧美久久一二三四区| 激情六月婷婷综合| 精品福利在线| 1769国产精品视频| 欧美日本久久| 老司机精品视频导航| 国产精品亚洲综合色区韩国| 欧美日韩有码| 一本一本久久a久久精品综合妖精| 麻豆精品视频在线| 蜜臀视频一区二区三区| 中文字幕久久一区| 中文av一区二区| 亚洲区综合中文字幕日日| 精品美女一区| 中文字幕高清在线观看| 18岁网站在线观看| 亚洲aⅴ男人的天堂在线观看| 亚洲欧美综合图区| 欧美色视频日本版| 国产午夜精品久久| 国产日韩精品视频一区二区三区 | 国产精品第2页| 精品伦理精品一区| 成人一级视频在线观看| 夜夜嗨一区二区三区| 亚洲国产中文在线二区三区免| 久草免费在线色站| 免费一级大片| 免费国产成人av| 久久久亚洲综合网站| 国产精品免费视频久久久| 亚洲欧美日韩中文在线制服| 日韩欧美在线不卡| 一区二区三区四区精品在线视频 | 日韩免费在线| 久久亚洲精品人成综合网|