A / BテストとGitflowを処理するための戦略


8

アプリとgitflowのA / Bテストを処理するためにどのような戦略を使用していますか。

概要:

私たちは、大きなアプリを開発して維持する6人のプログラマーのチームです。これまでのところ、私たちはgitflowに取り組んでおり、数年前から完全にうまく機能していたプロセスにいくつかのアドオンを追加しました。簡単に言うと、次のように使用します。

  • マスターブランチ(公開バージョンのコードのみ)
  • 最終的な冗長性テストの後にマスターにマージするリリースブランチ
  • 極端な場合にのみmasterブランチと対話する修正プログラム
  • 開発とモジュールの完成とテストが完了した時点で蓄積され、最終的にリリースにマージされます。
  • / featureは、開発から分岐し、それらが完了してテストのさまざまな段階を通過すると、機能を追加する開発にマージして戻る機能のグループです。
  • / fix_developは、以前のバージョンで発生したバグの修正を含む機能のグループであり、ホットフィックスを開始するのに緊急ではないものです。

アプリが進化するにつれ、UXチームや他の利害関係者チームとともに、新しいリリースに2つのバージョンがあり、ユーザーがいずれかのバージョンを好むかどうかに基づいて、より強力なA / Bテスト戦略を採用しています。ユーザーにとって意味のあるバージョンである必要があります。

それを説明したら、問題は次のとおりです。gitflow でA / Bテストバージョンのコードを管理するために、どのような戦略を使用または推奨ましたか?

私が検討したオプションは、どういうわけか一貫性がありません。たとえば、AブランチとBブランチをマスターからブランチしてから、リリースブランチをどちらかに結合します。リリースブランチに含まれるコードを機能に分離する方法を知りません。枝。別のオプションは、リリースAとBのブランチを作成し、AとBのブランチを開発することです。これは、ブランチが多すぎてチームメイトにとって混乱のように思えます。

あなたの意見を聞いて、ありがとう!

更新: 開発するアプリはAndroidアプリであり、A / Bテスト用にPlayStoreプラットフォームを使用してA / Bテストを実装しています。これには、2つのAPKを作成し、そのうちの1つをロールアウト%でアップロードする必要があります。また、物事をよりシンプルに保つため、またボタンの位置よりも変更が大きい場合があるため、1つのAPKにAおよびBテスト用の独自のスイッチを追加しないことにしました。


これらは単にブランチを備えているのではないですか?
Robert Harvey

1
実は、これらのブランチはストアに行くので、機能ブランチからコードをアップロードするだけの場合、すべてのテストプロトコルを中断する必要があります。どう思いますか?
alexm

実際の製品にはならない可能性のあるブランチの審査プロセス全体を実行しますか?それは本質的にあなたの仕事を倍増させませんか?
Robert Harvey

とにかく、これは今の私の見方です。この投稿に関する私の考えは、他の人々がこの問題にどのように対処するかを学び、私にとって意味があると思うことを適用することです
alexm

これは作業を2倍にしますが、ユーザーにとって非常に複雑であるかどうかをテストして証明するために必要な重要な事項があります。これはすべて、アクティブユーザーのファネルの下部を拡大するために行われるため、多くの作業です。しかし、テストするのは理にかなっています
alexm 2017年

回答:


11

私がいつもそれを行っていると思った方法は、両方のページ/ビュー/フォームを処理できる単一のコードベースを持つことです。

すなわち。その機能にフラグが立てられ、2つ以上の構成で展開されているか、「ユーザーがAまたはBを取得するか」メソッド自体がアプリの一部です。

この場合、コードのバージョンは1つだけなので、ソース管理は機能しません。

これは、異なる機能を持つコードベースの複数のバージョンを保持する代わりの方法よりもはるかに好ましいです。これらはすぐに分岐する傾向があり、同じ機能を複数回実装する必要があります。

一般に、私は注意して、AとBの両方が持つ可能性のある違いの範囲を制限します。これにより、AとBを汎用のスイッチメソッド(ビューAまたはビューBなど)にプラグインでき、異なる統計の理由を理解できるようになります。テストから抜け出します。たとえば、売上の増加はボタンの色や価格式に関連していたのでしょうか?

