Wann ist es angebracht, beim Hundefutter mit der nächsten Überarbeitung eines Werkzeugs zu beginnen?

9

Insbesondere arbeite ich an einem Tool, das ein DVCS- und Build-System integriert, aber ich stelle mir die Herausforderung vor, die sich für jeden ergeben würde, der ein "Meta" -Tool (Compiler, VCS, Build-System, Test Runner usw.) entwickelt möchten sich durch "Hundefutter" entwickeln .

Meine Frage lautet: Ab wann verwende ich in einem Release-Prozess im Scrum-Stil, der den Verzweigungsworkflow verwendet, eine neuere Version des Tools im Entwicklungszyklus des Tools?

Ich suche nach einem Prozess, um ein Gleichgewicht zwischen:

  • Verwenden Sie ständig die developVersion des Tools: Ich stelle fest, dass ich meine eigene Entwicklung unterbreche, wenn Änderungen vorgenommen werden.

  • Verwenden Sie ständig die masterVersion des Tools: Alle Probleme, die ich durch Hundefutter entdecke, sind Probleme, die bereits veröffentlicht wurden.

Jace Browning
quelle
Es kommt darauf an, was Sie erreichen wollen. Ist es nur Merchandising, sollte eine Master-Version ausreichen. Wenn Sie Fehler aufdecken möchten, sollten Sie lieber eine nächtliche verwenden.
Andy
@ GlenH7 Danke! Ich habe hier eine gestartet: meta.programmers.stackexchange.com/questions/6074/…
Jace Browning

Antworten:

5

Das erste, was zu tun ist, sind sehr gründliche automatisierte Offline-Regressionstests. Machen Sie das Bestehen dieser Tests zu einer Mindestanforderung für das, was Sie offiziell verwenden.

Zweitens benötigen Sie eine absolut einfache Möglichkeit, auf die vorherige Arbeitsversion zurückzugreifen, wenn Probleme auftreten, die Ihre automatisierten Tests nicht erkennen.

Zum Beispiel wurde mein Linux-Kernel für eine Weile benutzerdefiniert gepatcht. Ich würde meinen Kernel auf demselben Computer patchen und kompilieren, auf dem ich ihn verwenden wollte, was bedeutete, dass ich meine Entwicklungsumgebung verlieren könnte, wenn ich einen fehlerhaften Kernel erstellen würde. Deshalb habe ich darauf geachtet, immer einen bekannten guten Kernel in meinem GRUB-Menü zu behalten. Wenn ich also einen Fehler gemacht habe, war ich mit einem einfachen Neustart wieder in einer guten Entwicklungsumgebung.

Das mit einem Team zu koordinieren ist schwierig, aber ich nehme an, es geht hauptsächlich darum, jedem zu erlauben, einen Fallback einzuleiten und die Gründe mitzuteilen. In der Versionskontrolle besteht eine Möglichkeit, dies zu bestimmen, in einer Art last_known_goodZweig, irgendwo zwischen developund masterin Ihrem Workflow. Dort wird nichts verschoben, bis Sie einen Build erfolgreich mit Hundefutter gefüttert haben.

Karl Bielefeldt
quelle
1
Ich mag die Idee, einen separaten Zweig zu haben (vielleicht dogfood), der "irgendwo zwischen developund master" liegt. Vielleicht releasemüssen Zweige vom dogfoodZweig kommen.
Jace Browning
3

Wenn dieses Tool zur Erstellung von Software in Produktionsqualität verwendet wird (insbesondere wenn es rekursiv verwendet wird, dh um sich selbst zu entwickeln), würde ich Ihre Vorab-Testbemühungen verstärken und auf das Füttern von Hunden warten, bis die Veröffentlichung stabil genug ist, dass Sie es sind ziemlich sicher, dass Sie den Produktionscode nicht durch die Verwendung brechen werden.

Wenn Sie warten müssen, bis die Master-Version dieses Maß an Vertrauen hat, dann sei es so.

Robert Harvey
quelle
Bedeutet dies, dass "gefälschte" (nicht produktive) Projekte erstellt werden, die für Integrationstests verwendet werden sollen?
Jace Browning
Wenn Sie damit interne Zwischenfreigaben meinen, dann ja.
Robert Harvey
1

Git ist auch ein solches Werkzeug und macht offensichtlich auch Hundefutter. Aber es tut es in unterschiedlichem Ausmaß in verschiedenen Umgebungen. Auf den öffentlichen Servern wird nur Release ausgeführt, während Entwickler normalerweise entweder mit next(das ist der Name des Git-Projekts für "Entwickeln") oder pu(noch mehr Entwickeln als Entwickeln) arbeiten. Jeder Entwickler, der durch ein Problem blockiert ist, kann zur nextoder zur masterletzten Version zurückkehren, wenn er durch etwas blockiert wird und das Haupt-Repository nicht betroffen ist. Daher können Probleme durch Verweisen darauf behoben werden.

Das Verzweigungsmodell ähnelt dem obigen mit leicht unterschiedlichen Namen. masterDas ist, woraus große Releases gemacht werden, maintist der Release-Zweig für das nächste Point-Release, nextähnelt dem Entwickeln mit einem kleinen Unterschied, dass Features zusammengeführt werden können, um separat zu beherrschen, nachdem sie bereits im nächsten sind, anstatt dass das gesamte nächste zusammengeführt wird.

Es gibt einen zusätzlichen Zweig pu. Dies wird durch Zusammenführen aller Feature-Zweige erstellt, die für die Integration in Betracht gezogen werden next(der Zweig wird jedes Mal verworfen und neu erstellt). IIRC wird nur veröffentlicht, wenn es die Testsuite besteht. Zuletzt habe ich mir angesehen, dass Junio, der Betreuer, die Skripte ausgeführt hat, um sie regelmäßig von Hand zu erstellen, aber solche Skripte könnten jede Nacht durch kontinuierliche Integration ausgeführt werden, und ich glaube, Gerrit erstellt sie sogar automatisch.

Das ist also die Antwort. Sie füttern die meisten Entwicklungsversionen, die Sie in Entwicklungsumgebungen haben, verwenden jedoch die vorherige Version zum Erstellen von Versionen.

Jan Hudec
quelle
Steht pufür etwas?
Jace Browning
@ JaceBrowning: Ich glaube, es steht für "vorgeschlagene Updates". Ich habe jedoch keine Referenz.
Jan Hudec
1

Basierend auf der akzeptierten Antwort werde ich den Verzweigungsworkflow erweitern , um Verzweigungen ähnlich den folgenden zu verwalten:

  • master: verschmilzt mit release-*bei Schließung
  • dogfood: Zweige von master; enthält Korrekturen, die beim Füttern von Hunden festgestellt wurden; verschmilzt ab dem developZeitpunkt, an dem die Software für den internen Gebrauch als "stabil" eingestuft wird; Der Kopf dieses Zweigs kann bei Bedarf in der Zeit zurückversetzt werden
  • develop: Zweige von master; Enthält laufende Änderungen, Bugfixes sowie Zusammenführungen von dogfoodund feature-*Zweigen
  • feature-*: Zweige von develop; enthält Änderungen für eine bestimmte neue Funktion
  • release-*: verzweigt ab dem dogfoodZeitpunkt, an dem die Software für den externen Gebrauch als "stabil" eingestuft wird; Enthält Dokumentationsaktualisierungen und kleinere Bugfixes vor dem Zusammenführen mitmaster
Jace Browning
quelle