Verwenden von Testzweigen in Git


11

Wir haben jemanden (nennen wir ihn Ted), der für das Testen neuer Funktionen und Fehlerbehebungen verantwortlich ist.

Wir verwenden Git und GitHub . mastersollte / ist immer bereit und developmentist der Ort, an dem wir neue Funktionen oder Fehlerbehebungen festschreiben / zusammenführen, jedoch erst, nachdem sie von Ted getestet wurden.

Das Projekt ist in PHP.

Ich möchte, dass der Testprozess so abläuft:

  1. Ein Entwickler möchte eine neue Funktion zu arbeiten (sagen wir mal die Funktion / Bug # 123 als Ted in der issue tracker dokumentiert), so zieht er origin/developmentan developmentauf seinem lokalen Repository und erzeugt einen neuen Zweig (sagen wir mal issue-123) von dort.
  2. Sobald er mit seiner Arbeit zufrieden ist, verpflichtet er sich und schiebt seinen neuen Zweig zu origin.
  3. Ted stellt test.ourproject.com/choose-brancheine Verbindung zu den Zweigen her und sieht eine Liste der eingeschalteten Zweige. Er originschaltet sich ein issue-123(dies sollte über die Webseite möglich sein). Dann fährt er fort test.ourproject.com, testet die Webanwendung zum Teufel (er ist wirklich erbarmungslos) und nach einigem Hin und Her mit dem Entwickler ist er mit der Funktion zufrieden.
  4. Ted sagt dem Entwickler, dass er issue-123auf developmenton zusammenführen kann origin.
  5. Spülen und wiederholen.

Für den dritten Schritt könnte ich etwas hacken, das den Job erledigt (Zweige von einer bestimmten Seite anzeigen und wechseln), aber ich denke, dass das, was ich beschrieben habe, ein sehr häufiges Muster ist.

Meine Frage lautet also: Ist dies ein guter / nachhaltiger / wartbarer Workflow für die Verzweigung? Können Sie Ihre Antwort unter Berufung auf einige Beispiele anderer Projekte untermauern, die diesem Workflow folgen?


"testet die Hölle aus der Webapp heraus (er ist wirklich rücksichtslos) und nach einigem Hin und Her mit dem Entwickler ist er mit der Funktion zufrieden." - Diese Person muss dem Genie nahe sein. Weiß er tatsächlich, worum es in dem fraglichen Code geht? Es gibt Projekte wie dieses, aber ich bezweifle wirklich die Ergebnisse von Schritt 3.
SChepurin

Ich hätte klarer machen sollen, dass issue-123auf den Fehler / die Funktion Nr. 123 verwiesen wird, da Ted jeden Fehler / jede neue Funktion in unserem Issue-Tracker dokumentiert.
cpa

@cpa: Dann mach es klarer. Die Fragen können bearbeitet werden.
Jan Hudec

@ SChepurin: Der Tester muss nichts über den Code wissen. Sie benötigen lediglich eine Liste der erforderlichen Funktionen und Fehler sowie Testfälle.
Jan Hudec

1
@cpa Ich bin mir nicht ganz sicher, wonach du suchst. Sie möchten eine Software, mit der Tester herausfinden können, welche Zweige zum Testen verfügbar sind, und die Zweige für sie wechseln? Oder ein Prozess für Tester zum Folgen?
mjs

Antworten:


5

Der Zweig-Workflow klingt sehr nach gitflow http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow und es gibt Support-Tools. Es wird dringend empfohlen.

Wenn es nur einen Tester gibt, klingt Ihr Testworkflow gut, aber wenn mehrere Personen anwesend sind, kann die Entwicklung zwischen Start und Ende wechseln, und natürlich sollte der Test idealerweise nach jeder Zusammenführung vollständig durchgeführt werden. Hier kann automatisiertes Testen wirklich helfen, oder ein langsamer (gründlicher) Tester wird möglicherweise nie fertig!

Ein weiteres Problem besteht darin, dass es bei vielen Features und Zweigen zeitaufwändig wird, Features zu einem Release zu mischen und abzugleichen (oder nach dem Akzeptieren und Zusammenführen zu entfernen) oder wenn Features voneinander abhängig sind. Das Problem besteht darin, dass Sie vorübergehend versucht werden, den Verlauf (Festschreiben / Löschen eines Commits oder Zusammenführen) für einen PUBLISHED-Zweig neu zu schreiben, dh für einen Zweig, der in ein Multidev-Repo verschoben wurde. Dies schreibt die öffentliche Geschichte neu. Es kann zum Guten oder zum Bösen getan werden, und selbst wenn es zum Guten getan wird, kann es den Unachtsamen Probleme bereiten, und es wird empfohlen, es zu vermeiden, damit die Frage niemals auftaucht. Einige Workflows für Integrationszweige machen dies jedoch sehr verlockend. Wenn Sie also einen starken Schutz für solche Zweige haben (z. B. Einschränkungen für Gitolite pro Benutzerzweig) und die Leute solche Aktivitäten erwarten, fahren Sie daher immer mit ihrem Code für einen solchen Zweig fort - seien Sie vorsichtig!

Ich möchte auch empfehlen, http://sethrobertson.github.com/GitBestPractices/ zu lesen, das all diese Themen behandelt und viele gute Referenzen enthält.


git-flowist nicht genau das, wonach ich gesucht habe, aber es ist definitiv etwas, was wir brauchen! Vielen Dank!
cpa

2

Ich bin nicht sicher, ob die Umschaltseite selbst ein allgemeines Muster ist. Bei den meisten Projekten muss der Tester dies wahrscheinlich einfach mit dem Befehl git auschecken.

Der allgemeine Ansatz klingt definitiv vernünftig.

Google hat sogar Gerrit geschrieben , um einen ähnlichen Stil zu unterstützen. Es geht mehr darum, den Code zu überprüfen, aber das Genehmigen der Integration umfasst normalerweise sowohl das Überprüfen als auch das Testen. Normalerweise ist es auch mit einem Continuous Integration Server verbunden, der zuerst alle Einsendungen erstellt (ich bin nicht sicher, ob sie Jenkins in Google verwenden, aber ich glaube, ich habe irgendwo geeignete Konnektoren gesehen).

Git selbst verwendet eine leichte Variation des Themas. Der Betreuer verfügt über ein Skript, das alle ausstehenden Übermittlungen in einem Zweig zusammenführt, der aufgerufen wird pu(vermutlich für "vorgeschlagene Aktualisierungen"; der Zweig wird jedes Mal gelöscht und neu erstellt, da die ausstehenden Übermittlungen häufig neu basiert). Dies wird dann von verschiedenen Personen getestet. Wenn es in Ordnung ist, werden die Einsendungen, die als vollständig gelten, zusammengeführt next(das ist dasselbe wie bei Ihnen development). Wenn nicht, testet jemand die einzelnen Einsendungen, um festzustellen, welche fehlerhaft sind. Dies macht es für den Tester etwas einfacher, da er die meiste Zeit nicht die Zweige wechseln muss. Sie berichten einfach, ob die Testintegration funktioniert.


1

Wenn Ihre Tests nicht manuell, sondern automatisch durchgeführt werden, wird Travis (ein CI-System für GitHub) meiner Meinung nach so ziemlich das tun, was Sie wollen - es führt automatisch Tests für alle Pull-Anforderungen aus. ( Weitere Informationen zu diesem Vorgang, einschließlich Screenshots. )

Beachten Sie, dass Tests nicht für den Zweig ausgeführt werden, sondern für den Zweig, nachdem er mit dem Master zusammengeführt wurde. (dh was Sie nach dem Zusammenführen des Zweigs mit dem Master erhalten würden - Sie können sicher sein, dass die Tests nach dem Zusammenführen weiterhin erfolgreich ausgeführt werden.)

Wenn dem Zweig Commits hinzugefügt werden, werden die Tests erneut ausgeführt. (Obwohl das Hinzufügen von Commits zum Master aus irgendeinem Grund die Tests nicht erneut auszuführen scheint.)


Was ist, wenn Tests auf dem Zweig fehlschlagen? Möchten Sie wirklich Code auf dem Master mit fehlgeschlagenen Tests haben? ... das auf dem Zweig selbst abgeholt werden könnte, bevor es zum Master verschmolzen wird? Persönlich denke ich, dass nur Code, der alle Einheiten-, Integrations- und anderen Tests erstellt und besteht, jemals in Master zusammengeführt werden sollte, da hier Release-Builds angesiedelt sind.
Ash

@Ash Der Code wird nicht tatsächlich mit dem Master zusammengeführt. Soweit ich weiß, werden die Tests im Wesentlichen auf einem temporären Zweig ausgeführt, der das Ergebnis der Zusammenführung des zu testenden Zweigs mit dem Master ist.
MJs
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.