首页 > 其他分享 >交付和发布的区别,你真的懂吗?

交付和发布的区别,你真的懂吗?

时间:2023-07-18 14:34:17浏览次数:35  
标签:需求 版本 迭代 区别 发布 懂吗 线上 交付

今天在星球内部群里,有同学提了一个问题:公司经常搞线上运营活动,每次活动都要封版一个月。活动结束后往往用大量时间去解决堆积的需求,结果发布后线上质量不太好,这种问题该如何解决?

这种问题很常见,但这种现象很奇特,很多人把持续集成、持续交付和持续发布三者的概念搞混了。以为不断的迭代需求不断的开发测试,测试通过就要发布上线。但其实,交付和发布是两件完全不同的事情。

这篇文章,我会从需求迭代入手,聊聊交付和发布的关系,以及在规模化敏捷中经常提到的一个术语:版本火车。

 

需求交付和发布

按照我们常规的理解来说,一个软件产品的迭代交付模型如下图所示:

业务方或者产品提出需求,并组织需求PRD评审,评审通过后进入设计环节。UI设计/架构设计评审通过,进入编码实现并提测,测试通过后软件产品理论上就达到了符合产品预期设计的标准,即产品本身的功能和质量满足交付要求。接下来就是线上发布,让用户使用,这个环节已经进入了产品运营阶段。

在很多同学的认知里,测试通过就要发布到线上,如果线上封版不允许发布,那这个软件迭代交付流程就卡住了,就如我开篇提到的案例所示:活动封版,活动结束后用大量时间去解决堆积的需求,发布后线上质量不太好。出现这种问题其实是一种恶性循环:

  • 封版导致整个迭代流程停滞,堆积了大量的需求;
  • 一次性发布多个迭代需求,每迭代引入的风险未进行充分评估和测试;
  • 只顾着吞吐需求,但新上线的功能缺少线上监控预警,故障响应和应急手段缺乏;

从持续集成持续交付的角度来说,封版只是线上发布停止,而不意味着需求迭代和研发测试交付停止。每个迭代周期内,技术同学最后应该交付的,应该都是满足需求和质量可靠的软件产品。

要解决文章开头这位同学遇到的问题,其实方案早就有了,那就是 Release Train Model,俗称版本火车。

 

什么是版本火车

版本火车可以将它理解成一种软件发布计划,在互联网公司应用较为普遍。形象一点形容就是:固定时间发一趟车(一次迭代),如果符合要求能赶上发车时间就让上车(测试通过,按时交付),如果存在问题就下车等下一班车(有严重bug或交付延期),以免影响其他乘客的正常出行(其他需求的上线和产品迭代)

因为是固定的时间周期发布,为了确保每次都能顺利发车,就需要制定严格的计划,确保从需求设计到研发测试交付都能按时完成对应的工作。在一个发布周期内,很多工作要提前开展,比如需求评审、方案评审、编码实现等。

完成这些事项后如果打算上车(该版本发布),就需要按照计划时间完成对应的工作,比如在规定时间内完成代码自测并合并到本次发布的版本中,如果无法准时提测就等下一趟车。

从代码分支管理角度来说,版本火车模型大致如下图所示:

  • 统一使用release1.0这样的命名方式,做好权限管理;
  • 开发新功能时,从master拉取一个feature-name分支,在该分支完成功能开发和自测;
  • 如果该功能要上车,则按照时间要求完成自测并提交merge request,code review通过后合并到release1.0;
  • 代码合并后通过单元测试和自动化测试后,正式将release分支代码提测;
  • 正式完成线上发布后,再将release分支代码合并至master,本次版本火车完成;

 

最后,回到本文的主题:发布和交付的区别。

发布大家都了解,将测试验收通过的软件产品对外发布,让用户使用,并通过持续的业务和产品运营创造业务价值。而交付则是按照约定时间完成一个符合要求的软件产品(纯技术角度就是一个release分支的代码集)。

即使由于业务运营活动要求,线上发布暂停,但交付本身是可以持续迭代的。每次发车,从上一个release拉取分支进行开发测试,测试验收通过再合并到release,等待线上可以发车时候,跟随上车发布。

当然要达到版本火车顺利运转,至少需要满足几个条件:

  • 严格的计划管理;
  • 强大的项目管理能力;
  • 良好的代码分支管理;
  • 全面的测试覆盖和验证能力;
  • 完备的CICD流水线支撑能力;

