写点什么

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

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

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

关注

评论

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

uniapp开发App从开发到上架全过程

雪奈椰子

Redis Desktop Manager for Mac(Redis桌面管理工具)中文激活版

Geek_幻墨成诗

RESP

PingCAP 被评为 Translytical Data Platforms 2023 全球技术领导者

PingCAP

数据库 TiDB

Cycling 74 Max for Mac下载 音乐可视化编程软件

iMac小白

DAPP合约区块链技术项目系统开发

l8l259l3365

Last Week in Milvus

Zilliz

非结构化数据 Milvus Zilliz AIGC 向量数据库

WiFi7 IPQ9574-IPQ9554-QCN9274-QCN6274-space-time Block Code technology

wifi6-yiyi

ipq9574

全力备战中国大学生计算机设计大赛!历年获奖作品正式上线和鲸社区

ModelWhale

Python 云计算 算法 数据分析 中国大学生计算机设计大赛

MindNode 5 for Mac(思维导图) v5.0.1中文激活版

mac

思维导图软件 苹果mac Windows软件 MindNode 5

iZotope RX 10 for mac v10.4.2 激活版

Geek_幻墨成诗

iZotope RX 10下载 iZotope RX 10破解版 iZotope RX 10 mac iZotope RX 10

如何使用1688店铺所有商品API接口

Noah

软件测试/人工智能|为什么Python在人工智能时代异军突起

霍格沃兹测试开发学社

你知道Spring中BeanFactoryPostProcessors是如何执行的吗?

EquatorCoco

spring 后端 springboot

Audirvana for Mac(音乐播放器)v3.5.50中文激活版

iMac小白

JavaScript中的异步处理方法,

互联网工科生

JavaScript 异步处理

异常追踪与 JIRA 实现双向联动最佳实践

心有千千结

可观测性 Jira

特权账号管理之金融行业篇

尚思卓越

网络安全

Footprint 的批量下载方案使交易回测更轻松

Footprint Analytics

区块链 回测

速速报名!请查收 2023 龙蜥操作系统大会超全指南

OpenAnolis小助手

开源 龙蜥社区 北京 2023龙蜥操作系统大会

re:Invent 2023:PingCAP 荣获亚马逊云科技 2023 年度合作伙伴奖项

PingCAP

数据库 AWS TiDB 亚马逊云科技 pingCAP

「智造」第10期:浅谈工业互联网加速企业服务化转型

用友BIP

智能制造

Android 实现APP可切换多语言

EquatorCoco

APP开发 Andriod开发

软件测试/人工智能|LangChain核心模块Agents详解

霍格沃兹测试开发学社

生成式AI与预测式AI的主要区别与实际应用

高端章鱼哥

生成式AI 预测式AI

BetterMouse for Mac中文激活版下载(鼠标增强软件)

iMac小白

Royal TSX for Mac(远程管理软件)6.0.2激活版

Geek_幻墨成诗

Royal TSX MacOS远程管理

Rhinoceros 8 for Mac(犀牛8 mac版)激活版

Geek_幻墨成诗

Rhinoceros 7 Rhinoceros8

软件测试/人工智能|一文告诉你LangChain核心模块chains原理

霍格沃兹测试开发学社

上海统一运维管理平台推荐-行云管家

行云管家

IT运维 运维管理 统一运维

都2023年了,你还不会 CI/CD 吗?

伤感汤姆布利柏

ci CD

用行云管家实现IT统一运维管理,提高运维效率

行云管家

IT运维 行云管家 运维管理 统一运维

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