Git 分支策略与测试/QA 流程相结合

标签 git testing git-flow

我们的开发团队一直在使用 GitFlow分支策略,非常棒!

最近我们招募了一些测试人员来提高我们的软件质量。这个想法是每个功能都应该由测试人员进行测试/QA。

过去,开发人员在单独的功能分支上处理功能,完成后将它们 merge 回 develop 分支。开发人员将在该 feature 分支上亲自测试他的工作。现在有了测试人员,我们开始问这个问题

On which branch should the tester test new features ?

显然,有两种选择:

  • 在单个功能分支上
  • develop 分支上

开发分支测试

最初,我们认为这是必经之路,因为:

  • 自开发开始以来,该功能与 merge 到 develop 分支的所有其他功能一起进行了测试。
  • 可以尽早检测到任何冲突
  • 它使测试人员的工作变得轻松,他始终只处理一个分支 (develop)。他不需要向开发者询问哪个分支是哪个特性(特性分支是相关开发者专属、自由管理的个人分支)

最大的问题是:

  • develop 分支被错误污染。

    当测试人员发现错误或冲突时,他将它们报告给开发人员,开发人员在开发分支上修复问题(功能分支一旦 merge 就被放弃),之后可能需要更多修复。多个子序列提交或 merge (如果再次从 develop 分支重新创建分支以修复错误)使得从 develop 分支回滚功能非常困难(如果可能的话)。有多个功能在不同时间 merge 到 develop 分支并被修复。当我们想要创建一个仅包含 develop 分支

  • 中的某些功能的版本时,这会产生一个大问题

功能分支测试

所以我们再次考虑并决定我们应该在功能分支上测试功能。在测试之前,我们将 develop 分支的更改 merge 到功能分支( catch develop 分支)。这很好:

  • 您仍然使用主流中的其他功能测试该功能
  • 进一步的开发(例如错误修复、解决冲突)不会污染 develop 分支;
  • 您可以轻松决定在完全测试和批准之前不发布该功能;

但是也有一些缺点

  • 测试人员必须 merge 代码,如果有任何冲突(很有可能),他必须向开发人员寻求帮助。我们的测试人员专注于测试,不具备编码能力。
  • 可以在不存在另一个新功能的情况下测试一个功能。例如Feature A 和 B 同时在测试中,这两个 feature 互不感知,因为它们都没有 merge 到 develop 分支。这意味着当这两个功能都 merge 到 develop 分支时,您将不得不再次针对 develop 分支进行测试。并且您必须记得在将来对此进行测试。
  • 如果功能 A 和 B 都经过测试和批准,但在 merge 时发现存在冲突,则这两个功能的开发人员都认为这不是他自己的错/工作,因为他的功能分支通过了测试。沟通有额外的开销,有时解决冲突的人会感到沮丧。

以上是我们的故事。由于资源有限,我想避免到处测试所有东西。我们仍在寻找更好的方法来解决这个问题。我很想听听其他团队如何处理这种情况。

最佳答案

我们的做法如下:

在 merge 最新的开发分支代码后,我们在功能分支上进行测试。主要原因是我们不想在功能被接受之前“污染”开发分支代码。如果一个功能在测试后不被接受,但我们想发布其他已经在开发中 merge 的功能,那将是 hell 。 Develop 是从中发布的分支,因此最好处于可发布状态。长版本是我们分多个阶段进行测试。更具分析性:

  1. 开发人员为每个新功能创建一个功能分支。
  2. 功能分支(自动)部署在我们的测试环境中,每次提交都供开发人员测试。
  3. 当开发人员完成部署并且功能准备好进行测试时,他将开发分支 merge 到功能分支上,并在 TEST 上部署包含所有最新开发更改的功能分支。
  4. 测试人员在 TEST 上进行测试。当他完成后,他“接受”了这个故事并 merge 了开发上的特性分支。由于开发人员之前已经 merge 了功能上的开发分支,我们通常不会期望有太多冲突。但是,如果是这种情况,开发人员可以提供帮助。这是一个棘手的步骤,我认为避免它的最好方法是使功能尽可能小/具体。最终必须以某种方式 merge 不同的功能。当然,团队规模会影响此步骤的复杂性。
  5. 开发分支也(自动)部署在 TEST 上。我们有一个政策,即使功能分支构建可能会失败,开发分支也不应该失败。
  6. 一旦达到功能卡住状态,我们就会从开发中创建一个版本。这会自动部署在 STAGING 上。在生产部署之前,会在那里进行广泛的端到端测试。 (好吧,也许我夸大了一点,它们不是很广泛,但我认为它们应该如此)。理想情况下,Beta 测试人员/同事,即真实用户应该在那里进行测试。

您如何看待这种方法?

关于Git 分支策略与测试/QA 流程相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18371741/

相关文章:

django - Git - 如何将代码从我的中央 Git 存储库部署到我的生产服务器?

svn - 这是您通常使用 SVN 或 GIt 的方式吗?

git - Git 如何跟踪您的存储库中的文件而不覆盖其他人分支中的文件?

git - 无法在 SourceTree gitflow 中创建新的修补程序

git flow - 如何开始在现有功能分支上工作

git - 无法执行编辑器

html - 使用 Mac VoiceOver 测试网页的辅助功能

java - 多语言集成测试框架

unit-testing - 在单元测试中使用旧代码验证结果

git - 子分支和父分支同步自己