最后也是最重要的一点,线上发布需要及时将配套的技术和业务监控补全,还要有较好的应急响应机制和故障处理手段。

 

标签:需求,版本,迭代,区别,发布,懂吗,线上,交付
From: https://www.cnblogs.com/imyalost/p/17562947.html

相关文章

  • 什么是 数据框,与数据库 有什么区别
    数据框(DataFrame)是一种二维数据结构,它类似于表格,具有行和列的结构。数据框是一种常见的数据结构,用于在统计分析和数据处理中存储和操作数据。在数据框中,每一列可以是不同的数据类型,如数值、字符、逻辑值等。数据框通常被用于在编程语言中处理和分析数据,例如R语言的数据框。数据......
  • 浅析vue3中如何使用动态组件、如何快速理解Vue3的 toRaw和markRaw、ref与shallowRef、
    一、Vue3中使用component:is加载动态组件1、不使用setup语法糖,这种方式和vue2差不多,is可以是个字符串2、使用setup语法糖,这时候的is如果使用字符串就会加载不出来,得使用组件实例<componentclass="task-box":is="componentObj[route.params.type]":info="taskInfo"></co......
  • 4、C#中的HashTable和Dictionary之间的区别
    HashTable和Dictionary都是用于存储数据的数据结构的类型。这两个数据结构都将存储的数据保存为键值对。根据这些关键特征之间的区别,我们可以区分HashTable和Dictionary,如下所示: ......
  • java bean、EJB、POJO区别
    JavaBean、EJB、POJO区别在Java开发中,我们经常会听到三个词,JavaBean、EJB和POJO。它们在Java开发中有着不同的角色和用法。本文将详细介绍它们的区别,并给出相关的代码示例。JavaBeanJavaBean是一种Java语言规范,用于描述一种可重用的组件。它是一种特殊的类,遵循一些特定的命......
  • http、socket以及websocket的区别(websocket使用举例)
    一、http、socket、websocket介绍1、HTTP(HypertextTransferProtocol):HTTP是一种应用层协议,用于在客户端和服务器之间传输超文本数据。它是基于请求-响应模型的,通过发送HTTP请求从服务器获取数据,并通过HTTP响应返回数据给客户端。HTTP是无状态的,每个请求和响应都是独立的,不保留状......
  • npm install xxx 后加上-s、-d、-g之间的区别?
    1、npminstallxxx-snpminstallxxx-s、npminstallxxx-S是npminstallxxx--save的简写形式局部安装,记录在package.js文件中dependencies对象中dependencies:生产环境的依赖包例如:vue、jquery、element-ui、echarts等。 2、npminstallxxx-dnpminstallxxx-d、n......
  • for...in循环和for...of循环的区别?
    大原則:for...in只用來遍歷對象中的key,不用來遍歷數組 for…of是ES6新增的遍历方式,允许遍历一个含有iterator接口的数据结构(数组、对象等)并且返回各项的值,和ES3中的for…in的区别如下:for…of遍历获取的是对象的键值,for…in获取的是对象的键名;for…in会遍历对象的整个......
  • springboot相较之前ssm有什么区别和优势
    1、快速可搭建的脚手架,少量配置,约定优于配置,不用像ssm那样增加复杂的配置文件2、这种方式使程序员更加集中于业务代码的编写,而不用关注部署和容器配置的问题3、约定优于配置也不是任何场景都适用,主要还是免去了servlet的配置4、内置tomcat直接启动......
  • BST(二叉搜索树)、AVL(平衡二叉树)、RBT(红黑树)的区别
    一、二叉搜索树(BST:BinarySortTree)二叉查找树就是左结点小于根节点,右结点大于根节点的一种排序树,也叫二叉搜索树。二叉查找树比普通树查找更快,查找、插入、删除的时间复杂度为O(logN)。但是二叉查找树有一种极端的情况,就是会变成一种线性链表似的结构。此时时间复......
  • DM8达梦数据库版本区别:开发版、标准版、企业版、安全版
    DM8达梦数据库版本区别:开发版、标准版、企业版、安全版达梦2021-01-196435根据不同的应用需求与配置,DM提供了多种不同的产品系列:DM开发版DM开发版是指用于业务场景开发时所用的数据库,除不支持数据库集群等企业级功能,开发版提供了完整的功能,支持TB级数据量,支......