[解決済み] テスト/QA プロセスと統合された Git ブランチ戦略
質問
私たちの開発チームは GitFlow ブランチング戦略を使っていますが、これは素晴らしいことです
最近、私たちはソフトウェアの品質を向上させるためにテスターを数人採用しました。このアイデアは、すべての機能がテスターによってテスト/QAされるべきであるというものです。
過去には、開発者は個別の機能ブランチで機能に取り組み、それらをマージして
develop
ブランチにマージしていました。開発者は自分の作業を、その
feature
ブランチでテストを行います。さて、テスターの場合、次のような質問を始めます。
テスターはどのブランチで新機能をテストすべきでしょうか?
明らかに、2つのオプションがあります。
- 個々の機能ブランチ上で
-
ブランチ上で
develop
ブランチ
開発ブランチでのテスト
当初、私たちはこれが確実な方法だと信じていました。
-
この機能は、他のすべての機能がマージされた状態でテストされ
develop
ブランチにマージされた他のすべての機能と一緒にテストされます。 - コンフリクトを早期に発見することができる
-
テスターの仕事を簡単にします。彼は1つのブランチ (
develop
) を常に扱うだけです。どのブランチがどの機能のものかを開発者に尋ねる必要がありません (機能ブランチは、関連する開発者が独占的かつ自由に管理する個人的なブランチです)。
これの最大の問題点は
-
は
develop
ブランチはバグで汚染されています。テスターはバグやコンフリクトを見つけると、それを開発者に報告します。開発者は develop ブランチでその問題を修正し (feature ブランチはマージされると放棄されます)、その後さらに修正が必要になる可能性があります。その後の複数のコミットやマージ(ブランチが
develop
ブランチから再作成してバグを修正する場合) は、その機能をdevelop
ブランチから機能をロールバックすることは、可能であれば非常に困難です。ブランチにマージされ、修正されている機能が複数あります。develop
ブランチにマージされ、修正されています。ブランチにある機能の一部だけを集めたリリースを作成したい場合、これは大きな問題となります。develop
ブランチ
フィーチャーブランチでのテスト
そこで私たちはもう一度考え、機能をフィーチャーブランチでテストすることにしました。テストを行う前に、機能ブランチでの変更を
develop
ブランチからの変更を feature ブランチにマージします (
develop
ブランチに追いつく )。これは良いことです。
- メインストリームにある他の機能と一緒にその機能をテストしています。
-
さらなる開発 (たとえばバグフィックスやコンフリクトの解決) は
develop
ブランチを汚染しません。 - その機能が完全にテストされ承認されるまでリリースしないことを簡単に決めることができます。
しかし、いくつかの欠点があります
- テスターはコードのマージを行わなければならず、もし衝突があれば (非常にありがちですが)、開発者に助けを求めなければならないのです。私たちのテスターはテストに特化しており、コーディングの能力はありません。
-
ある機能が、別の新しい機能の存在なしにテストされる可能性がある。例えば、機能 A と B が同時にテストされている場合、2 つの機能はどちらもマージされていないため、お互いを知らないまま
develop
ブランチにマージされていないためです。これらのことから、テストする際にはdevelop
ブランチに対してテストをしなければならないことになります。そして、将来的にこれをテストすることを忘れないようにしなければなりません。 - 機能 A と B の両方がテストされ承認されたにもかかわらず、マージ時に競合が確認された場合、両方の機能の開発者の両方が、自分の機能ブランチがテストを通過したため、自分の責任/仕事ではないと考えてしまいます。コミュニケーションに余分なオーバーヘッドが発生し、コンフリクトを解決する人がフラストレーションを感じることがあります。
上記は私たちのストーリーです。リソースが限られているため、あらゆる場所ですべてをテストすることは避けたいと考えています。私たちはまだ、これに対処するためのより良い方法を探しています。他のチームがこのような状況をどのように扱うか聞いてみたいものです。
どのように解決するのですか?
やり方は以下の通りです。
私たちは、feature ブランチに最新の develop ブランチのコードをマージした後に、feature ブランチ上でテストを行います。主な理由は、機能が承認される前に開発ブランチのコードを汚染したくないからです。ある機能がテストの結果受け入れられなかったが、すでに develop ブランチにマージされている他の機能をリリースしたいという場合、それは地獄でしょう。開発ブランチはリリースが行われるブランチであり、リリース可能な状態であることが望ましいのです。長くなりましたが、私たちは多くのフェーズでテストを行っています。より分析的に。
- 開発者はすべての新しい機能に対して機能ブランチを作成します。
- feature ブランチは、開発者がテストできるように、コミットごとに (自動的に) テスト環境にデプロイされます。
- 開発者がデプロイを終え、機能をテストする準備ができたら、develop ブランチを feature ブランチにマージし、最新の develop の変更をすべて含む feature ブランチをテスト環境にデプロイします。
- テスターはテストブランチでテストを行います。それが終わると、彼はストーリーを受け入れ、feature ブランチを develop にマージします。開発者は以前に develop ブランチを feature にマージしていたので、通常はそれほど多くのコンフリクトは発生しないと思われます。しかし、もしそうであれば、開発者が手助けをすることができます。このステップは厄介で、これを避ける最善の方法は、機能を可能な限り小さく、具体的にしておくことだと私は思います。異なる機能は、最終的に何らかの方法でマージする必要があります。もちろん、チームの規模はこのステップの複雑さに影響を及ぼします。
- develop ブランチは、(自動的に) TEST にもデプロイされます。features ブランチのビルドが失敗することがあっても、develop ブランチは決して失敗しないというポリシーがあります。
- 機能のフリーズが完了したら、develop からリリースを作成します。これは自動的に STAGING にデプロイされます。本番環境へデプロイする前に、STAGING 上で大規模な End to End テストが行われます。(ちょっと大げさかもしれませんが、それほど大規模ではありませんが、そうあるべきだと思います)。理想的には、ベータテスターや同僚、つまり実際のユーザーがそこでテストすべきです。
このアプローチについてどう思われますか?
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】マージ後のコミットでGitエラー - fatal: マージ中に部分コミットができない
-
[解決済み】Git サブモジュール head 'reference is not a tree' エラー
-
[解決済み】git-mergeの-dry-runオプションはありますか?
-
[解決済み】GitHubで空のブランチを作成する
-
gitアップロードの共通エラー処理
-
[解決済み】マージが終了していません(MERGE_HEADは存在します)。
-
[解決済み] TortoiseGitで「git did not exit cleanly (exit code 128)」というエラーを解決するには?[クローズド]
-
[解決済み] GitBash | origin master - rejected (fetch first) | GitHub リポジトリにファイルがない。
-
[解決済み] fatal: bad revision "とはどういう意味ですか?
-
[解決済み】Gitのワークフローとrebaseとmergeの質問