2008-08-21 50 views
26

按照Jeff關於checking in often的文章,一些評論者無法抗拒「歡迎來到明顯的土地」!種類的評論。這是可以理解的,在大多數情況下,顯而易見的是,在完成某件事情之後立即辦理登機手續,然後繼續下一個功能即可。代碼審查與簽入經常?

但強制執行強制性代碼審查政治的地方呢?要求同事每30分鐘審查一次生產力是非常重要的。

我會對解決方案感興趣,或者至少可以讓我們在不削弱團隊工作效率的情況下做出妥協。

回答

24

取決於您使用哪個branching strategy。如果您的回購協議正在發佈分支,則主幹爲意味着會變得不穩定,但也許您的策略源於過去一些非常糟糕的體驗。如果你正在做功能分支,那麼你可以有一個規則,說沒有同行評審,沒有合併回到主幹。在同一時間做差異化應該是非常有效的,可以與同事一起審覈,並且應該消除瓶頸。

但改變你的分支策略是不小的事情。好問題...

5

如果配對程序如何?那麼理論就是不需要同行評議。對編程同行評論

1

我不知道你的問題有一個解決方案。對我來說,這聽起來像你的情況落入了敏捷運行的陣營。這聽起來像你的生產力已經癱瘓,如果你甚至不能檢查(例如)一個空檢查修復崩潰,而沒有人爲你看。

3

難道沒有代碼嗎?或者沒有代碼在中繼線沒有審查?我認爲使用分支(希望你是而不是使用VSS!)可能會工作:即只有中繼線更改需要同行評審。

1

這很愚蠢。即使您需要進行代碼審查,也並不意味着無法進行檢查。這就是源代碼控制的用處!特別是如果審查是瓶頸,配料是唯一的方法。

2

在大多數情況下,源代碼控制中的內容並不是即將發佈給客戶的內容。因此,我將在完整功能簽入後執行reviewS,以便稍後根據需要編輯和/或回滾。

3

並非所有的源代碼控制系統有利於這一點,但我一直在從事一個大項目時使用了這一過程:

  • 每個開發者得到他們自己的流。
  • 開發人員在完成代碼審查後,將完成的功能從其流中傳輸到父集成流。
  • 開發人員經常從集成流更新其流。

開發人員流的使用意味着開發人員可以保持可見並在系統中備份他們的工作。與其他人合作相對容易 - 他們可以檢查您的流。通過爲每個功能/缺陷創建一個新的開發者分支,您可以相當容易地隔離更改 - 例如,您需要停止使用新功能來修復緊急缺陷。

4

我的公司遵循不同部門之間的不同流程。其中一個(我最近離開的)採用了結對編程,並且評論中的檢查注意到代碼是「一對評論」。然而,正在開發的產品已經有些成熟,開發過程可以容忍生產力的下降。

我目前工作的部門在辦理登機手續之後,經常登機。我們正在開發一種工程師相對較少的新產品。我們每個人都通過電子郵件通知來監控登機手續,並在臨時的基礎上審查有趣的部分。儘管我目前的團隊經驗豐富,但我認爲,由於項目工程師的素質,我們可以在沒有正式評審的情況下脫身。

要回答你的問題,正如之前的海報建議,配對編程可能是最好的折中方案。就個人而言,我寧願讓一個優秀的團隊合作,讓他們儘快辦理入住手續。 (在我看來,「沒有審查的代碼庫中沒有代碼」是管理層試圖提高質量而不聘請質量工程師的,儘管如此,請儘管這樣做;我現在的僱主有點厭倦。 )

2

我更喜歡保留一個穩定的主幹和分支用於發佈,在生產後合併回主幹。標籤用於表示代碼準備情況,並且可以與代碼審閱策略配對。 SIT/UAT的發佈會獲得自己的特殊標籤。

