写点什么

如何处理单个项目的多个代码版本

  • 2008-06-04
  • 本文字数:1227 字

    阅读完需:约 4 分钟

一旦产品发布了第一个版本,你的团队将面临下面的困境——如何在继续发布新版本的同时维护第一个版本。对于这个问题,Target Process 公司的 CEO 兼创始人 Michael Dubakov ,在“是否应该在项目中采用并行方式进行发布和迭代?”这篇文章中分享了他们的经验。

在Michael 的例子中,他打算对1.0 版本进行修复,继续1.5 版本的工作,并为2.0 版本开发新功能。同一个项目的工作应该由同一个团队来完成吗?在这样的团队中,是否该让某些开发人员发布2.0 版本,其他人从事1.5 版本的工作,并让Joe(具有牺牲精神的开发人员)挤出时间来修复1.0 版本的重要问题?Michael 得出的结论是:让浪费最小化,而且不在2.0 上进行开发。针对进行1.5 版本开发的程序员,我们减少了他们需要同时处理的任务,并尽量拖延作决定的时间(到2.0 版本开始的时候,一些现在看来2.0 所必备的功能可能已经不再需要了)。

根据 Steve Campbell 的经验,这个问题最好的解决方式是:将所有的任务(包括所有的版本)放置在单独的 Sprint Backlog 中。这样一来,任何一个团队成员都可以选取一个任务(不管是哪一个版本),然后开始工作。Steve 继续讨论了这种情况下的分支策略:要么不要任何分支(采用运行时切换机制来区分不同的版本),要么只在重新开发组件的时候再做分支。

来自 Eclipse 软件系统公司的 Matt Swaffer 采用的方法与之迥异。他的团队不发布补丁程序,实际上他们要保持主干的稳定,如果修复了 bug,他们会邀请用户下载最新的版本。另外,他们还会为每一个版本打上标记,一旦发生严重的 bug 可以回溯到原来的版本进行修复。他们的终极目标是每周发布新版本。

说到基于同一个代码库发布多个产品的问题,《 Implementation Patterns 》的作者 Kent Beck 谈到一个例子:他参与了两个项目,团队需要支持七个客户。除了核心逻辑之外,每个项目都有大量的自定义代码。其中一个项目为每个客户保留了独立的代码库,每当有新客户时,他们会克隆一个“最新鲜”的分支,并继续进行开发。正如 Kent 所指出的,这样一来,他们被合并所带来的工作量淹没了。而另外一个项目中,交付给每个用户的是单独的二进制文件,这种方式保证每个客户执行的都是自己需要的代码。Kent 认为这两个项目关键的不同之处在于:

关键在于找到方法推迟关联。我发现从一开始就要定好原则——我们将使用独立的代码库。这种方式减少了一些设计上的选择,但是仍然留有很大余地。还有另一个重要的原则,在第一个案例中我们不介意有一些重复的代码,如果能够明确如何消除重复代码,我们愿意这么做,但现在还没有,我们仍然希望能找到清晰的解决方案。

最后来自 N-BRAIN John A. De Goes 这样说:

分支是浪费的一种形式,我们的目标是消除分支。我们采用单独的代码库,只支持最近发布的一个版本,每次发布都强行推送给所有用户,并频繁发布(理想情况是,一次发布增加一个功能,或移除一个缺陷)。采用 SaaS 的方式实现起来会更简单。

查看英文原文: Handling Multiple Versions in a Single Project Team?

2008-06-04 21:041742
用户头像

发布了 479 篇内容, 共 171.4 次阅读, 收获喜欢 52 次。

关注

评论

发布
暂无评论
发现更多内容

Identity and Access Management

冯亮

DevOps security AWS Cloud

脑机接口照进现实:5位脑科学家带来的最新启示

脑极体

openEuler资源利用率提升之道 03:rubik混部引擎简介

openEuler

Linux 开源 cpu 操作系统 openEuler

每日算法刷题Day1-隐式转换与精度丢失

timerring

算法题 9月月更

深入了解之链接器与加载器

邱学喆

加载器 链接器 ELF文件结构

在家学习如何保持高度自律

大数据搬运工

学习方法

死锁检测实现

C++后台开发

后台开发 线程 多线程 死锁 C++开发

跟着卷卷龙一起学Camera--内存池浅析01

卷卷龙

ISP 9月月更

基于微服务的应用性能监控方案

穿过生命散发芬芳

9月月更 微服务监控

关爱2700多万听障者,手语服务助力无声交流

HarmonyOS SDK

手语

算法基础(四)| 前缀和算法及模板详解

timerring

算法 9月月更

探索AI技术应用场景

felix

产业落地 AI探索 API接口 模型管理

闲着刷题

吉师职业混子

9月月更

【编程基础】正则表达式基本使用及在Python中使用正则表达式匹配内容

迷彩

Python 正则表达式 9月月更

leetcode 669. Trim a Binary Search Tree 修剪二叉搜索树 (简单)

okokabcd

LeetCode 算法与数据结构

新书上市|听说你翻开数学书就眼睛疼?

图灵社区

数学 科普 教育

Javaweb核心之注解开发Servlet

楠羽

Servlet 笔记 9月月更

开发者有话说|一名普通大专学历开发者的成长

彭发红

工赋开发者社区 |【数智化】数字化工厂规划与建设方案

工赋开发者社区

NestOS应用案例:容器化部署OpenStack

openEuler

架构 openEuler 开源操作系统 OpenStack

清览题库--C语言程序设计第五版编程题解析(2)

吉师职业混子

9月月更

SQL是什么?它能做什么?

乌龟哥哥

9月月更

开发者有话说|如何写出更加优雅的代码

闫同学

个人成长

流程图布局在项目中的实践

相续心

【jvm】通过JDBC为例谈谈双亲委派模型的破坏

石臻臻的杂货铺

JVM 9月月更

如何在笔记本上安装openEuler 22.03 LTS

openEuler

开源 操作系统 openEuler 安装部署

新书上市|听说你翻开数学书就眼睛疼?

图灵教育

数学 科普 教育

2022-09-24:以下go语言代码输出什么?A:1;B:3;C:13;D:7。 package main import ( “fmt“ “io/ioutil“ “net/

福大大架构师每日一题

golang 福大大 选择题

面向深度神经网络的特定领域架构

俞凡

深度学习 架构 TPU

架构实战营-模块一作业

Geek_92ba6f

【云原生 | 从零开始学Kubernetes】七、Kubernetes的命名空间

泡泡

Docker 云计算 容器 云原生 9月月更

如何处理单个项目的多个代码版本_研发效能_Mark Levison_InfoQ精选文章