1. 程式人生 > >乾貨|如何做有效的程式碼走查

乾貨|如何做有效的程式碼走查

點選上方“中興開發者社群”,關注我們

每天讀一篇一線開發者原創好文640?wx_fmt=png&wxfrom=5&wx_lazy=1

▍作者簡介

丁一:無線研究院敏捷教練,技術愛好者,喜歡閱讀和分享,致力於讓敏捷管理實踐和技術實踐在團隊中更好的落地。

程式碼走查,英文詞語叫:Code Review,也叫“程式碼審查”,它是我們公司的一項傳統保留專案。記得一位工作超過20年的老員工說過:“我加入中興的時候就有程式碼走查了。”,可見這項實踐的悠久歷史。

1.程式碼走查的形式

程式碼走查的形式有很多種,主要有以下幾種形式:

  •  每日走查:只針對每日提交的內容進行評審,走查時間和地點都比較靈活。

  • 專項走查:針對某個具體問題或者專題進行走查。評審人需要提前傳送評審內容給大家進行預審,然後安排專門的會議室進行評審,時間較長。

  •  結對互查:提交程式碼前指定某位同事進行線上評審,評審通過後才能合入程式碼。

本文要介紹的是每日程式碼走查,就是大家圍在一臺開發機周圍,逐一輪換講解所有提交的內容。

就即使是每日程式碼走查,也被我們團隊玩出了花樣:

  • 談心式走查

640?wx_fmt=png&wxfrom=5&wx_lazy=1

  • 批判式走查

640?wx_fmt=png&wxfrom=5&wx_lazy=1

  • 半蹲式走查

0?wx_fmt=png

  • 伴侶式走查

0?wx_fmt=png

2.程式碼走查的好處

持續、有效的開展程式碼走查,將會收穫許多收益,具體表現在:

  • 能及時發現程式碼中的Bug,保證版本質量。

  • 提升程式碼的可讀性、可維護性,建立團隊共同的編碼風格。

  • 有利於知識共享,打破技能壁壘,避免單點故障。

  • 通過展示自己的優秀程式碼和設計思路,提升了個人成就感。

  • 通過講解自己的程式碼,對個人溝通能力也是一種提升。特別是對於平時比較內向或者不太喜歡發言的同學。

  • 給大家提供了一個每天交流、溝通的平臺。工作一天了,也挺累的了,是時候停下手工的編碼工作,一起說說話,交流一下了。

3.程式碼走查中的“壞味道”

雖然程式碼走查有這麼多好處,可在實施的過程中並不會像想象中的那麼美好,會遇到各種各樣的問題,總結起來的“壞味道”有:

  • 開發的時間本來就不多,再加上程式碼走查,會打亂開發節奏。

  • 評審的同事對程式碼不熟悉,發現不了問題。

  • 討論發散或者糾纏在某個具體細節中,導致時間把控不好。

  • 評審量大。只能走查部分同事的程式碼,其他同事的內容沒有覆蓋。

  • 提問題的總是那幾個人,其他人都是圍觀群眾。

4.如何做有效的程式碼走查

雖然程式碼走查很多團隊都在做,但要想真正做好它並不是件容易的事情。我們團隊經過長期實踐,摸索出一些經驗和大家分享:

4.1程式碼走查的時間

程式碼走查建議在固定時間舉行,當團隊養成習慣後,就會很自然成為團隊日常工作的一部分。以我們團隊為例,走查時間安排在:

  • 每天下午16:30--17:30;

  • 第二天上午9:00--9:30。

分兩塊時間走查是考慮一次走查的內容會很多,有些內容可能走查不完,就分兩次進行。如果當天下午能把全部過完,第二天上午就再進行走查活動。   

另外,在實踐的過程中,如果有同事反饋程式碼正寫在“興頭”上或者正在定位緊急故障,可以申請延緩或者不參加本次走查活動。

4.2程式碼走查的內容

我們團隊的走查內容已經超越了程式碼本身,還會涉及方案審查、演示等活動。

具體評審內容為;

  • 新增程式碼:bug修改,新特性或重構引入的程式碼變更。

  • 設計方案:一般為增量式方案評審。

  • Mini showcase:針對每日實現的功能進行展示。

4.3程式碼走查的關注點

靜態編碼問題

主要關注靜態編碼錯誤、程式設計風格、命名合理性、Clean Code等內容。

雖然這部分檢查項也有有意義,但完全可以在合入程式碼時,通過靜態檢查工具(比如Findbugs,PMD等)消除掉。還是要儘量留給團隊成員走查業務或者設計等問題。

功能問題

程式碼的行為是否與預期一致,其邏輯是否是正確無誤?

設計問題

針對現有的設計提出不同的思路,多問問為什麼這麼做,有沒有更有效的方法,這樣通過集思廣益可以提供更加優良的設計方法。

測試問題

測試用例是否完備?

測試用例實現是否有效?

效能問題

