Angenommen, ich habe 14-tägige Sprint-Iterationen, in denen ich mehrere Geschichten für neue Funktionen, einige Verbesserungen und einige zu behebende Fehler habe. Ich setze diese Änderungen auch ein, wenn sie fertig sind. Ich warte nicht auf das Ende des Sprints.
Mein Problem ist - wie kann man die semantische Versionierung von Produkten verfolgen, die so entwickelt und gewartet wurden? Wenn es alle 14 Tage veröffentlicht wird, wird es einfach sein, ich werde die Versionsnummer erhöhen und alle Änderungen im Änderungsprotokoll notieren. Was aber, wenn Änderungen kontinuierlich bereitgestellt werden? Sollte die Version jedes Mal erhöht werden, wenn etwas bereitgestellt wird? Oder sollte ich warten, bis der Sprint endet, und danach einen "Lebenslauf" erstellen und die Versionsnummer nur einmal pro Iteration unabhängig von der tatsächlichen Bereitstellung erhöhen? Was sind Best Practices für die semantische Versionierung in Agile?
EDIT: Um meine Bedürfnisse besser zu erklären, möchte ich zunächst ein Änderungsprotokoll für die Stakeholder. Ich glaube nicht, dass sie nach jeder bereitgestellten Änderung an einem neuen Datensatz im Änderungsprotokoll interessiert sein werden.
quelle
Antworten:
Für ein typisches Release-Management möchten Sie, dass eine Build-Nummer von Ihrem Build-System generiert wird, damit die DLLs bei jeder Bereitstellung versioniert werden. Auf diese Weise können Sie später überprüfen, welche Version auf einem bestimmten Server bereitgestellt wird.
Ihre "Marketing" -Version, die normalerweise in Versionshinweisen enthalten oder auf Ihrer Website veröffentlicht wird, sollte nicht in jeder Version aktualisiert werden. Diese Versionshinweise sollten gesammelt und gruppiert werden, wahrscheinlich zeitlich mit dem Ende Ihres Sprints.
quelle
Ob das klassische semantische Versionsschema "MAJOR.MINOR.PATCH" sinnvoll ist, hängt davon ab, für wen Sie es bereitstellen, und insbesondere davon, wann und wie oft Sie es für den Endbenutzer bereitstellen . Das Schema ist am nützlichsten, wenn Sie mit der stabilen Version "4.5" arbeiten, bei der Sie mit 4.5.0 beginnen. Die Versionen 4.5.1, 4.5.2 usw. enthalten nur Fehlerbehebungen, während Sie intern bereits an Version 4.6 arbeiten.
Wenn Sie Ihrem Endbenutzer beispielsweise einen "stabilen Zweig" bereitstellen, geben Sie ihm eine Version 4.5.0 für die Erstbereitstellung und 4.5.1, 4.5.2, wenn Sie einen Patch veröffentlichen. In Ihrer internen "agilen" Entwicklung und Mid-Sprint-Bereitstellung können Sie bereits eine Version 4.6 haben, nennen Sie es einfach eine "Beta-Version". Wenn Sie es mitten im Sprint bereitstellen, fügen Sie die automatisch generierte Build-Nummer wie "4.6.beta Build 123" hinzu. Wenn Ihr Sprint endet, weisen Sie ihm "4.6.0" zu und ändern Sie die Versionsnummer für den nächsten Sprint intern auf "4.7". Das Beginnen mit ".0" ist nur eine Konvention. Sie können auch das ".0" zum Kennzeichnen von Beta-Versionen verwenden und mit ".1" für Ihre Endbenutzer beginnen. IMHO ist das Wort "Beta" viel ausdrucksvoller und sagt allen, dass der Sprint "noch nicht abgeschlossen ist".
Wenn Sie mit jeder Beta-Version ein vollständiges Änderungsprotokoll für Endbenutzer veröffentlichen, liegt es an Ihnen, aber zumindest am Ende des Sprints sollte das Änderungsprotokoll abgeschlossen sein. Wenn Sie dem Endbenutzer einen Bugfix zur Verfügung stellen, sollten Sie auch ein Update durchführen die Geschichtsdokumente.
In vielen Open-Source-Produkten wie Inkscape, Firefox oder 7-zip finden Sie die Strategie, zwei getrennte Zweige freizugeben, einen "stabilen" Zweig mit semantischen Versionsnummern und einen "Entwicklungszweig", der mit Build-Nummern oder ähnlichem gekennzeichnet ist.
Wenn Sie jedoch nicht mit separaten Stabilitäts- und Entwicklungszweigen arbeiten und täglich eine neue Version für Ihren Endbenutzer freigeben, sollten Sie auch täglich eine Versionsnummer erhöhen. In einem solchen Fall spiegeln die Versionsnummern "4.5.1", "4.5.2", ... wahrscheinlich Ihre individuellen Bereitstellungen wider und geben nicht den Unterschied zwischen Fehlerkorrekturen und anderen Änderungen an. Das kann in Ordnung sein, es ist einfach keine klassische "semantische Versionierung" mehr. In diesem Szenario können Sie auch die Versionen 4.5, 4.6, 4.7, 4.8 bereitstellen, die keinen wirklichen Unterschied ergeben.
Bezüglich Ihrer Frage zu Einträgen in Ihrem Änderungsprotokoll: IMHO, wenn etwas für den Endbenutzer sichtbar ist, lohnt es sich, einen Eintrag im Änderungsprotokoll vorzunehmen, sobald Sie die Änderung bereitstellen. Wenn Sie beispielsweise Funktionsumschaltungen verwenden und Änderungen an einer halbgebackenen Funktion vornehmen, die für den Benutzer noch nicht aktiviert ist, gehört diese nicht zu einem Änderungsprotokoll. Wenn Sie nur ein Refactoring durchführen, ohne dass eine Änderung für den Benutzer sichtbar ist, gehört dies nicht zu einem Änderungsprotokoll. Wenn Sie einen Fehler beheben, der einige Benutzer betroffen haben könnte, gehört dieser definitiv zum Änderungsprotokoll - und sollte dort gleichzeitig mit der Bereitstellung des Bugfixes erwähnt werden. Und es spielt keine Rolle, ob Sie täglich, monatlich oder jährlich veröffentlichen.
quelle
Ich würde Build-Nummern verwenden. Normalerweise entspricht eine Build-Nummer der höchsten Version des Versionskontrollsystems. Wenn die Build-Nummer am Montag 1745 wäre und am Dienstag 5 Änderungen überprüft wurden, wäre die Build-Nummer am Dienstagabend 1750.
Machen Sie dann eine kurze Zusammenfassung dessen, was sich zwischen 1745 und 1750 geändert hat.
Jedes Mal, wenn Sie die Versionsnummer Ihres Systems aktualisieren, können Sie alle kurzen Zusammenfassungen aus den Builds addieren, um die Änderungen von der letzten zur neuen Versionsnummer zu erhalten.
quelle
Meine bevorzugte Methode, die ich seit mindestens einigen Jahren verwende, besteht darin, die Anzahl nach Abschluss jeder Geschichte zu erhöhen. Dies bedeutet, dass die am Ende des Sprints veröffentlichten Versionen nicht fortlaufend sind, z. B. nach 1.2.3 finden Sie möglicherweise 1.5.2 anstelle von 1.4.0.
Im Änderungsprotokoll können Sie entweder die Zwischenversionen mit den entsprechenden Beschreibungen auflisten oder einfach alle Änderungen in der "freigegebenen" Version gruppieren und die dazwischen liegenden Versionen überspringen.
Anfangs hatte ich Angst, dass Benutzer die "Lücken" zwischen den Versionsnummern als problematisch empfinden würden, aber sobald sie davon wissen, ist dies in der Praxis kein Problem. Der große Vorteil ist, dass das Erhöhen der Anzahl nach jeder Story den Prozess weniger fehleranfällig macht - Sie müssen nicht die gesamte Arbeit ab 2 Wochen überprüfen, um zu entscheiden, wie die nächste Versionsnummer aussehen wird -, wenn Sie sich eine einzelne Story ansehen . Darüber hinaus geben die "Sprünge" der Versionsnummern zwischen den einzelnen Versionen eine grobe Schätzung der Anzahl der Änderungen an der Version. Alles in allem habe ich festgestellt, dass dieses System gut funktioniert (dies war bei unternehmensinternen Kunden der Fall, aber wenn Sie bereits in einem agilen Release-Zyklus arbeiten, sollte es auch bei externen Kunden funktionieren).
quelle