Wo sollte das QA-Team die Tests im Gitflow-Verzweigungsmodell durchführen?

23

Wir sind ein großes Team (10-12 Entwickler und 4 Entwickler), das an mehreren Projekten mit demselben Git-Repository arbeitet. Es ist ein Spring-Boot-basierter Backend-Webservice. Wir suchen eine gute Git-Verzweigungs- und Bereitstellungsstrategie. Wir haben auch ein QA-Team, das sicherstellt, dass unsere Funktionen wie erwartet funktionieren (bis zu einem gewissen Grad fehlerfrei).

Nachdem ich einige Artikel gelesen hatte, hatte ich das Gefühl, dass das Gitflow- Modell für uns gut funktionieren würde. Hier kommt meine Frage.

Wo sollte unser QA-Team unsere Funktionen testen?

  1. sollten sie auf dem Feature-Zweig testen, wo sie Fehler auslösen, und der Entwickler wird dies beheben. Sobald der QA-Test bestanden ist, werden wir zusammengeführt, um zu entwickeln. und QA wird wieder den Integerationstest in der Entwicklungsbranche durchführen.
  2. sollten wir alle funktionen (nach unittests und grundlagentests vom entwickler) zusammenführen um branch zu entwickeln und den qa von dort testen zu lassen. Fehlerbehebungen und Tests werden auch in der Entwicklung durchgeführt.

Ich bin gespannt, welche Herangehensweise für andere gut funktioniert hat.

Srini
quelle

Antworten:

14

QA sollte wahrscheinlich zweimal getestet werden.

Der erste Test sollte sich auf die spezifischen Änderungen beziehen und im Feature-Zweig durchgeführt werden. Auf diese Weise kann die Qualitätssicherung die spezifischen Änderungen testen und feststellen, ob die jeweilige Änderung wie angegeben abgeschlossen ist und sich wie erwartet verhält. Es gibt ihnen auch eine frühe Vorschau für die zweite Testrunde, was eigentlich für die Qualitätssicherung wichtig ist.

Ausgehend von meinem Hintergrund in verschiedenen regulierten Umgebungen muss der zweite Test entweder an einem Tag im Entwicklungszweig, der einem Release entspricht, oder am Release-Zweig oder vielleicht am Master-Zweig durchgeführt werden. Vor einer Veröffentlichung sollte QA den vollständigen Code testen, der bereitgestellt werden soll, bevor er bereitgestellt wird, und Sie sollten behaupten können, dass alles, was von QA getestet wurde, genau mit dem identisch ist, was für die Produktion bereitgestellt wird. Ich würde es vorziehen, dass nach einem Einfrieren des Codes ein Tag auf den Release-Zweig angewendet wird und die Qualitätssicherung dies testen würde. Änderungen würden in einem Entwicklungszweig vorgenommen, vor Ort überprüft und dann in einem neuen Tag im Veröffentlichungszweig erneut getestet. Diese Tags im Freigabezweig würden Freigabekandidaten entsprechen.

Ich mache hier ein paar Annahmen. Erstens haben Sie eine recht gute entwicklerbasierte Testabdeckung. Im Idealfall handelt es sich dabei um automatisierte Unit- und Integrationstests, die Entwickler ausführen, bevor sie Code in einem Zweig an die Qualitätssicherung senden. Entwickler möchten möglicherweise auch einige Erkundungstests in der Benutzeroberfläche durchführen, um sicherzustellen, dass die Dinge direkt vor dem QS-Test aussehen. Zweitens besteht eine gute Koordination zwischen Entwicklung und Qualitätssicherung, um die Änderungen so zu planen, dass eine ausreichende Qualitätssicherungszeit auf der Grundlage der Funktionen gewährleistet ist.

Thomas Owens
quelle
2
Einige Bedenken, die ich bei diesem Ansatz habe, sind: 1) Für jede Funktion muss eine Maschine bereitgestellt werden. Manchmal arbeiten wir an 5 Features, manchmal nur an Paaren. Vielleicht können wir Jenkins einrichten, um VMs hochzufahren? was macht jeder 2) qa muss wissen, welcher Build auf welcher Maschine installiert ist. 3) Ich habe mich gefragt, ob es überflüssig ist, da wir sowieso gründliche Tests im Release-Zweig durchführen werden.
Srini
4

Gute Frage. Ich glaube nicht, dass es eine "offizielle" richtige Antwort darauf gibt. Es hängt davon ab, wie schnell Sie testen können.

