前言
发版要加班通常有3个原因,
- 排期的问题
- 代码合并的问题
- 如何判断质量是否达到发布标准的问题。
一个技术团队的工程能力越强,后两个原因导致的加班就会越少。无论什么岗位,新同学进入技术团队以后,其实首先要了解的就是这个团队的工程能力(因为要上手干活)
排期,引发的加班
- 我们假设一个需求,开发一周,测试一周。
- 测试一周,意味着第5个工作日,测试仍然在提bug(如果运气加上规划的不好,这一天还有可能提出来致命bug)。
- 那么,第6个工作日的工作量见下图
- 所以,如果我们要在这一天出一个正式的版本,那通常是要加班的。
- 如何解决呢?没有好办法,只能尽量做到
-
- 砍需求
- bug发现的越早大家越轻松;测试要提前做好规划,设计好冒烟测试,先测高风险用例,避免第5天还出大量bug,严重bug。
- bug越少大家越轻松;和开发团队沟通,商量着如何提高代码质量和debug能力。少写bug、解bug不要引入新bug。
合并代码,引发的加班
现代源代码控制系统提供了强大的工具,可轻松在源代码中创建分支。但最终这些分支必须合并在一起,许多团队花费了大量时间来处理错综复杂的分支
—马丁 福勒
在集成或者发布的当天,开发最重要的工作是合并代码,如果合并了很久还没合并完,你去问了一下,大概率得到这样的回答(不同团队,术语可能不一样,但是意思差不多)
- 在等xxx团队或者xxx模块合并,我们依赖他们,他们进了我们才能进。(关键词:等依赖)
- 在解决冲突(关键词:冲突)
- 所以,依赖和冲突,是代码无法顺利合并、引发加班的主要原因
一次不顺利的发布
什么是冲突?
代码冲突,是指在多人协作开发软件时,当多个开发者修改了同一份代码文件的相同部分,导致代码合并时出现的不一致性。这种不一致性需要人工介入才能解决,否则会导致程序无法正常运行。
代码冲突可以分为两种主要类型:
- 文本冲突
-
- 例如,例如两个开发者将同一个变量修改成了不同的名字。
- 语义冲突
-
- 逻辑冲突,后边会结合依赖一起举一个例子。
什么是依赖
模块 B 调用了模块 A 的函数,那么模块 B 就依赖于模块 A
一个依赖导致语义冲突的例子
- 一个新需求,需要B和A两个团队配合完成
- B团队计划新增函数func B
- A团队计划新增函数func A
- func B需要调用func A(func B依赖func A)
- 项目完工合并代码时,B团队必须等待A团队先合并代码到master后,自己才能合并代码到master,否则在master上就会产生冲突。
无法判断版本质量是否达到发布标准,引发的加班
待续
为什么新版本发布通常要加班