写点什么

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

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

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

关注

评论

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

p3c 插件,是怎么检查出你那屎山的代码?

小傅哥

小傅哥 代码规范 p3m pmd 开发手册

带你读论文丨基于视觉匹配的自适应文本识别

华为云开发者联盟

损失函数 视觉 文本识别 文档识别 视觉匹配

Elasticsearch IK 分词扩展词典(qbit)

qbit

elastic 扩展词 分词

高并发场景下的会话服务数据读写设计思路(附具体实施方案)

融云 RongCloud

数据库 缓存 即时通讯 IM 低时延

大厂面试喜欢考算法,该怎么破?

博文视点Broadview

天壤完成新一轮战略融资 加速构建数字化转型通用智能平台

InfoQ 天津

低代码平台的功能及其用处

低代码小观

程序员 低代码 开发工具 低代码开发平台 无代码

搞一下CP AUTOSAR 入门 | 01 CP AUTOSAR Overview

SOA开发者

什么是低代码自动化以及它如何使你受益?

低代码小观

程序员 自动化 工具 低代码 低代码开发平台

MPU:鸿蒙轻内核的任务栈的溢出检察官

华为云开发者联盟

鸿蒙 内核 任务栈 MPU 内存保护单元

深入理解Netty-从偶现宕机看Netty流量控制

vivo互联网技术

Java、 框架 netty

最新!Apache APISIX 通过中国信通院 “可信开源项目” 认证

API7.ai 技术团队

Apache 开源社区 api 网关 APISIX 信通院

密码学系列之:1Password的加密基础PBKDF2

程序那些事

算法 加密解密 密码学 程序那些事

maven如何忽略指定的远程仓库

小江

maven nexus 迁移 java;

2021年9月数据库流行度排行解读:聊聊国产数据库可以从哪方面做到以用户为中心

墨天轮

数据库 TiDB oceanbase 国产数据库 达梦

共生、互生、再生——英特尔与合作伙伴携手共建未来城市数字新基建

科技新消息

一文带你了解经典的Java垃圾回收机制

华为云开发者联盟

Java JVM 对象 垃圾回收机制 垃圾收集器

卷王本卷

FunTester

内卷 FunTester

百度信息流和搜索业务中的KV存储实践

百度Geek说

后端 搜索

星环ArgoDB+英特尔第三代至强=分布式闪存数据库“蜕变”

星环科技

数据库

OceanBase 源码解读(五):租户的一生

OceanBase 数据库

数据开发 oceanbase OceanBase 开源 OceanBase 社区版 OceanBase 数据库大赛

「可视化助力」,医疗进步无限可能

ThingJS数字孪生引擎

大前端 物联网 可视化

2B 销售系统设计需要考虑的 3 个层面

boshi

团队管理 销售管理

2021 DEMO CHINA创新中国总决赛峰会闭幕,光子晶体斩获2021 DEMO GOD

创业邦

做等保测评找哪家公司好?怎么选择?

行云管家

网络安全 等级保护 等保测评

华为云顾炯炯:云原生应用传送网络AND的实现架构与核心技术分享

华为云开发者联盟

网络 华为云 应用传送网络 ADN 东数西算

iPhone13全线机型上线WeTest云手机平台

WeTest

两个剪辑透明化融合视频特效处理

老猿Python

Python 音视频 视频剪辑 视频特效 引航计划

HUAWEI雄起!顶级网络工程师总结出了这份网络协议开源笔记

Java 架构 面试 程序人生 编程语言

恒源云(GpuShare)_新功能制霸,信息量有点大

恒源云

软件对智能汽车的影响

SOA开发者

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