Google 和腾讯为什么都采用主干开发模式?

389次阅读  |  发布于3年以前

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中小企业能参考什么?

中小企业应该选择特性分支开发模式,还是主干开发模式?根据上文,相信大家已经足以自行判断。

有些中小企业的技术决策者非常认可持续集成 / 持续交付的理念,从而更希望采用主干开发,但对于主干开发的缺点(或说弥补缺点的成本)存在顾虑。

对此,我有如下建议:

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8