我们的开发团队一直在使用GitFlow分支策略,效果非常好!
最近我们招募了几个测试人员来提高我们的软件质量。这个想法是每个功能都应该由测试人员进行测试/QA。
过去,开发人员在单独的功能分支上处理功能,并develop
在完成后将它们合并回分支。feature
开发人员将自己在该分支上测试他的工作。现在有了测试人员,我们开始问这个问题
测试人员应该在哪个分支上测试新功能?
显然,有两种选择:
- 在单个功能分支上
- 在
develop
树枝上
在开发分支上测试
最初,我们认为这是必经之路,因为:
develop
自开发开始以来,该功能已与合并到分支的所有其他功能一起进行测试。- 任何冲突都可以更早地被检测到
- 它使测试人员的工作变得轻松,他始终只处理一个分支 (
develop
)。他不需要向开发者询问哪个分支是针对哪个特性的(特性分支是由相关开发者独家自由管理的个人分支)
这样做最大的问题是:
分支被
develop
错误污染。当测试人员发现错误或冲突时,他会将它们报告给开发人员,开发人员在开发分支上修复问题(功能分支在合并后被放弃),之后可能需要更多修复。如果可能的话,多个子序列提交或合并(如果再次从
develop
分支重新创建分支以修复错误)使得从分支回滚功能develop
非常困难。有多个功能develop
在不同时间合并到分支并固定在分支上。当我们想要创建仅包含develop
分支中的一些功能的版本时,这会产生一个大问题
在功能分支上测试
所以我们再次考虑并决定我们应该在特性分支上测试特性。在我们测试之前,我们将develop
分支的变化合并到特性分支(赶上develop
分支)。这很好:
- 您仍然使用主流中的其他功能测试该功能
- 进一步的开发(例如错误修复、解决冲突)不会污染
develop
分支; - 在完全测试和批准之前,您可以轻松决定不发布该功能;
但是,也有一些缺点
- 测试人员必须合并代码,如果有任何冲突(很可能),他必须向开发人员寻求帮助。我们的测试人员专门从事测试,不会编码。
- 可以在不存在另一个新功能的情况下测试一个功能。例如,功能 A 和 B 同时都在测试中,这两个功能彼此不知道,因为它们都没有被合并到
develop
分支中。这意味着当两个功能都合并到开发分支时,您将不得不develop
再次针对该分支进行测试。而且您必须记住在将来对此进行测试。 - 如果功能 A 和 B 都经过测试和批准,但在合并时发现冲突,则这两个功能的开发人员都认为这不是他自己的错误/工作,因为他的功能分支通过了测试。沟通中有额外的开销,有时解决冲突的人都会感到沮丧。
以上是我们的故事。由于资源有限,我想避免到处测试一切。我们仍在寻找更好的方法来解决这个问题。我很想听听其他团队如何处理这种情况。