【锁定直播】字节、华为云、阿里云等技术专家讨论如何将大模型接入 AIOps 解决实际问题,戳>>> 了解详情
写点什么

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

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

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

关注

评论

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

性能测试框架对比初探

FunTester

性能测试 接口测试 测试框架 测试开发

区块链+游戏资产所有权,将如何激活游戏经济的发展?

CECBC

🏆【CI/CD技术专题】「Maven插件Docker系列」使用Maven插件构建Docker镜像的方法

洛神灬殇

Docker maven 7月日更 Plugin

性能框架哪家强—JMeter、K6、locust、FunTester横向对比

FunTester

性能测试 接口测试 测试框架 测试开发

Redis - Cluster - 源码阅读(二)

旺仔大菜包

redis

市场总局禁止虎牙斗鱼合并:抵制互联网行业垄断行为

石头IT视角

高性能架构

编号94530

Java 架构设计 高性能

密码你真的了解吗

卢卡多多

7月日更

10条让开发者受益终生的编码原则

Jackpop

模块一作业

Always

架构实战营

智能重排序在推荐场景中的应用(三十四)

数据与智能

推荐系统 排序 智能

京东智造云:在世界人工智能大会上,听到的工业智能生长的声音

脑极体

Javascript 的工作原理:引擎、运行时和调用堆栈概述

devpoint

JavaScript V8 7月日更

Apache Flink 漫谈系列 —— 概述

云祁

flink 7月日更

网络攻防学习笔记 Day71

穿过生命散发芬芳

网络攻防 7月日更

架构实战训练营 - 模块八课后作业

Johnny

架构实战营

Python OpenCV 之图像金字塔,高斯金字塔与拉普拉斯金字塔

梦想橡皮擦

7月日更

以产业区块链提升数字化转型质量

CECBC

架构实战营 模块二作业

孫影

架构实战营 #架构实战营

只更新代码,然后发布版本:基于 Serverless Devs 原子化操作阿里云函数计算

Serverless Devs

7款神器,让程序员幸福感暴增!

Jackpop

领域驱动设计到底在讲什么?

escray

学习 极客时间 7月日更 如何落地业务建模

【Flutter 专题】90 图解 Dart 单线程实现异步处理之 Future (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 7月日更

实时音视频技术全栈攻略|寻找C站宝藏

liuzhen007

音视频 7月日更

Go 学习笔记之 结构体

架构精进之路

Go 语言 7月日更

你以为的你以为未必是你以为的

Bruce Talk

敏捷 随笔 Agile 引导和教练

模块八作业

Presley

Hadoop 入门教程

若尘

大数据 hadoop

Facebook工程经验--PCIe故障监控和修复

俞凡

架构 大厂实践

PowerShell 正则表达式

耳东@Erdong

PowerShell 7月日更

Goroutine 是如何运行的

Rayjun

调度器 Go 语言

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