Google 和騰訊爲什麼都採用主幹開發模式?

1 摘要

本文介紹了兩種常用的代碼分支模式:特性分支開發模式、主幹開發模式,分別闡述了其優缺點和適用環境;同時剖析了 Google 和騰訊採用主幹開發模式的背景和決策因素,捎帶分享了這 2 個巨頭的實踐,供讀者在技術選型中參考。

2 背景

按之前的寫作思路,本文應該叫《Google 工程效能三板斧之三:主幹開發》,但我改變了主意,希望能同時提供國內互聯網公司的實踐,供讀者參考,因此文章標題也隨之更改。

軟件開發過程中,開發人員通過版本管理工具對源碼進行存儲,追蹤目錄和文件的修改歷史。爲了區隔不同狀態的源代碼,會採用分支進行管理。不同的軟件開發模式,對應着不同的分支模式。

軟件業界常用的軟件分支模式有多種,但本質上可以分爲兩類:

3 兩種模式的定義及優缺點分析

特性分支開發模式

特性分支開發模式是指爲一個或多個特定的需求 / 缺陷 / 任務創建代碼分支(branch),在其上完成相應的開發(一般經過增量測試)後,把它合併(merge)到主幹 / 集成分支的開發模式。

通常這種分支生命期會持續一段時間,從幾天到幾周不等,極少數情況甚至以月算。

特性分支開發模式中常用的有 Git-Flow 模式、Github-Flow 模式和 Gitlab-Flow 模式等。這些模式只有細節上的差異,以 Git-Flow 爲例:

 優點:

 缺點:

 適用環境:

主幹開發模式

主幹開發,是指開發人員直接向主幹(習慣上主幹分支通常爲:trunk 或 master)提交 / 推送代碼。通常,開發團隊的成員 1 天至少 1 次地將代碼提交到主幹分支。在到達發佈條件時,從主幹拉出發佈分支(通常爲 release),用於發佈。若發現缺陷,直接在主幹上修復,並根據需要 cherry pick 到對應版本的發佈分支。

 流程:

 優點:

 缺點:

 適用環境:

4 爲什麼 Google 和騰訊採用主幹開發模式

互聯網巨頭 Google 大部分業務開發都採用主幹開發模式,國內巨頭騰訊也在推行主幹開發(試點業務團隊大部分已經採用)。

他們採用主幹開發的原因在於對主幹開發的優點有強烈訴求,而且有能力和資源彌補其缺點:

主幹開發的最大優點是:效率和質量,而這 2 者是軟件和互聯網企業的核心訴求。主幹開發的缺點,巨頭有能力和資源來填平這些坑。

因此,從 ROI(Ratio of Investment)的角度來看,Google 和騰訊採用主幹開發實屬必然。

5 美中兩巨頭的實踐

Google 在主幹開發的實踐

我們在之前的文章提到,Google 的工程效能(也叫研發效能)核心理念只有簡單的 3 條:

  1. 使用單體代碼倉庫(參考:Google 工程效能三板斧之一:單體代碼倉庫)

  2. 使用 Bazel 構建(參考:Google 工程效能三板斧之二:使用 Bazel 構建)

  3. 主幹開發;

其中的第 3 條,就是本文所述內容。

爲了保證主幹代碼的質量,避免出現工程師合入到主幹的代碼 break 掉主幹的情況,Google 採取了以下實踐:

騰訊在主幹開發的實踐

騰訊某 BG 在 2018 年開始的 “930 變革” 後,在各試點團隊推動主幹開發(注:並未全公司普遍採用),具體的舉措包括:

  1. 以度量牽引:通過對特性分支)的生命期監控和預警,實現非主幹分支的生命期縮短,倒逼開發團隊採用主幹開發;

  2. 投大力氣統一 BG 內的持續集成工具、開發自動化測試平臺;

  3. 制定了 7 大編程語言的編碼規範,並自研代碼靜態掃描工具;

  4. 並參考 Google 推行代碼可讀性(Readability)、可測試性(Testability)認證制度;

  5. 強力推行 CR (代碼評審)制度,確保代碼的可讀性(命名、代碼風格、設計、複雜度)。

 效果:

6 中小企業能參考什麼?

中小企業應該選擇特性分支開發模式,還是主幹開發模式?根據上文,相信大家已經足以自行判斷。

有些中小企業的技術決策者非常認可持續集成 / 持續交付的理念,從而更希望採用主幹開發,但對於主幹開發的缺點(或說彌補缺點的成本)存在顧慮。

對此,我有如下建議:

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/RWDuzT87LlJvj6P_JEjvGQ