相信开发者都遇到过,功能已经开发和测试完成了,但是当项目经理要求立即上线这些已完成的功能的时候,团队确说还不能上线,必须等待另外一些功能完成了才能上线。
是什么阻止了即时交付?
那么是什么阻碍了团队不能做到完成一个功能就上线一个功能呢?下图展示了原因:
- 如果一个功能完成测试后,在需要交付时还需要等待其他功能完成测试才能交付,就不可能做到完成一个交付一个。
如上图所示:
- Dev为开发的主分支
- Feature A 和 Feature B 同时从D1点开始开发
- 在 Feature A 在提交了 A2 以后完成开发工作
- Feature A 提交代码到 Dev 形成 D2
- 开始测试 Feature A
- Feature B 在提交了 B2 以后完成开发工作
- Feature B 提交代码到 Dev 形成 D3
- 开始测试 Feature B
- Feature A 在提交了 A3 以后修复了测试中发现的问题
- Feature A 提交代码到 Dev 形成 D4
- Feature A 完成了测试
现在的问题是,因为 Dev 上还有没有完成测试的 Feature B的代码,这个时候即使客户要求交付 Feature A,测试团队也不能带着未完成的 Feature B 交付产品给客户。
如何解决这个问题呢?
如何做到测试完成就可交付
其实很简单在主要开发分支上使用单件流模式,主要的测试工作在功能分支上完成。
如上图所示,Dev是主开发分支,只要开发者能保证这个分支上的代码都是经过测试的,产品就能发版,但是一旦代码被提交到某个分支上,这些代码就必须测试以后才能交付,所以开发者必须保证代码提交到 Dev 分支后测试时间尽可能的短。使用下面的原则,可以保证这一点:
- 先在功能分支上完成测试,再提交代码到主分支上
- 主分支上每次只测试一个功能,这样测试完成就可以交付了
- 在主分支上的测试时间要尽可能短,这样才不会阻塞单件流
回到图中的例子,Feature A 和 Feature B 的开发和测试都在自己的分支上完成。当 Feature A 完成开发和测试以后才提交代码到 Dev 分支上。即使在 Feature A 完成测试前,Feature B 已经完成了开发和测试,也不能提交代码到 Dev 上。这样就能保证 Feature A 在 Dev 上完成测试以后就可以交付给客户。
总结
本文讨论了如何保证功能开发完成以后就能交付。这需要在最后的测试环节保持单件流。