Unser Entwicklungsteam hat die GitFlow- Verzweigungsstrategie verwendet und es war großartig!
Kürzlich haben wir einige Tester eingestellt, um unsere Softwarequalität zu verbessern. Die Idee ist, dass jede Funktion von einem Tester getestet / überprüft werden sollte.
In der Vergangenheit haben Entwickler Features in separaten Feature-Zweigen bearbeitet und sie nach Abschluss wieder mit dem develop
Zweig zusammengeführt. Der Entwickler wird seine Arbeit selbst in diesem feature
Zweig testen . Jetzt mit Testern beginnen wir, diese Frage zu stellen
Auf welchem Zweig sollte der Tester neue Funktionen testen?
Offensichtlich gibt es zwei Möglichkeiten:
- auf dem einzelnen Feature-Zweig
- auf dem
develop
Ast
Testen auf Entwicklungszweig
Anfangs glaubten wir, dass dies der sichere Weg ist, weil:
- Die Funktion wird mit allen anderen Funktionen getestet, die
develop
seit Beginn der Entwicklung mit dem Zweig zusammengeführt wurden. - Konflikte können früher als später erkannt werden
- Dies erleichtert dem Tester die Arbeit, er hat immer nur mit einem Zweig (
develop
) zu tun . Er muss den Entwickler nicht fragen, welcher Zweig für welches Feature bestimmt ist (Feature-Zweige sind persönliche Zweige, die ausschließlich und frei von relevanten Entwicklern verwaltet werden).
Die größten Probleme dabei sind:
Der
develop
Zweig ist mit Fehlern verschmutzt.Wenn der Tester Fehler oder Konflikte findet, meldet er diese an den Entwickler zurück, der das Problem im Entwicklungszweig behebt (der Feature-Zweig wurde nach dem Zusammenführen abgebrochen). Danach sind möglicherweise weitere Korrekturen erforderlich. Durch das
develop
Festschreiben oder Zusammenführen mehrerer Teilsequenzen (wenn ein Zweig zum Beheben der Fehler erneut vom Zweig neu erstellt wird ) wird das Zurücksetzen des Features aus demdevelop
Zweig nach Möglichkeit sehr schwierig. Es gibt mehrere Funktionen, diedevelop
zu unterschiedlichen Zeiten mit dem Zweig zusammengeführt und dort fixiert werden . Dies ist ein großes Problem, wenn wir eine Version mit nur einigen Funktionen in derdevelop
Branche erstellen möchten
Testen auf Feature Branch
Also überlegten wir noch einmal und beschlossen, Features in den Feature-Zweigen zu testen. Bevor wir testen, führen wir die Änderungen vom develop
Zweig zum Feature-Zweig zusammen (holen Sie den develop
Zweig ein). Das ist gut:
- Sie testen die Funktion weiterhin mit anderen Funktionen im Mainstream
- Weiterentwicklungen (z. B. Fehlerbehebung, Konfliktlösung) verschmutzen den
develop
Zweig nicht. - Sie können leicht entscheiden, die Funktion erst dann freizugeben, wenn sie vollständig getestet und genehmigt wurde.
Es gibt jedoch einige Nachteile
- Der Tester muss den Code zusammenführen und bei Konflikten (sehr wahrscheinlich) den Entwickler um Hilfe bitten. Unsere Tester sind auf Tests spezialisiert und können nicht codieren.
- Ein Feature kann getestet werden, ohne dass ein anderes neues Feature vorhanden ist. Beispiel: Merkmal A und B werden beide gleichzeitig getestet. Die beiden Merkmale sind sich nicht bewusst, da keines von beiden mit dem
develop
Zweig zusammengeführt wurde. Dies bedeutet, dass Siedevelop
erneut gegen den Zweig testen müssen, wenn beide Features ohnehin mit dem Entwicklungszweig zusammengeführt werden. Und Sie müssen daran denken, dies in Zukunft zu testen. - Wenn Feature A und B beide getestet und genehmigt werden, aber beim Zusammenführen ein Konflikt festgestellt wird, glauben beide Entwickler für beide Features, dass dies nicht seine eigene Schuld / Aufgabe ist, da sein Feature-Zweig nach dem Test verzweigt. Die Kommunikation ist mit einem zusätzlichen Aufwand verbunden, und manchmal ist jeder, der den Konflikt löst, frustriert.
Oben ist unsere Geschichte. Mit begrenzten Ressourcen möchte ich vermeiden, alles überall zu testen. Wir suchen immer noch nach einem besseren Weg, um damit umzugehen. Ich würde gerne hören, wie andere Teams mit solchen Situationen umgehen.
Antworten:
So machen wir das:
Wir testen die Feature-Zweige, nachdem wir den neuesten Entwicklungszweigcode auf ihnen zusammengeführt haben. Der Hauptgrund ist, dass wir den Entwicklungszweigcode nicht "verschmutzen" möchten, bevor eine Funktion akzeptiert wird. Falls ein Feature nach dem Testen nicht akzeptiert wird, wir aber andere Features veröffentlichen möchten, die bereits bei der Entwicklung zusammengeführt wurden, wäre das die Hölle. Entwickeln ist ein Zweig, aus dem eine Veröffentlichung erfolgt, und sollte sich daher besser in einem freigebbaren Zustand befinden. Die lange Version ist, dass wir in vielen Phasen testen. Analytischer:
Was halten Sie von diesem Ansatz?
quelle
Nein, nicht, besonders wenn 'wir' der QS-Tester ist. Das Zusammenführen würde das Lösen potenzieller Konflikte beinhalten, was am besten von Entwicklern (sie kennen ihren Code) und nicht von QS-Testern (die so schnell wie möglich testen sollten) durchgeführt wird.
Lassen
feature
devel
Sie den Entwickler eine Neubasis seines Zweigs über dem Zweig durchführen und verschieben Sie diesenfeature
Zweig (der vom Entwickler als Kompilieren und Arbeiten über dem neuestendevel
Zweigstatus bestätigt wurde).Das ermöglicht:
develop
, jedoch nur dann, wenn von GitHub / GitLab kein Konflikt erkannt wird.Jedes Mal, wenn der Tester einen Fehler erkennt, meldet er ihn dem Entwickler und löscht den aktuellen Feature-Zweig.
Der Entwickler kann:
feature
Ast.Allgemeine Idee: Stellen Sie sicher, dass der Zusammenführungs- / Integrationsteil vom Entwickler ausgeführt wird, und überlassen Sie die Tests der Qualitätssicherung.
quelle
Der beste Ansatz ist die kontinuierliche Integration , bei der die allgemeine Idee darin besteht, die Feature-Zweige so häufig wie möglich mit dem Entwickler-Zweig zusammenzuführen. Dies reduziert den Aufwand für das Zusammenführen von Schmerzen.
Verlassen Sie sich so weit wie möglich auf automatisierte Tests und lassen Sie Builds automatisch mit Unit-Tests von Jenkins starten. Lassen Sie die Entwickler die gesamte Arbeit mit dem Zusammenführen ihrer Änderungen in der Hauptniederlassung erledigen und Unit-Tests für den gesamten Code bereitstellen.
Die Tester / QS können an Codeüberprüfungen teilnehmen, Unit-Tests abhaken und automatisierte Integrationstests schreiben, die der Regressionssuite hinzugefügt werden, wenn die Funktionen abgeschlossen sind.
Weitere Informationen finden Sie unter diesem Link .
quelle
Wir verwenden das, was wir "Gold", "Silber" und "Bronze" nennen. Dies könnte als Prod, Inszenierung und Qa bezeichnet werden.
Ich bin gekommen, um dies das Schmelztiegelmodell zu nennen. Dies funktioniert gut für uns, da wir auf der Geschäftsseite einen enormen Bedarf an Qualitätssicherung haben, da die Anforderungen im Vergleich zu den technischen Daten schwer zu verstehen sind.
Wenn ein Fehler oder eine Funktion zum Testen bereit ist, wird sie in "Bronze" umgewandelt. Dies löst einen Jenkins-Build aus, der den Code in eine vorgefertigte Umgebung überträgt. Unsere Tester (übrigens keine Supertechniker) haben einfach einen Link getroffen und kümmern sich nicht um die Quellcodeverwaltung. In diesem Build werden auch Tests usw. ausgeführt. Wir haben diesen Build hin und her verschoben und den Code tatsächlich in die Testumgebung übertragen, wenn die Tests (Einheit, Integration, Selen) fehlschlagen. Wenn Sie auf einem separaten System testen (wir nennen es Lead), können Sie verhindern, dass die Änderungen in Ihre QA-Umgebung übertragen werden.
Die anfängliche Angst war, dass wir viele Konflikte zwischen diesen Merkmalen haben würden. Es kommt vor, dass Feature X den Anschein erweckt, als würde Feature Y kaputt gehen, aber es ist selten genug und hilft tatsächlich. Es hilft dabei, eine breite Palette von Tests außerhalb des scheinbaren Kontextes der Änderung durchzuführen. Durch Glück werden Sie oft herausfinden, wie sich Ihre Veränderung auf die parallele Entwicklung auswirkt.
Sobald ein Feature die Qualitätssicherung bestanden hat, verschieben wir es in "Silber" oder "Inszenierung". Ein Build wird ausgeführt und die Tests werden erneut ausgeführt. Wöchentlich übertragen wir diese Änderungen auf unseren "Gold" - oder Produktbaum und stellen sie dann in unserem Produktionssystem bereit.
Entwickler beginnen ihre Änderungen mit dem Goldbaum. Technisch könnte man von der Inszenierung ausgehen, da diese bald steigen werden.
Notfallkorrekturen werden direkt in den Goldbaum geworfen. Wenn eine Änderung für die Qualitätssicherung einfach und schwierig ist, kann sie direkt in Silber übergehen, das den Weg zum Testbaum findet.
Nach unserer Veröffentlichung verschieben wir die Änderungen in Gold (Prod) in Bronze (Test), um alles synchron zu halten.
Möglicherweise möchten Sie die Basis neu erstellen, bevor Sie sie in Ihren Staging-Ordner verschieben. Wir haben festgestellt, dass das Löschen des Testbaums von Zeit zu Zeit ihn sauber hält. Es gibt Zeiten, in denen Funktionen im Testbaum aufgegeben werden, insbesondere wenn ein Entwickler das Programm verlässt.
Für große Funktionen für mehrere Entwickler erstellen wir ein separates gemeinsames Repo, fügen es jedoch gleich in den Testbaum ein, wenn wir alle bereit sind. Die Dinge neigen dazu, von der Qualitätssicherung abzuprallen. Daher ist es wichtig, dass Sie Ihre Änderungssätze isoliert halten, damit Sie sie hinzufügen und dann in Ihren Staging-Baum einfügen / quetschen können.
"Backen" ist auch eine schöne Nebenwirkung. Wenn Sie eine grundlegende Veränderung haben, möchten Sie eine Weile sitzen lassen, es gibt einen schönen Platz dafür.
Denken Sie auch daran, dass wir frühere Releases nicht pflegen. Die aktuelle Version ist immer die einzige Version. Trotzdem könnten Sie wahrscheinlich einen Master-Backbaum haben, in dem Ihre Tester oder Ihre Community sehen können, wie verschiedene Mitwirkende interagieren.
quelle
Ich würde mich nicht nur auf manuelle Tests verlassen. Ich würde das Testen jedes Feature-Zweigs mit Jenkins automatisieren. Ich habe ein VMWare-Labor eingerichtet, um Jenkins-Tests unter Linux und Windows für alle Browser auszuführen. Es ist wirklich eine großartige Cross-Browser- und plattformübergreifende Testlösung. Ich teste die Funktion / Integration mit Selenium Webdriver. Meine Selentests laufen unter Rspec. Und ich habe sie speziell geschrieben, um sie von jRuby unter Windows zu laden. Ich führe traditionelle Unit-Tests unter Rspec und Javascript-Tests unter Jasmine durch. Ich habe Headless-Tests mit Phantom JS eingerichtet.
quelle
In unserem Unternehmen können wir keine agile Entwicklung verwenden und benötigen für jede Änderung durch das Unternehmen eine Genehmigung. Dies verursacht viele Probleme.
Unser Ansatz für die Arbeit mit GIT ist folgender:
Wir haben "Git Flow" in unserem Unternehmen implementiert. Wir verwenden JIRA und nur genehmigte JIRA-Tickets sollten in Produktion gehen. Für die Testgenehmigung haben wir es mit einem separaten Testzweig erweitert.
Schritte zur Bearbeitung eines JIRA-Tickets sind:
Durch die Aufteilung jeder Anforderung in eine eigene Funktion wird sichergestellt, dass nur genehmigte Änderungen in die Produktion übernommen wurden.
Der gesamte Prozess sieht folgendermaßen aus:
quelle