2月5-7日QCon全球软件开发大会携手100+位大咖讲师落定北京,点击查看完整日程>> 了解详情
写点什么

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

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

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

关注

评论

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

ST 端侧人工智能之视觉检测课程

贾献华

7月月更

开发实践丨昇腾CANN的推理应用开发体验

华为云开发者联盟

Python 人工智能

灵雀云加入LF机密计算联盟,推进机密计算在云原生场景的应用

York

灵雀云 云原生 机密计算

在线SQL转JSON工具

入门小站

工具

SpringBoot的SpringBootApplication注解

技术小生

springboot 7月月更

线性回归算法之鸢尾花特征分类【机器学习】

上进小菜猪

机器学习 机器学习算法 7月月更

混合办公-疫情之下,远程办公靠谱吗?

WorkPlus

自定义spring boot starter三部曲之二:实战开发

程序员欣宸

Java springboot 7月月更

SAP Fiori 应用 Adapt UI 动态显示或者隐藏的技术设计细节解析

Jerry Wang

JavaScript 前端开发 web开发 SAP 7月月更

【开课预告】7~9月学习课程《基于MASA Framework的EShop实战》

MASA技术团队

WorkPlus SE | 全国第1个永久免费的即时通讯软件!

WorkPlus

大模型训练难于上青天?效率超群、易用的“李白”模型库来了

OneFlow

机器学习 gpu 模型训练

web前端开发技术前景怎么样好不好

小谷哥

SENSORO智慧社区服务方案:抓住基层治理的“神经末梢”

SENSORO 升哲科技

物联网

KubeEdge Summit 2022首日亮点 | 全球产学研齐聚一堂,共话边缘新未来

华为云原生团队

云原生 边缘计算 kubeedge 边缘AI IOT设备管理

如何深入学习Html5前端技术知识

小谷哥

Optional的使用详解

echoes

Free自由协议系统Dapp开发(锁仓复利)

薇電13242772558

智能合约 dapp

微信业务架构图&“学生管理系统”毕设架构设计

gump

架构实战营

究竟谁更需要已读功能?用户还是即时通讯本身?

WorkPlus

leetcode 435. Non-overlapping Intervals 无重叠区间(中等)

okokabcd

LeetCode 数据结构与算法 贪心算法

「势说新语」浅谈软件许可证

安势信息

开源 软件 许可证 开源软件 开源软件供应链

自动化测试如何实施落地?

老张

软件测试 自动化测试 项目落地

2022年智能运维企业50强,博睿数据实力入选

博睿数据

数字化 智能运维 博睿数据 性能监测

9款最佳项目组合管理工具

PingCode

项目管理 项目组合管理

# 重要-即时通讯IM开源项目OpenIM关于版本管理及v2.3.0发布计划

Geek_1ef48b

移动互联网未来发展的五大趋势

WorkPlus

C 语言入门(五)

逝缘~

7月月更

linux远程复制文件命令小总结

入门小站

在线多行文本批量正则替换添加后缀工具

入门小站

工具

实践丨手把手教你用STM32设计WiFi语音播报日程表

华为云开发者联盟

开发

如何处理单个项目的多个代码版本_敏捷_Mark Levison_InfoQ精选文章