私たちの開発チームは、GitFlow分岐戦略は素晴らしいです!
最近、ソフトウェアの品質向上のため、数名のテスターを採用しました。すべての機能はテスターによってテスト/QA されるべきだという考え方です。
これまで、開発者は別々の機能ブランチで機能に取り組み、develop
完了したらブランチにマージしていました。開発者は自分でそのfeature
ブランチで作業をテストしていました。今ではテスターがいるので、次のような質問をします。
テスターはどのブランチで新しい機能をテストする必要がありますか?
明らかに、2 つの選択肢があります。
- 個々の機能ブランチ
develop
枝に
開発ブランチでのテスト
当初、私たちはこれが確実な方法であると信じていました。その理由は次のとおりです。
develop
この機能は、開発開始以降にブランチにマージされた他のすべての機能とともにテストされます。- 競合は早期に検出可能
- これにより、テスターの仕事が楽になります。テスターは
develop
常に 1 つのブランチ ( ) だけを扱うことになります。どのブランチがどの機能用なのか開発者に尋ねる必要はありません (機能ブランチは、関連する開発者によって排他的かつ自由に管理される個人用ブランチです)。
これに関する最大の問題は次のとおりです。
枝
develop
は虫で汚染されています。テスターがバグや競合を発見すると、開発者に報告し、開発者は開発ブランチで問題を修正します (機能ブランチはマージされると破棄されます)。その後、さらに修正が必要になる場合があります。複数のコミットまたはマージ (
develop
バグを修正するためにブランチがブランチから再度作成される場合) により、develop
ブランチから機能をロールバックすることが非常に困難になります (可能であれば)。複数の機能がさまざまなタイミングでブランチにマージされ、修正されます。これにより、ブランチdevelop
の一部の機能のみを含むリリースを作成したい場合に大きな問題が発生します。develop
機能ブランチでのテスト
そこで、もう一度考えて、機能ブランチで機能をテストすることにしました。テストする前に、ブランチからdevelop
機能ブランチに変更をマージします (ブランチに追いつくdevelop
)。これは良いことです。
- 主流の他の機能と合わせて機能をテストする
- さらなる開発(バグ修正、競合の解決など)によって
develop
ブランチが汚染されることはありません。 - 機能が完全にテストされ承認されるまでリリースしないことを簡単に決定できます。
しかし、欠点もいくつかある
- テスターはコードのマージを行う必要があり、競合が発生した場合は (非常に可能性が高い)、開発者に支援を求める必要があります。当社のテスターはテストを専門としており、コーディングを行うことはできません。
- 機能は、別の新機能がなくてもテストできます。たとえば、機能 A と機能 B の両方が同時にテストされている場合、どちらもブランチにマージされていないため、2 つの機能はお互いを認識しません
develop
。つまり、両方の機能が開発ブランチにマージされたら、ブランチに対して再度テストする必要がありますdevelop
。また、将来的にこれをテストすることを忘れないようにする必要があります。 - 機能 A と機能 B の両方がテストされ承認されたが、マージ時に競合が特定された場合、両方の機能の開発者は、自分の機能ブランチがテストを通過したため、自分の責任/仕事ではないと考えます。コミュニケーションに余分なオーバーヘッドが発生し、競合を解決している人がイライラすることがあります。
上記は私たちのストーリーです。リソースが限られているため、あらゆる場所ですべてをテストすることは避けたいと考えています。私たちはまだ、これに対処するためのより良い方法を模索しています。他のチームがこのような状況にどのように対処しているかをぜひ聞いてみたいです。
ベストアンサー1
やり方は次のとおりです。
最新の開発ブランチ コードを機能ブランチにマージした後、機能ブランチでテストを行います。主な理由は、機能が受け入れられる前に開発ブランチ コードを「汚染」したくないからです。テスト後に機能が受け入れられず、開発ブランチにすでにマージされている他の機能をリリースしたい場合、それは大変なことになります。開発ブランチはリリースが行われるブランチであるため、リリース可能な状態であることが望ましいです。長いバージョンでは、多くのフェーズでテストを行います。より分析的に言うと、次のようになります。
- 開発者は、新しい機能ごとに機能ブランチを作成します。
- 機能ブランチは、開発者がテストできるように、コミットごとに TEST 環境に (自動的に) デプロイされます。
- 開発者が実装を完了し、機能をテストする準備ができたら、開発ブランチを機能ブランチに再インストールし、最新の開発変更がすべて含まれる機能ブランチを TEST にデプロイします。
- テスターは TEST でテストします。テストが完了すると、ストーリーを「受け入れ」、feature ブランチを開発ブランチにマージします。開発者は以前に、develop ブランチを feature ブランチにリベースしていたため、競合はあまり発生しないと思われます。ただし、その場合は開発者が支援できます。これは難しいステップですが、これを回避する最善の方法は、機能をできるだけ小さく/特定したままにしておくことだと思います。さまざまな機能は、いずれにせよ、マージする必要があります。もちろん、チームの規模がこのステップの複雑さに影響します。
- 開発ブランチも (自動的に) TEST にデプロイされます。機能ブランチのビルドが失敗する可能性がある場合でも、開発ブランチが失敗することはあってはならないというポリシーがあります。
- 機能のフリーズに達したら、開発からリリースを作成します。これは自動的にステージングにデプロイされます。実稼働環境へのデプロイの前に、そこで徹底的なエンドツーエンドのテストが行われます。(ちょっと誇張しているかもしれませんが、それほど徹底的ではありませんが、そうあるべきだと思います)。理想的には、ベータ テスター/同僚、つまり実際のユーザーがそこでテストする必要があります。
このアプローチについてどう思いますか?