編集。アプリの説明のため

Playストアアプリに機能フラグを設定して、コードベースを複数のAPKにパッケージ化することもできます。


3
はい、これは私が提案しようとしていたことです:機能のフラグ付け。それに関する唯一の問題は、後続のリリースで(未使用の)機能を削除するつもりがない限り、ソフトウェアの複雑さが増すことです。
Robert Harvey

1
はい、私は通常、機能フラグに賛成していませんが、これは私がそれを実行し、実行したことを確認した方法です。ブランチに同じ製品の複数のライブバージョンが存在することになる恐ろしさをすべて目にしたと思います。だから私は自然に自分のアプローチから遠ざかるでしょう。
ユアン2017年

2
あなたはまだ設定をすることができ、同じコードベースから2つのapkを取得できます。確かにアプリは大きくなりますが、複数のコードベースを維持することは控えめに言っても難しい
Ewan

2
確かにそのようなフローはビューに抽象化できます
Ewan

1
はい、エンタープライズ開発チームの場合は、そうすることをお勧めします。私にとって、集中的にコミットするエンタープライズ開発環境では、トランクベースの開発フローがはるかに簡単です。こちらをご覧ください:trunkbaseddevelopment.com。サムニューマンは、youtube:youtube.com/watch?v=lqRQYEHAtpkで機能の切り替えについて良い話をしました。
ivenxu 2017年

1

フィーチャーフラグを使用する方法であることに@Ewanに同意します。そうすることで、AテストまたはBテストのいずれかでAPKをデプロイするビルドプロセスに何かを追加できます。ただし、機能フラグを使用しないアイデアが必要な場合は、ここで私が試したことがありません。

共通のコードを別のリポジトリーの別のライブラリーに引き出すことができます。次に、テストの各バージョンには、デプロイ可能な独自のgitflowとマスターブランチを持つ独自のリポジトリがあります。

すべての共通コードをライブラリーにプルしてからリポジトリーで参照する必要があるため、これは最初により多くの労力を要します。しかし、初期設定後は、これによりA / Bテストへの新機能の開発を合理化できると思います。

**繰り返しますが、これは単なるアイデアであり、私が個人的に行ったものではありません。


はい、それは確かです、私たちは主な機能(C ++)を備えたライブラリを持っており、インターフェイスとサービスのデプロイヤーとしてのみ機能するコンシューマーアプリ(AndroidとiOS)を持っています。つまり、AndroidのA / Bテストで機能します。ただし、コードを1つのリポジトリに集中させるため、「AとBのすべてのブランチをコピーする」と「AとBの機能または通常のブランチを1つだけ持つ」の中間にあるgitflow戦略を探しています。それは汚いレポを意味するでしょう」。
alexm 2017年

0

アプリは既に実行されており、一部のユーザーがいるため、次のオプションのいずれかをお勧めします。

  • 新しい大きな機能を実装する前に、デザイン思考を行うことを強くお勧めします。
  • それでもA / Bテストを行う必要がある場合は、通常のgitflowを使用して、AブランチBブランチを作成することをお勧めします。

ソース管理

A / Bテストを考えると、私が明確にしたいのは、

  • ブランチ:アプリのバージョンに関するコードが含まれています。EG:A_HomeActivity、A_SettingsActivityなど
  • Bブランチ:アプリのBバージョンに関するコードが含まれています。EG:B_HomeActivity、B_SettingsActivityなど

この時点から、2つの戦略を使用できます。

  • 2つのまったく異なるバージョンを作成します。A.apkB.apkです。または
  • BブランチにAブランチのコードも含めるようにして、2つのフローを使用できるアプリ提供します。ユーザーは1つのアプリのみをダウンロードし、評価目的で新しいフローをオンにするオプションがあります。このようなBitbucketによるものを見たことがありますが、評価のためにまったく新しいナビゲーションを利用できるユーザーはほとんどいませんでした。しばらくすると、この新しいナビゲーションがデフォルトになりました。

どちらの方法でも、実験後は、廃止された機能/フローのコードを削除するだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.