2008-09-26 24 views
15

我想更好地理解可以工作的模式以及不適用於成功代碼審查的模式。你的代碼評論涉及什麼和哪些模式是成功的?

  1. 如果有一個差別是一個正式的代碼審查和非正式代碼審查?

  2. 人們在做什麼級別的代碼審查文檔?

  3. 如果沒有代碼參與者的作者,代碼評審能夠有用嗎?

回答

4

我不認爲應該有正式和非正式的,因爲有不同類型的時間允許代碼審查。如果有一個錯誤需要儘快解決,並且代碼更改只是幾行代碼,則可能仍會進行審覈,但可能與採用新的ERP或CRM系統的方式不同。此外,在某些情況下可能需要花費數小時來查看某些代碼,而在其他情況下,應該花費不到5分鐘的時間。

的文檔可以在幾個形式。它可能只是一封電子郵件,稱Joe對Bob的工作進行了審查,並且已批准這項工作進入下一階段發佈。或者,在推廣代碼之前,可能需要幾頁關於更改內容的註釋,以便使用某些設計模式,並將代碼從其最初的快速和骯髒的表單中清除。

至於最後一個問題,我想答案是有時。如果你有,你想如何優化的代碼,那麼不必筆者參加可能在獲得幫助的想法,然後有筆者要麼作出改變或解釋爲何更改不會改善其他人的意見的一些代碼代碼,例如如果有人想加入冒泡排序算法,這可能會被拒絕,因爲其他更有效的排序算法,如quicksort,mergesort和heapsort。

編輯,以添加一對夫婦的模式,我發現有用: 對於bug修復代碼審查,我最喜歡的模式是: 1)顯示的bug在測試/臨時環境,這樣我可以看到什麼出錯。 2)告訴我代碼被更改的位置,以及爲什麼以這種方式更改代碼的簡要說明。 3)告訴我代碼在本地機器上是固定的。

相反,如果一個實現與十多位方法的API,然後它可能是最好有一些文檔,總結什麼是在實現中使用,爲什麼一些選擇進行了改造,例如使用什麼樣的列表實現,如數組,哈希表,鏈表,通用列表,堆棧,隊列等。

1

首先看看Fagan inspections的概念。

這種方法真的有助於審查代碼的質量,而審查本身實際上!

永遠記得批評代碼而不是編碼器。

+0

您可以添加一個鏈接到Fagan概念。 – lillq 2008-09-26 16:40:55

1

使用Eclipse Jupiter plugin並遵循它自動化的過程對我們來說工作得非常好。這不是太侵入或官僚主義,但它仍然真的有助於發現錯誤和設計問題。

7

我所做過的最好的代碼評論涉及到一個名爲Smartbear的代碼協作者的工具。 作者將代碼上傳到服務器。審稿人和觀察員可以看到新代碼和舊代碼之間的差異,並對新代碼發表評論。 這裏是最好的做法:

  1. 書面給一個線索從哪裏開始審閱代碼作者的意見。
  2. 評論者評論並添加需要在接受評論前修復的缺陷。只有重要的事情應該被標記爲缺陷。沒有錯別字或你知道開發人員在提交之前修復的東西。
  3. 將新開發人員作爲觀察員參與。這是讓他們熟悉項目的良好培訓。
  4. 在這段代碼中包含「專家」,作爲觀察者或審閱者。

反模式:

  1. 使用代碼檢查工具的設計審查工具。這不適合。只能查看已經就設計達成一致的代碼。
  2. 涉及太多審閱者和觀察者
  3. 讓審查在系統中逗留超過幾天。
+0

我也是這個工具的忠實粉絲。以異步方式對代碼進行內聯評論可以發現絕大多數問題。這使得開發人員更願意進行桌面檢查,並且對於那些不明顯的比特進行人身穿行。 – 2008-09-26 16:50:43

6

我覺得是好的代碼審查的關鍵模式是的時間和動機,真正閱讀和理解的代碼評審有程序員。只給予代碼粗略觀察並指出一些代碼樣式更改的審閱者並不真正參與該過程。

2
  • 定期和頻繁地安排審查或檢查 。 回顧/檢查整個模塊時 新,和delta +周圍 代碼進行維護。建立積壓的待審覈內容使整個過程變得恐怖。

  • 每個人的代碼被審查,從 最初級到最高級, 和未經指責的恐懼 評論。

  • 不要只審查/檢查代碼;在測試(特別是TDD)和 測試結果看 。我們檢測 通過發現一些有趣的bug和測試 遺漏什麼 我們認爲我們的測試是不是真的 什麼正在測試,或 ,我們就會在不經意間使用的測試來自同一個等價類 時 數據我們認爲我們正在使用不同種類的數據。

2

我的公司,智能熊使代碼合作者(如David Segonds所述)。我們還贈送了一本名爲Best Kept Secrets of Peer Code Review的免費書。我們從與客戶合作以及查看其他文獻中獲得了一些良好的最佳實踐。

這裏有幾點:

  • 保持代碼審查小。一次編寫的代碼太多了,因此如果您的評論代碼太多,請以更小的代碼塊進行更頻繁的查看。
  • 讓所有人蔘與,但不是一次全部參與。代碼審查是每個人都可以學習的機會,審稿人和作者都是如此。
  • 請記住,這是關於代碼,而不是關於作者。