新增功能或者修改功能是否對已有效能測試結果有不良影響?

安全問題

開源軟體協議風險

是否有安全漏洞

4.4角色

程式碼走查中的角色需要從不同的維度考慮。

從業務角色考慮:

業務角色儘量完備:至少包括BA、Dev、QA等角色。特別是BA,無論再忙,還是要參加到團隊的走查活動中,從設計層面上保證實現沒有走偏,也能從開發人員那裡獲取最新的問題反饋,從而及時對方案進行修改。

切記:程式碼走查不只是開發人員的事情!需要多種角色同時參與,因為走查活動不僅僅要看功能是否實現了,還要看程式碼和設計是否一致?測試用例是否完備和有效?

從走查活動的角色考慮:

  一般包括如下角色:

角色

職責

主持人

負責主持整個走查活動,控制時間和進度。

講解人

負責對走查的程式碼進行講解。

評審人

負責對走查程式碼提出問題

記錄人

負責對發現的問題進行記錄

觀眾

參與但不發表意見

這裡要提的一個關鍵角色是主持人,

我們團隊之前走查程式碼是沒有主持人的,走查時經常出現討論發散、時間控制不好的情況。

在回顧會上,大家針對這個問題做了討論,最後選舉了一位值得信賴的女主持人。

有了主持人之後,情況果然有了很大改善。一旦發現討論發散、時間過長的情況,主持人會及時喊停,把大家拉回到正確的節奏上。

主持人要求有敏銳的洞察力,良好的大局觀,並且有一定的影響力,最好由團隊選舉產生,可以是SM,也可以不是。

0?wx_fmt=png

(找找女主持人在哪裡?)

4.5走查過程

4.5.1走查前

  • 每個人介紹下要今天走查的內容和預計時間,便於主持人做好規劃。

  • 優先走查自己認為風險較大的地方。

4.5.2走查中

講解人先介紹業務背景和程式碼關鍵流程,

避免一上來就講程式碼,這種方式跳躍性比較強。只有對這部分程式碼非常熟悉的同事才能發現問題,而那些第一次接觸的同事很難做到這一點,於是很快就會失去走查的興趣。     

一次走查的程式碼儘量少。

走查的程式碼行數控制在200--400行。

在審查大的修改時,不僅要看很多行程式碼,還要檢視大量的依賴程式碼才能理解。

將待審查的程式碼隔離為小的修改可以降低審查者的精神負擔並讓審查過程更加順暢。

程式碼走查一頁紙規範

很多團隊都制定了程式碼走查一頁紙規範,比如資源使用完要釋放,多執行緒併發問題等。有了走查清單後,便於團隊快速識別問題,提高走查效率。

記錄發現的問題

對於程式碼中發現的問題,可以由記錄員記錄到文件中。而我們團隊的做法是讓講解人直接在程式碼中以to-do的方式進行標記。

4.5.3走查後

對於走查中記錄的問題或者程式碼中標示為“todo”的條目進行修改,然後在下次走查時檢查是否修改完成。

4.6溝通

在程式碼走查時,有時會看到為了爭一個問題,雙方搞的面紅耳赤。在我們強調良性對抗的同時,也要儘量避免由於溝通問題導致的不必要衝突。

前面也提到過,程式碼走查問題的本質是一個溝通問題。所以這裡要提一下程式碼走查中的溝通技巧:

對於評審人

1.避免出現“你為什麼”,“你為什麼不”這樣的問題。

它會使人對立,“為什麼把它宣告為全域性變數?”可以更好地表達為“我不明白為什麼這裡用一個全域性變數”。

2.不要提出可能聽起來帶指責的要求或言論。

例如:“你沒有遵循標準XYZ”,更好的方式是:“你對標準 XYZ 有什麼看法,它是否適用於這裡?”。

3.不要吝嗇自己的讚揚。

當發現有好的程式碼實現或者設計思路時,請及時給與表揚。

對於講解人

保持好心態,別人是針對程式碼提問題,而不是針對人。

 640?wx_fmt=jpeg

相關推薦

Java程式碼審查規範總結

  按照我的經驗,一般來說,從命名,註釋,宣告,語句/功能分佈/規模,可靠性(總則/變數和語句/函式),可靠性(函式),程式碼警告,可讀性,圈複雜度,SQL規範性和優化效能等如下方面稽核: 分類 重要性 檢查項 具體要求

軟體質量保障之程式碼 | 併發程式設計網

目的 程式碼走查有幾個目的,第一個是讓新同學快速熟悉程式碼並瞭解系統。第二個是做諮詢防控的事前檢查,避免引發線上故障。第三個是通過一起討論和審查,加強團隊程式碼閱讀和編寫能力,讓大家編寫出優秀的程式碼。程式碼走查的優點非常多,但是最核心的還是提前發現問題並解決問題。 所以基於以上目的,程式碼走

乾貨這些Python程式碼技巧,你肯定還不知道

