Ich würde gerne wissen, mit welchen Strategien Sie mit A / B-Tests Ihrer App und Ihres Gitflow umgehen.
Überblick:
Wir sind ein Team von 6 Programmierern, die eine große App entwickeln und warten. Bisher haben wir an gitflow mit einigen Add-Ons zu dem von uns hinzugefügten Prozess gearbeitet, der ein paar Jahre lang perfekt funktioniert hat. In vereinfachter Form verwenden wir:
- Master - Zweig (nur Code der veröffentlichten Versionen)
- Release- Zweig, der nach den endgültigen Redundanztests im Master zusammengeführt wird
- Hotfix, der nur in extremen Fällen mit dem Hauptzweig interagiert
- Entwickeln, das die entwickelten Module ansammelt, sobald sie fertig und getestet sind, und schließlich in die Veröffentlichung übergeht.
- / feature ist eine Gruppe von Features, die von der Entwicklung abweichen. Sobald sie fertig sind und die verschiedenen Testphasen bestanden haben, werden sie wieder zu Entwicklungsfunktionen hinzugefügt
- / fix_develop ist eine Gruppe von Funktionen, die Korrekturen für Fehler aus früheren Versionen enthalten, die nicht zu dringend sind, um einen Hotfix zu starten.
Während sich die App weiterentwickelt, verfolgen wir mit dem UX-Team und anderen Stakeholder-Teams eine stärkere A / B-Teststrategie, bei der neue Versionen zwei Versionen haben und basierend darauf, wie unsere Benutzer die eine oder andere Version mögen, der endgültige Master werden Version, solange sie für unsere Benutzer sinnvoll sind.
Nachdem dies erklärt wurde, lautet die Frage : Welche Strategien haben Sie verwendet oder empfohlen, um Code von A / B- Testversionen in gitflow zu verwalten?
Die Optionen, die ich in Betracht gezogen habe, sind irgendwie inkonsistent, z. B. Verzweigung von A- und B-Zweigen vom Master und anschließende Verknüpfung des Release-Zweigs mit dem einen oder anderen, wobei ich nicht weiß, wie ich mit der Trennung des enthaltenen Codes vom Release-Zweig zum Feature umgehen soll Geäst. Eine weitere Option ist das Erstellen von A- und B-Zweigen und das Entwickeln von A- und B-Zweigen, was für meine Teamkollegen nach zu vielen Zweigen und Verwirrung klingt.
Ich höre deine Meinung, danke!
Update: Die von uns entwickelte App ist eine Android-App und wir implementieren die A / B-Tests mithilfe der PlayStore-Plattform für A / B-Tests. Dazu müssen zwei APKs erstellt und eine davon mit einem Rollout% hochgeladen werden. Um die Dinge einfacher zu halten, und da Änderungen manchmal größer sind als nur eine Tastenposition, haben wir beschlossen, keinen eigenen Schalter für A- und B-Tests in einer einzigen APK hinzuzufügen.
Antworten:
Ich habe es immer so gesehen, als hätte ich eine einzige Codebasis, die beide Seiten / Ansichten / Formulare bedienen kann.
dh. Die Funktion wird mit zwei oder mehr Konfigurationen gekennzeichnet und bereitgestellt, oder die Methode "Bekommt der Benutzer A oder B" selbst ist Teil der App.
In diesem Fall haben Sie nur die eine Version des Codes, sodass Ihre Quellcodeverwaltung nicht ins Spiel kommt.
Dies ist weitaus vorzuziehen als die Alternative, mehrere Versionen der Codebasis mit unterschiedlichen Funktionen beizubehalten. Diese gehen in der Regel sehr schnell auseinander und Sie müssen dieselben Funktionen am Ende mehrmals implementieren.
Im Allgemeinen würde ich vorsichtig sein und den Umfang der Unterschiede einschränken, die A und B beide haben können, damit sie in eine generische Switch-Methode (z. B. Ansicht A oder Ansicht B) eingesteckt werden können und Sie die Gründe für unterschiedliche Statistiken verstehen können Sie verlassen Ihre Tests. zB war die Umsatzsteigerung mit der Tastenfarbe oder den Preisformeln verbunden?
Bearbeiten. zur Klärung der App
Sie können weiterhin Feature-Flags in einer Play Store-App haben und die Codebasis in mehr als eine Apk packen.
quelle
Ich stimme @Ewan zu, dass Feature-Flags der richtige Weg sind. Auf diese Weise können Sie dem Erstellungsprozess etwas hinzufügen, das APK entweder für einen A-Test oder einen B-Test bereitstellt. Aber wenn Sie eine Idee wollen, die keine Feature-Flags verwendet, ist hier eine, die ich nicht ausprobiert habe.
Sie können den allgemeinen Code in eine separate Bibliothek in einem separaten Repository ziehen. Anschließend verfügt jede Testversion über ein eigenes Repository mit einem eigenen Gitflow- und Master-Zweig, der bereitgestellt werden kann.
Dies erfordert am Anfang mehr Aufwand, da der gesamte allgemeine Code in die Bibliothek (en) gezogen werden muss, auf die dann im Repository verwiesen wird. Ich glaube jedoch, dass dies nach der Ersteinrichtung die Entwicklung neuer Funktionen für den A / B-Test rationalisieren kann.
** Auch dies ist nur eine Idee und nichts, was ich persönlich getan habe.
quelle
Da Ihre App bereits ausgeführt wird und einige Benutzer hat, schlage ich eine der folgenden Optionen vor:
Quellcodeverwaltung
In Bezug auf A / B-Tests möchte ich Folgendes klarstellen:
Ab diesem Punkt können Sie zwei Strategien verwenden:
In beiden Fällen entfernen Sie nach dem Experiment einfach den Code für die veraltete Funktion / den veralteten Ablauf.
quelle