许式伟的架构课
许式伟
七牛云 CEO
84946 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 89 讲
许式伟的架构课
15
15
1.0x
00:00/00:00
登录|注册

72 | 发布单元与版本管理

容器的镜像
发布单元的输入
发布单元的输出
源代码仓库
独立的迭代周期
兼容性的困难
API版本号
兼容性
RDD的只读设计
变量只读
开闭原则
软件工程的确定性
容器化
软件安装失败教训
发布单元
源代码版本管理的复杂性
确保软件工程质量
反复迭代与演进
版本的兼容问题
只读设计的确定性
软件发布的版本管理
源代码版本管理
软件工程生命周期
发布单元与版本管理

该思维导图由 AI 生成,仅供参考

你好,我是七牛云许式伟。
前面我们在 “68 | 软件工程的宏观视角” 一讲中谈到:一个软件工程往往是生命周期以数年甚至数十年计的工程。对于传统工程,我们往往把一个工程同时也称之为项目,项目工程。但软件工程不同,虽然我们平常也有项目的概念,但软件工程并不是一个项目,而是无数个项目。每个项目只是软件工程中的一个里程碑(Milestone)。
这意味着软件工程终其完整的生命周期中,是在反复迭代与演进的。这种反复迭代演进的工程,要保证其质量实际上相当困难。

源代码版本管理

怎么确保软件工程的质量?
很容易想到的一个思路是,万一出问题了,就召回,换用老版本。
这便是版本管理的来由。当然,如果仅仅只是为了召回,只需要对软件的可执行程序进行版本管理就好了。但我们如果要进一步定位软件质量问题的原因,那就需要找到一个方法能够稳定再现它。
这意味着我们需要对软件的源代码也进行版本管理,并且它的版本与可执行程序的版本保持一一对应。
但实际上这事并没有那么简单。
从软件的架构设计可知,软件是分模块开发的,不同模块可能由不同团队开发,甚至有些模块是外部第三方团队开发。这意味着,从细粒度的视角来看,一个软件工程的生命周期中,包含着很多个彼此完全独立的子软件工程。这些子软件工程它们有自己独立的迭代周期,我们软件只是它们的 “客户”。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了软件工程质量管理中的源代码版本管理和软件发布的版本管理两个关键方面。首先,源代码版本管理是确保软件工程质量的基础,通过对源代码进行版本管理和质量跟踪,实现团队成员的独立开发、完善的代码质量检查机制和回滚机制。其次,软件发布的版本管理面临着用户系统环境的差异,容器化技术的应用为解决这一问题提供了新的思路,容器的镜像实现了完全的自描述,为线上服务的版本管理带来了巨大的便捷性。文章还探讨了版本的只读设计和版本的兼容问题,强调了确定性预期的重要性以及版本兼容上的挑战。通过本文的阐述,读者可以深入了解软件工程质量管理的挑战和解决方案,以及容器化技术在软件发布管理中的重要作用。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《许式伟的架构课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(10)

  • 最新
  • 精选
  • Geek007
    许老师思维缜密,很多文章读起来仿佛是一个大的switch case,基本所有的条件都考虑到了,同时又能够把握主次。非常佩服,是我的榜样。 版本管理看似简单但其实复杂。有两个问题: 1. 对go mod了解不深,想了解go mod 对外部依赖的管理的层次,比如发布单元依赖外部包A,但其实外部包A又依赖外部包B, B 又依赖C...go mod会把这个依赖的chain: A->B->C都管理起来么? 2. 接上面的问题,如果外部包B里依赖了的外部包C没有指定版本,用的是latest的版本,怎么能够及时发现和避免呢? 3. 想了解七牛云如果管理开源软件,如果开源软件有bug,是维护一个本地版本修复bug,还是说会直接在开源社区提交修复,等开源社区的修复发布后再正式的把新的开源软件打包到产品里? 再次感谢!

    作者回复: 1、支持的 2、在Go mod中,就算指定的是latest,对于具体的一个版本,也是依赖于具体版本,也不是latest。 3、两者都有。趋势是后者,直接开源版本就是内部版本。

    2020-01-10
    5
  • Jeyrce.Lu
    (1)源代码的版本管理——git (2)运行环境的版本管理——容器 (3)api的版本管理——版本号 (4)模块的版本管理——包管理工具
    2022-04-06
    5
  • Aaron Cheung
    补打卡 很受益的文章
    2020-01-12
    3
  • 亢(知行合一的路上)
    只读的设计,增加了系统的确定性,也就可以把精力放在不确定的地方。 需要明确系统的哪部分是只读的,哪部分是易变的,只读的部分降低了系统整体的复杂度。
    2020-04-16
    1
  • 靠人品去赢
    其实容器化很方便,但是这种serverless带来的就是如何监控等一些新问题也挺头疼的。
    2020-01-10
    1
  • 霜花香似海
    多模块开发,需要做好模块边界上下文问题。只要是架构师确定了各个边界之间的上下文问题,也就统一了版本兼容,或者说统一了各个模块之间的标准了。不晓得这么说对不对
    2020-01-10
    1
  • ifelse
    学习打卡
    2023-10-15归属地:浙江
  • 亢星东
    接口API版本这个用过
    2021-10-26
  • 小炭
    还是不太明白只读设计,能否举个例子说明一下好处呢
    2020-05-06
    2
  • leslie
    多人协作的标准化其实是引发这个问题的原因:当前就碰到。1个项目开发工期偏紧,直接就多个团队同时参与,各自团队内部的开发标准又不一样,开发完成进入测试改错的环节时就发现一堆标准不一致的问题-直接导致部分代码重写。 如何在发布单元和版本控制中解决当下问题:这是将来相关项目时将会碰到的问题。多个小团队一起迭代发布就明显碰到了版本管理的问题。
    2020-01-10
    1
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部