Das wesentliche Problem besteht darin, dass bei jeder Zusammenführung, Kompilierung oder Bereitstellung möglicherweise ein Fehler auftritt. Je weiter oben die Kette ist, die Sie testen, desto eher wissen Sie über Fehler Bescheid, aber desto öfter müssen Sie erneut testen.

Um sicherzugehen, dass Sie die von den Kunden verwendete Software getestet haben, müssen Sie die Live-Bereitstellung wirklich testen, bevor der Datenverkehr des Kunden (unter der Annahme einer Web-App) über ein blau / grünes Bereitstellungsmuster zu diesen Servern geleitet wird.

Aber offensichtlich ist es etwas spät am Tag, als Sie den Code zum ersten Mal überhaupt überprüft haben!

Wenn Sie einen Release-Zweig in einer Qa-Umgebung testen, können Sie das Risiko eingehen und die Live-Tests nur auf Rauchtests reduzieren. und wende Bugfixes auf den Release-Zweig an. Sie können jedoch nicht beurteilen, ob ein Feature vollständig ist, bevor Sie ein Release erstellen

Wenn Sie die Entwicklung testen, erhalten Sie Zweige mit Mini-Bugfix-Funktionen. Features werden noch zusammengeführt, bevor sie bewertet werden. Außerdem können Features für die nächste Version mit dem Testen der aktuellen Version kollidieren.

Wenn Sie Feature-Zweige testen, benötigen Sie eine Million Umgebungen und müssen die Reihenfolge der Zusammenführungen und Testabmeldungen orchestrieren. plus viel erneutes Testen.

Aus meiner Erfahrung würde ich empfehlen:

Schnelltest des Feature-Zweigs auf dem Dev-Rechner. Stellen Sie einfach sicher, dass die Funktion vollständig ist, und die Tester / Entwickler sind sich einig, was die Anforderungen bedeuten.

Tägliche Tests / automatisierte Tests für den auf QA-Servern implementierten Dev Branch. Hiermit können Sie alle Funktionen zusammen testen und mitteilen, wann Sie zur Veröffentlichung bereit sind.

Wenn alle Funktionen vorhanden sind, der Test jedoch noch nicht abgeschlossen ist. zB der Sprint ist beendet. Erstellen Sie einen Release-Zweig und stellen Sie ihn in einer zweiten qa-Umgebung bereit. Auf diese Weise können Fehlerbehebungen / Tests in Version 1 gleichzeitig mit den Funktionen in Version 2 fortgesetzt werden.

(Scrum Devotees werden sagen, du solltest nur Fehlerbehebungen in Sprint 2 vornehmen, aber lass uns praktisch sein)

Rauchtests vor dem Umschalten auf Live-Grün / Blau-Einsatz. Diese sind sehr wichtig, da Sie Konfigurations- / Umgebungsfehler feststellen werden, nach denen während der Entwicklung niemand wirklich sucht.

Ewan
quelle
-2

Ich stimme Thomas Owens zu. Sie sollten wahrscheinlich zweimal testen. Einmal im Feature-Zweig, bevor er zusammengeführt wird, und einmal im Hauptzweig, bevor Sie ihn freigeben.

Tatsächlich liebe ich diesen Workflow so sehr, dass ich ein Tool namens Topico entwickelt habe , das automatisch verfügbare Versionen Ihrer App für jede Pull-Anfrage erstellt und ausführt , wobei jede eine eigene Test-URL hat. Auf diese Weise kann Ihr QA-Team Feature-Zweige isoliert testen, ohne dass eine dynamische Testumgebung auf dem eigenen Computer eingerichtet werden muss.

Dieser Ansatz bedeutet, dass nur Code, der den menschlichen Test bestanden hat, jemals Ihren Hauptzweig erreicht und somit seine Integrität beibehält.

Ich habe dies bei einigen Unternehmen eingeführt und es hat unseren Veröffentlichungszyklen sehr geholfen. Wir sind jetzt in der Lage, Veröffentlichungen genau zu planen, und wir können viel besser verstehen, was wahrscheinlich in die nächste Veröffentlichung kommt und was auf eine zukünftige Veröffentlichung warten muss. Es gibt dir einfach viel mehr Selbstvertrauen.

nlyn
quelle
Ich kann nur davon ausgehen, dass die Ablehnung darauf zurückzuführen ist, dass mich jemand beleidigt hat, mein eigenes Werkzeug zu erwähnen. Dieses Tool geht speziell auf die Bedenken der OPs ein, die in den Kommentaren von Thomas Owens Antwort zum Ausdruck gebracht wurden, sodass ich nicht sicher bin, ob die Ablehnung gerechtfertigt war.
nlyn