写点什么

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

  • 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:041938
用户头像

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

关注

评论

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

x-sheet 开发教程:初始化配置自定义布局

OpenHacker

Excel x-sheet sheet spreadsheet

GIS数据漫谈(五)— 地理坐标系统

ThingJS数字孪生引擎

带来高价值用户体验的低代码开发平台

力软低代码开发平台

C语言怎么学?这篇文章给你完整答案

图灵教育

C语言

2022年金三银四Java面试宝典,横扫春招+社招+秋招

程序员啊叶

Java 编程 程序员 架构 java面试

图的遍历的定义以及深度优先搜索和广度优先搜索(二)

乔乔

7月月更

详解分布式系统的幂等

焱融科技

分布式系统 存储 文件存储 幂等性

美团到餐“祖传数仓”标准化治理笔记

老猎人

人工智能发展到什么阶段了,产生“自主情感”可能吗?

燕陈华

人工智能 深度学习 卷积神经网络

面试好难啊!蚂蚁金服的六轮面试我是强撑过来!差点OUT(面试复盘)

程序知音

Java 阿里 程序员面试 BAT面试题 八股文

Spring Cloud 架构

Damon

7月月更

浅谈AI深度学习的模型训练和推理

GVision

写好技术原创文章的一点建议

Qunar技术沙龙

技术文章

施耐德电气、欧莱雅等企业巨头如何开放式创新?DEMO WORLD世界创新峰会揭秘

创业邦

1000个字带你一次性搞懂JavaAgent技术,反正我是彻底服了

程序员啊叶

Java 编程 程序员 架构 java面试

搞定RocketMQ这二十三点,大厂面试稳了

王小凡

Java 数据库 程序员 面试 大厂面试

【微信小程序】项目实战—抽签应用

flow

签约计划第三季

2022备战秋招10W字面试小抄pdf版,附操作系统、计算机网络面试题

程序员啊叶

Java 编程 程序员 架构 java面试

美团二面:为什么Redis会有哨兵?

王小凡

Java redis 编程 程序员 开发

兆骑科创海内外引进高层次人才,创新创业项目对接

兆骑科创凤阁

技术实践干货 | 初探大规模 GBDT 训练

观远数据

人工智能 机器学习

从存储角度看自动驾驶必经之路

焱融科技

人工智能 自动驾驶 存储 文件存储 分布式文件存储

4 轮拿下字节 Offer,面试题复盘

程序员啊叶

Java 编程 程序员 架构 java面试

选择体育场馆的LED显示屏时应该注重哪些方面

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家

细数国产接口协作平台的六把武器!

Liam

开发 Postman API 接口开发 前后端协作

收藏!0 基础开源数据可视化平台 FlyFish 大屏开发指南

云智慧AIOps社区

大前端 低代码 开源项目 数据可视化工具 开源推荐

Redis网红高频面试题三连:缓存穿透?缓存击穿?缓存雪崩?

程序员啊叶

Java 编程 程序员 架构 java面试

技术分享| 快对讲综合调度系统

anyRTC开发者

音视频 指挥调度 快对讲 语音对讲 视频对讲

建木持续集成平台v2.5.2发布

Jianmu

持续集成 低代码 CI/CD gitops

怎么会不喜欢呢,CI/CD中轻松发送邮件

Jianmu

持续集成 低代码 邮件 通知

低代码实现探索(四十五)业务参数

零道云-混合式低代码平台

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