Python 是世界上最流行、熱門的程式語言之一,原因很多,比如: 易於學習 超高的通用性 具備大量模組和庫 本文將分享一些使用 Python 的技巧,順序按照 A-Z 排列。 進群進群:700341555可以獲取Python各類入門學習資料! 這是我的微信公眾號【Python程式設計之

程式碼工具FindBugs, PMD,CheckStyle

Eclipse安裝findBugs外掛 在Eclipse中點選Help-Install New SoftWare,輸入下面網址新增: http://findbugs.cs.umd.edu/eclipse 裡面列出了所有bug匹配項 Eclipse中安裝PMD外掛 在

程式碼工具jupiter的安裝使用

1 1.1 簡介 Jupiter是一個管理程式碼走查中bug的外掛,類似mantis中對bug的管理。不同的是mantis管理的是黑盒測試中的bug,Jupiter管理的是白盒測試中的bug。Jupiter並不負責查詢bug,只是管理bug。走查人員建立走查任務,發現bu

一個典型的程式碼檢查單

程式碼走查的最主要的目的是為了發現程式中的邏輯錯誤,程式設計風格方面的錯誤可以通過風格檢查的工具去檢查。如下的檢查單給程式碼走查的專家發現邏輯錯誤提供了一個很好的幫助。 序號 檢查項 1 程式碼的註釋與程式碼是否一致?註釋是否是多餘的? 2 是否存在超過

程式碼工具篇SytleCop的規則總結與翻譯

    SourceAnalysis (StyleCop)的終極目標是讓所有人都能寫出優雅和一致的程式碼,因此這些程式碼具有很高的可讀性。 早就聽說了微軟內部的靜態程式碼檢查和程式碼強制格式美化工具 StyleCop , 2008-05-23微軟在 MSDN Code Gallery 釋出了 4.2 版本

【顆粒歸倉】(四)程式碼--StyleCop所有規範的翻譯準則

       從網上找StyleCop官網準則的翻譯好費心,功夫不負有心人,終於找到了完整版(還是在壓縮檔案中),分享給同學們來學習,其中有我自己的標註(紅色字型),和網友們一起學習、提高。                                         

第三章《程式碼檢查、與評審》筆記與心得

                                                                          程式碼檢查心得        程式碼檢查主要分為8類。以下為閱讀筆記和心得。        紫色字型為暫不理解的問題。 一

乾貨使用Keras和CNN構建分類器(內含程式碼和講解)

摘要: 為了讓文章不那麼枯燥,我構建了一個精靈圖鑑資料集(Pokedex)這都是一些受歡迎的精靈圖。我們在已經準備好的影象資料集上,使用Keras庫訓練一個卷積神經網路(CNN)。為了讓文章不那麼枯燥,

測試人員代碼基礎要點

異常 業務邏輯 類型 找到 錯誤 都沒有 發生 數據庫連接 有效 測試人員代碼走查基礎要點  代碼走查,是測試人員了解代碼邏輯,進行測試設計的重要環節。並且有很多bug並非需要到運行程序進行測試才能發現。通過合理的代碼走查方法能提前發現相當多的BUG。除常見的業務邏輯與程序

如何渡過中年危機(四條路:1.專註本業,強 2.架構 / 管理路線 3.轉行到關聯行業 4.創業開個公司,最考驗綜合能力。提前做好自己的職業規劃)

jvm 閱讀 團隊 log 應用 銷售 擔心 獨立 投資 閱讀目錄 一、程序員能靠技術渡過中年危機嗎? 1.https://news.cnblogs.com/n/609217/ 返回頂部 程序員能靠技術渡過中年危機嗎? ht

四步智慧硬體異常Case

此文已由作者於真真授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。  相比於軟體,智慧硬體產品由於涉及硬體和軟體兩個端的狀態,其異常case要更加錯綜複雜。由於硬體產品的迭代更新較慢,一旦帶著問題上線要比軟體麻煩的多,輕則導致操作上的困惑,重則導致產品無法使用,因此設計師必

四步智能硬件異常Case

軟硬件 點擊 iyu 踩坑 無法 梳理 文案 一份 .cn 此文已由作者於真真授權網易雲社區發布。歡迎訪問網易雲社區,了解更多網易技術產品運營經驗。 相比於軟件,智能硬件產品由於涉及硬件和軟件兩個端的狀態,其異常case要更加錯綜復雜。由於硬件產品的叠代更新較慢,一旦帶著問

乾貨Word、PPT、TXT檔案快速轉換Excel格式,轉換全技巧!

在日常工作中各種檔案格式之間的相互轉換十分頻繁,但一直都有人對此一知半解,那麼今天就讓小編為大家詳細講解一下,PPT、Word、TXT檔案如何轉換為Excel檔案格式。 一、Word轉Excel Word檔案轉換Excel,方法十分簡單,具體方法有兩種。 1、複製貼上 步驟:選中Word文

閒來無事,程式碼雨屏保

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="css/ok.