在球隊我目前是我們只有3人寫作的一部分,所以同行評論是不斷和殘酷的娛樂,教育,&誠實。我不是那種情緒上依賴於我寫的代碼的人,所以我喜歡一個很好的評論。我在很短的時間內從他們那裏學到了很多東西。這就是說,他們不是必需的;它們有機地發生。

如果需要同行評審,則沒有理由暫停簽入。只需製作一個標籤,表明已經進行了評審,並使評審員有責任在評審通過後將該標籤應用於代碼。

0

我們做這樣一旦你完成與你做一個代碼審查,然後在檢查一個故事任務的故事層面(這裏敏捷店)代碼審查。

3

一些版本控制系統使這個容易(那些分散的戰略)。我已經嘗試使用幾個作爲本地中間層到公司顛覆服務器。

我已經使用svk來維護我可以經常提交的本地Subversion存儲庫,然後將更改(單獨或作爲單個合併提交)推送到父存儲庫。

svk mirror 
svk pull 
svk push 

這工作得很好,但svk上的開發似乎是零星的。

我開始嘗試使用git來做同樣的事情。我已經制作了一個本地克隆,但還沒有足夠的勇氣嘗試推動本地提交。我相信這是可能的。

git svn clone 
git svn fetch 
git svn dcommit 

有了這個私人的,本地資源庫,你可以提交你喜歡的,然後捆綁或摘櫻桃的變化推到主存儲庫。 (或創建一個可以進行同行評審的補丁。)

這兩個世界最好嗎?這些替代版本控制工具不太可能在工作中獲得牽引力,但對於本地提交或在工作存儲庫無法訪問時能夠提交(我處於脫機狀態,旅行等),它們仍然非常有用與父存儲庫同步。

0

有很多很好的答案。大多數人傾向於爲每個需要審查合併到主幹的開發者提出一個功能分支。但是,這將源控制減少爲備份技術,而不是使幾個程序員之間的代碼在寫入時幾乎可以輕鬆共享。

正如flubba提到的,最好的解決方案可能需要將分支策略改爲最適合團隊,但我擔心我們公司的慣性如此之強,這將需要我花費大量的影響力點,可能沒有成功。

我會盡我所能。

11

試圖總結答案,這是可能的:

  1. 使用適當branching strategy任何SVC:

    • 箱的個人分支
    • 簽入常
    • 檢查所有更改
    • 將所有審查過的代碼合併回主幹 (見t他example

    優點:SVC中性

    雞眼: 合併可以在某些SVC實現痛苦(Linus Torwald's opinion) 個人分支的很好的概述,應與主幹同步變化

    • 使用SVC具體方法:
    • 分佈式SVC

      • 創建本地副本「開發分支」
      • 簽入常到本地回購
      • 暴露在公衆(審查)功能完善的變更
      • 合併審查,以遠程倉庫

      利弊的變化:甚至離線的SVC的好處,規模很好。

      雞眼:巨大的學習曲線,如果不在日常基礎上使用,容易忘記一些命令行的東西。

    • 集中SVC與適當的「標籤」功能 看到這個discussionoverview - 可能需要一些澄清

順便說一句,我們不應該考慮進行彙總回答所有的時間? tnx。

2

@Coincoin:我不同意個別分支機構將源控制權降低到備份技術。我認爲備份的使用源代碼控制的原因之一,但沒有從源代碼控制更多的價值在一個單獨的分支:

  • 即使我可以做小的步驟,仔細記錄它們,因爲我去,他們對於黃金時段還沒有準備好。
  • 瞭解我們如何到達這裏是可能的,特別是當步驟非常小時。
  • 查看共享分支的更改,您可以看到大的步驟,然後深入到單個分支以獲取到那裏的小步驟。

儘管如此,「如果沒有提交,它不存在」的規則仍然存在,並且更普遍:「如果它沒有提交/合併到共享分支,則它不存在」。

我的確同意那些認爲簽入常常是一種很好的做法,而這種結對編程是消除代碼評論延遲的解決方案。