Datum als Versionsnummer der Software

43

Softwareentwickler verwenden in der Regel kein Datum als Versionsnummer, obwohl das Format JJJJMMTT (oder dessen Abweichungen) solide genug aussieht, um verwendet zu werden. Stimmt etwas mit diesem Schema nicht? Oder gilt es nur für begrenzte Arten von Software (wie Eigenproduktionen)?

Donotalo
quelle
4
In einigen Fällen könnte es in Ordnung sein, aber dieses Schema kann nicht gut mit Verzweigungen oder dem Patchen von altem Code umgehen. Schauen Sie sich die Kommentare dieser Antwort an .
MikMik
8
Meinst du wie in Windows 95 oder MS Office 2010?
Mouviciel
2
Wenn Sie verhindern möchten, dass zwei Versionen am selben Tag erstellt werden, ist dies der Fall.
jeffo
2
@JeffO Durch Hinzufügen von HHmmSS können auch mehrere Releases pro Tag erstellt werden.
StuperUser
5
Häufig werden mehrere Hauptversionen parallel gepflegt, da neue Funktionen dazu neigen, neue Fehler zu verursachen. Ist 2012.01 besser als 2011.11 oder handelt es sich nur um eine Sicherheitspatch-Variante Ihrer langfristigen Support-Linie 2003.06?
Steve314

Antworten:

16

Dies ist etwas, das Sie aus verschiedenen Blickwinkeln betrachten müssen, um die Bedürfnisse der Benutzer sowie die Bedürfnisse der Software und Entwickler zu berücksichtigen.

Im Allgemeinen ist es Ihren Kunden egal, wie hoch die Versionsnummer der Software sein wird, solange sie wissen, dass sie etwas Neueres ausführen (dh Produkt 2012 ist neuer als Produkt 2010) und dass sie es wissen ist auf dem neuesten Stand, wenn Patches bereitgestellt werden können (z. B. Produkt 2012, Update 10). Daher bevorzuge ich aus Sicht des Kundenbrandings entweder benannte Versionen (z. B. Windows XP, Windows Vista), gefolgt von einer strengen Abfolge von Patches, die möglicherweise von Benutzern installiert werden.

Das heißt jedoch, dass das Schreiben von Software, die Dinge überprüft, die für den Benutzer einfach sind, dazu neigt, den Code unter der Haube viel schwerer zu schreiben. Daher bevorzuge ich das einfache Major.MinorVersionsschema, wenn auch nur, weil Sie einen einfachen Zahlenvergleich durchführen können, um zu überprüfen, ob etwas auf dem neuesten Stand ist, wie im Folgenden dargestellt:

// Check to see if we can handle the file version
if (this.Version < fileVersion) {
   throw new UnsupportedFileException("The file version is " + fileVersion.toString() + " which is not supported");
}
// Do stuff ...

Um dies in einen gewissen Kontext zu bringen, ist es mir im Allgemeinen egal, wie groß die Nebenzahl wird (dh 1.1024), wodurch das obige System weiterhin erfolgreich ausgeführt werden kann. Im Allgemeinen sind die Revisionsnummern nur für die interne Entwicklung von Interesse, und ich habe nicht einmal wirklich gesehen, dass sie sich auf Dinge auswirken, die weit über das bloße Vergeben einer zusätzlichen Nummer hinausgehen, um den Überblick zu behalten.

Die beiden oben genannten Schemata gelten jedoch nicht nur für Umgebungen, in denen eine kontinuierliche Bereitstellung verwendet wird (z. B. Stack Exchange). Daher bevorzuge ich in der Regel ein Datum, gefolgt von einer Revisionsnummer, wie sie auf dem Stack Exchange verwendet wird Websites. Der Grund dafür ist, dass sich die Versionen in der Umgebung für die kontinuierliche Bereitstellung zu häufig ändern und möglicherweise mehrere Versionen des Codes am selben Tag angezeigt werden, was die Versionsnummer und das aktuelle Datum rechtfertigt raus noch mehr. Theoretisch könnte man für alles nur die Revisionsnummer verwenden, aber mit dem aktuellen Datum können Sie wichtige Meilensteine ​​intern nachverfolgen, die die Diskussion erleichtern könnten.

rjzii
quelle
3
Wir haben auch eine kontinuierliche Bereitstellung und verwenden eine Hauptversion + das Datum. Es ist einfach der einfachste Weg, den Überblick zu behalten. Offen gesagt ist es einfacher, die Versionskontrolle abzufragen, um die Quelldateien für ein bestimmtes Datum abzurufen, als ständig Dateien markieren und auf diese Weise abfragen zu müssen.
NotMe
50

Das Problem bei der Verwendung eines Datums besteht darin, dass die Angaben anhand der Zählzahlen und nicht anhand des Fälligkeitsdatums geschrieben werden.

"Diese Funktionalität ist für Release 1 vorgesehen. Die andere Funktionalität ist für Release 2 vorgesehen."

Sie können in Spezifikationen nicht auf ein Datum verweisen, da das Veröffentlichungsdatum möglicherweise verpasst wird.

Wenn Sie nicht über einen solchen formalen Prozess verfügen, für den unterschiedliche Releases im Voraus identifiziert werden müssen, ist die Verwendung von Datumsangaben in Ordnung. Sie müssen der Mischung keine weitere Zahl hinzufügen.

Es ist unwahrscheinlich, dass Versionsnummern Daten enthalten, da ihr Kontext mit Spezifikationen verknüpft ist.
Build-Nummern enthalten wahrscheinlich Daten, da ihr Kontext mit dem Zeitpunkt des Builds verknüpft ist.

StuperUser
quelle
6
Ich würde argumentieren, dass Features häufig von einer Version zur nächsten verschoben werden und daher jegliche Dokumentation, die einem Kunden zur Verfügung gestellt wird, dass "Feature x in Version 2 enthalten sein wird", ebenfalls zum Scheitern verurteilt ist.
NotMe
@ ChrisLively Absolut. Spekulative Dokumentation und eine Sprache wie "wird" und nicht "wird erwartet" können sehr schmerzhaft sein. Ein guter Product Owner wird die richtigen Erwartungen setzen und realistisch planen.
StuperUser
2
@NotMe Right. Eine Spezifikation, die Versionen und Veröffentlichungsnummern über eine Handvoll Wochen hinaus plant, ist grundsätzlich zum Scheitern verurteilt, es sei denn, Sie sind bereit, die Veröffentlichung zu verschieben, bis die gewünschten Funktionen vollständig sind. Der aktuelle Trend geht jedoch dahin, häufig zu veröffentlichen, vorzugsweise in regelmäßigen Abständen. Das bedeutet, dass Sie keine Ahnung haben, welche Funktionen in welchen Releases enthalten sein werden.
Jules
27

Obwohl dieser Ansatz die beschriebenen Vorteile bietet, gibt es einige Nachteile, wenn Sie das Datum als Versionsnummer verwenden:

  • Datumsbasierte Versionen sind flach. Mit v2.1.3 können Sie die Versionsnummer, die Unterversionsnummer und die Unterversionsnummer anzeigen. Mit 20110119 können Sie nur sehen, wann es geschrieben wurde. Sie könnten Ihre datumsbasierten Versionen nach Monat gruppieren, aber es würde Ihnen trotzdem nichts sagen. Es kann mehrere Monate dauern, bis kleine Fehler behoben sind, und dann zwei Wochen, in denen viel Code geschrieben wurde, was zu einer Hauptversion führt. Daten sagen dir das nicht, normale Versionsnummern schon.

  • Wenn Sie die Version und möglicherweise die Versionsnummer wirklich wirklich täglich ändern müssen, kann dies darauf hinweisen, dass Sie keinen ordnungsgemäßen Veröffentlichungsprozess haben. Stattdessen ändert jeder das Material wild und befördert es auf Produktionsserver, wann immer er möchte. In diesem Fall liegt ein Problem mit dem Prozess vor, und die Verwendung eines anderen Versionsnummernschemas kann das Problem nicht lösen.

Goran Jovic
quelle
3
Ein Tag mit mehreren Releases ist kein Release-Problem. Dies könnte bedeuten, dass Sie ein großes Projekt haben, in dem mehrere Personen / Gruppen ständig daran arbeiten, Aktualisierungen zu veröffentlichen. Dies können Korrekturen oder einfach Verbesserungen sein.
NotMe
Außerdem sind datumsbasierte Versionen nicht "flacher" als "2.1.3". Weder haben Bedeutung ohne Kontext. Bei den meisten VCS ist das Herausziehen einer Reihe von Dateien nach Datum im Allgemeinen zuverlässiger als das Herausziehen nach einem Etikett. Aus dem einfachen Grund, dass Benutzer manchmal vergessen, einen bestimmten Satz von Dateien mit einem Versionsetikett zu versehen, vergisst das VCS jedoch nicht, das Update mit einem Datums- / Zeitstempel zu versehen.
NotMe
12

Versionen werden häufig verwendet, um Informationen darüber zu übermitteln, wie unterschiedlich eine bestimmte Version der Software von der vorherigen ist. Wenn Sie beispielsweise ein Upgrade von 1.0 auf 2.0 von Acme durchführen, handelt es sich theoretisch um ein bedeutendes Upgrade, das bedeutende Änderungen mit sich bringt.

Ein Upgrade von 1.0 auf 1.1 ist hingegen ein geringfügiges Upgrade und beinhaltet theoretisch geringfügige, inkrementelle Änderungen und Fehlerkorrekturen.

Es wäre schwierig, dies in einem Datumsformat darzustellen, obwohl Sie eine Mischung verwenden könnten. Zum Beispiel v1.0.YYYY.MMDD

JohnL
quelle
2
Schauen Sie sich an, wie Mozilla in letzter Zeit den Umgang mit Versionsnummern geändert hat. Früher hingen die Hauptversionsnummern für immer herum, jetzt scheint es alle paar Monate eine neue Hauptversion zu geben. Warum? - Als sie die Hauptversionsnummer nicht anstießen, glaubten viele Leute nicht wirklich, dass es irgendwelche neuen Funktionen gab.
Steve314
Ja, Chrome hat auch ein bizarres Versionsschema - ich denke, sie werden in ein oder zwei Jahren Probleme haben, wenn sie Version 21474836478.0 veröffentlichen. (Ok, ich übertreibe ein bisschen, aber sie werden irgendwann die dumme Zahl erreichen.)
JohnL
2
@JohnL: Ich glaube nicht, dass es dem durchschnittlichen Chrome-Nutzer wichtig ist, in welcher Hauptversion es sich befindet. Die Anwendung aktualisiert sich automatisch und "scheint" gleich zu bleiben, obwohl viele Änderungen vorgenommen wurden.
Spoike
@Spoike: Stimmt. Es interessiert mich hauptsächlich, weil ich die Secunia PSI verwende, die überprüft, ob Sie die neuesten Versionen der Dinge haben. Es sagt mir immer, dass Chrome 15.x nicht mehr funktioniert oder so
JohnL
Natürlich sind die Versionsnummern für den RSS-Standard nur mental.
JohnL
10

Ohne gute Ideen aus anderen Antworten zu wiederholen, habe ich ein Problem im Kopf, das noch nicht angesprochen wurde.

Wenn Sie einen Fork zwischen einer älteren Version aus Gründen der Abwärtskompatibilität und einer neuen Version für eine inkompatible Modernisierung durchführen, können Sie diese nicht anhand von Versionsnummern unterscheiden.

Zum Beispiel wurde der Linux-Kernel um das Jahr 2000 in den alten 2.4.x-Zweig verzweigt, der wahrscheinlich noch heute unterstützt wird und als 2.4.199 gilt, während die neue Version seit vielen, vielen Jahren 2.6 ist und 2.6.32 ist für ältere Systeme, aber 3.2 für die neuesten Kernel.

Wenn Sie Dokumentation zu Ihren Veröffentlichungen haben, werden Sie die Informationen verdoppeln und den Leuten mitteilen, dass die Version 20120109 im Jahr 2012 am 01/09 eingetroffen ist. Mh. Aber was ist, wenn es im letzten Moment eine Fehlererkennung gibt und eine Veröffentlichung um eine Woche verzögert wird, aber die Dokumentation, in der der Name erwähnt wird, bereits fertig ist, vielleicht gedruckt wird, die Presseinformationen sind raus und so weiter. Jetzt haben Sie eine Unstimmigkeit, die problematisch ist, wenn die Version 20120109 am 13.01.2012 eingetroffen ist.

In SQL wurde oft die Frage diskutiert, ob IDs semantische Informationen enthalten sollen, und das Ergebnis ist immer: Vermeiden Sie es wie die Hölle! Sie erstellen eine unnötige Abhängigkeit. Es kann nicht von Nutzen sein.

Ubuntu mit seinem 04/10-Schema hatte 2006 sein Problem, als die Version 6.04 verzögert wurde und 6.06 wurde. Im Jahr 3000 wird es bald das nächste Problem geben! :)

Benutzer unbekannt
quelle
1
Der neueste Linux-Kernel der 2.4-Serie ist 2.4.31 vom 01. Juni 2005 , obwohl Sie ihn mit einem Patch vom 09. August 2005 schrittweise auf 2.4.32-pre3 patchen können . Die neuesten offiziellen Kernel derstable Serie sind derzeit 2.6.32.54 (2012-01-12) und 3.1.10 (2012-01-18).
ein
6

Es gibt viele Softwarepakete, die das Datum tatsächlich als Version verwenden. Ubuntu kommt in den Sinn, wo ihre Version YY.MM ist. Die Build-Nummern für Microsoft Office-Produkte sind auch eine Kodierung des Build-Datums. Jeff Atwood schrieb einen Coding Horror-Blogeintrag über die Versionsnummerierung , einschließlich dieser Empfehlung:

Verwenden Sie nach Möglichkeit einfache Daten anstelle von Versionsnummern, insbesondere in den öffentlichen Namen von Produkten. Und wenn Sie unbedingt Versionsnummern intern verwenden müssen, machen Sie sie trotzdem zu Datumsangaben: Stellen Sie sicher, dass Sie das Erstellungsdatum an einer beliebigen Stelle in Ihrer Versionsnummer vermerken.

Meiner Meinung nach spielt es keine Rolle, solange Sie konsistent sind und in der Lage sind, von einer Build-Versionsnummer (was auch immer es ist) zu gehen und alle Artefakte, die in diesem Build stecken, aus Ihrem Versionskontrollsystem abzurufen. Die Benutzer interessieren sich in der Regel überhaupt nicht für die Versionsinformationen, sondern für die vom System bereitgestellten Funktionen. Versionsinformationen sind für die Entwickler nur von echtem Wert.

Thomas Owens
quelle
4

Verwenden Sie die semantische Versionierung. Auf diese Weise erhalten Sie eine Vorstellung davon, welche Änderungen zwischen den Versionen vorgenommen werden, ohne den Code selbst überprüfen zu müssen: http://semver.org/

EZ Hart
quelle
3

Die Verwendung von Versionsnummern zeigt, wie GROSS die Änderung ist

Zum Beispiel kann 2.4.3 bedeuten, dass Version 2 die Hauptänderung am gesamten System ist. .4 ist ein kleines Update. und die letzte .3 ist ein kleiner Bugfix für diese Version. Auf diese Weise ist leicht zu erkennen, wie viel sich zwischen den einzelnen Versionen geändert hat.

Trotzdem sehe ich immer noch, dass viele Leute Datumsangaben oder SCM-Revisionsnummern als Versionsnummern verwenden, solange Sie eine Möglichkeit haben, auf unterstützende Versionshinweise und die Dokumentation dessen, was für diese Version im Geltungsbereich war, zurückzugreifen, gibt es kein wirkliches Problem.

Daveo
quelle
3

Einige gute Antworten hier bereits, aber ich möchte auf einen Fall hinweisen, bei dem die Verwendung von Datumsangaben durchaus Sinn macht: kleine Bibliotheken oder Codeausschnitte, bei denen der Code wahrscheinlich häufig aktualisiert wird, jedoch in winzigen Teilen, ohne dass sich eine einzelne Version drastisch von der vorherigen unterscheidet einer.

Mit anderen Worten, ich spreche von Situationen, in denen es keine tatsächliche "Versionsnummer" gibt, sondern im Grunde eine Art quasi-tägliches Repository-Dump.

Wenn ich auf solche Dinge stoße, freue ich mich normalerweise über die Wahl, da es für mich nützlicher ist, zu wissen, dass ich ein relativ aktuelles Skript / eine relativ aktuelle Bibliothek anstelle einer bestimmten Version verwende.

Onkel Zeiv
quelle
3

Daten als Versionsnummer sind gut für das Marketing. Wenn Benutzer "Windows NT 5.0" verwenden, stellen sie möglicherweise nicht fest, dass es veraltet ist. Wenn Sie jedoch immer noch "Windows 2000" verwenden, werden Sie sofort wissen, dass es sich um ein 12 Jahre altes Betriebssystem handelt, und Sie werden aufgefordert, ein Upgrade durchzuführen.

Es erschwert jedoch die Unterscheidung zwischen "Haupt" - und "Neben" -Updates.

dan04
quelle
1
Und Marketing hilft beim Verkaufen ;)
c69
Warum sollten Benutzer ein Upgrade benötigen oder "ermutigt" werden, wenn die Software ihren Anforderungen entspricht (einschließlich eines angemessenen Sicherheitsniveaus)?
ein
3
Weil die Unterstützung dafür eingestellt wird und Sie keine Sicherheitsupdates mehr erhalten.
JohnL
3

Problem mit der Verwendung von Daten als Versionsnummern

Die Antworten hier sind gut, aber ich habe niemanden gesehen, der dieses Problem mit der Verwendung von Datumsangaben ansprach: Der Benutzer kann nicht feststellen, wie oft Änderungen vorgenommen wurden.

Ich versuche zu sagen, dass ich feststellen kann, dass Windows 3.1 und Windows 7 weit voneinander entfernt sind ... und möglicherweise nicht kompatibel sind. Windows 95 und Windows 2000 geben nur das Jahr an, in dem das Produkt eingeführt wurde.

Mit Python weiß ich beispielsweise, dass Version 2.7.2 von 2.4.6 entwickelt wurde. Wenn ich weiter schaue, sehe ich, dass Version 2.4.6 am 19. Dezember 2008 veröffentlicht wurde; und diese Version 2.7.2 wurde am 11. Juni 2011 veröffentlicht. Daraus kann ich eine Meinung über die Stabilität (dh die Häufigkeit der Veröffentlichung) eines Produkts ableiten.

Wenn stattdessen Python Veröffentlichungsdaten verwendet hätte, kann ich nicht wissen, wie diese Produkte verbunden sein könnten. Weitere Verwirrung würde sich ergeben, da Python 3.1.4 ebenfalls am 11. Juni 2011 veröffentlicht wurde (dasselbe wie Python 2.7.2).

Kurz gesagt, ich denke nicht, dass Datums-Versionierung für sich genommen wertvoll ist.

TheGeeko61
quelle
2

Ich mag diese Idee aus Gründen, die bereits von anderen beschrieben wurden, nicht. Verwenden Sie einfach das Schema major.minor.bugfix - es gibt einen Grund, warum die meisten Leute das so machen.

Aber was auch immer Sie tun: Wählen Sie ein Versionsnamensschema und bleiben Sie dabei . Tun Sie es nicht wie Windows, wo sie das Schema mit jeder Veröffentlichung ändern. Und machen Sie es nicht wie Android, wo jede Version eine API-Versionsnummer (8), eine Versionsnummer für Marketingzwecke (2.2) und einen blöden Namen (Froyo) hat.

Mike Baranczak
quelle
1

Datum als Version

Wenn Ihr Produkt nicht verkauft wird, ist es in Ordnung und wahrscheinlich nützlich, nur das Datum zu verwenden. Wenn Sie es verkaufen und Upgrades an Kunden durchführen, möchten diese ein Modell mit einem bestimmten Funktionsumfang kaufen. Es ist viel einfacher, sie bei einem Upgrade zu verkaufen, wenn dieses Modell einen eindeutigen Namen hat. Es spielt keine Rolle, um was es sich handelt, aber zum Beispiel kauft niemand wirklich das Ford-Auto vom 20. Januar 2012, das Kia-Modell soll es sein. Gleiches gilt für Software. Wenn Sie einen harten Modellnamen und eine harte Version angeben, unterscheidet sich die Funktionalität von der älterer Modelle. Für mich macht gerade ein Date das nicht, es heißt ich habe es dann gemacht, es könnte keine neuen Features haben.

Schema, das wir verwenden

Ich habe nicht behauptet, dass unser System eine klare Marke wie oben schafft. Wir verwenden jetzt ein vierteiliges Schema. Versionsnummer, Status, Datum und Prüfsumme.

1200_GLD_120120_F0D1

Dies ist möglicherweise übertrieben, aber es ermöglicht uns, mehrere Versionen des Builds für Version 1200 zu haben, die unsere Ingenieure verwenden können, und wir unterscheiden sie nach Datum. Der Status gibt an , ob es sich um eine interne Testversion, einen Kunden-Patch oder eine Goldversion handelt. Die Prüfsumme ist neu und ermöglicht es einem Techniker oder Kunden zu überprüfen, ob er tatsächlich die richtige von unserer Distribution heruntergeladen hat.

Wir könnten also eine Folge von haben

1200_TST_120110_EF45
1200_GLD_120120_F0D1
1201_FIX_120125_123E
1201_TST_120130_31A5
1201_TST_120131_FDFD

Wir beziehen uns normalerweise nur auf die Hauptversionsnummern des Kunden, dh "12". Ein Kunde erhält jedoch die neueste Goldversion von 12, dh 1200_GLD_120120_F0D1, es sei denn, er benötigt den Fix.

David Allan Finch
quelle
1

Nehmen wir an, einige Kunden verwenden Version 2 Ihres Produkts und einige haben ein Upgrade auf Version 3 durchgeführt. Dieses Upgrade ist keine leichte Entscheidung.

Angenommen, die letzte Version von Version zwei ist 2.3.2 und Version drei ist 3.0.3. Jetzt finden Sie eine Schwachstelle, die unbedingt behoben werden muss, sodass Sie 2.3.3 und 3.0.4 am selben Tag freigeben. Kannst du sehen, dass das Erscheinungsdatum völlig irrelevant ist? Möglicherweise haben Sie 2013 die Arbeit an Version 2 eingestellt und seitdem nur einige wesentliche Fehlerkorrekturen veröffentlicht. Das Datum ist im Vergleich zur Versionsnummer irrelevant.

gnasher729
quelle
-1

Ich finde es funktioniert super. Ich verwende es für interne Software (jjjj.mm.dd) und für Open Source-Software, die ich veröffentlicht habe.

Es funktioniert möglicherweise nicht in allen Fällen.

Scott Whitlock
quelle
In diesem Fall sehen wir nur "Es ist Neujahr!" Frohes neues Jahr...!
Yousha Aleayoub
-2

Technisch kann es kein Datum für die Versionsnummer verwenden, aber es kann eine Datumsnummer für den Kunden anzeigen. Zum Beispiel macOS 16.7.23 --- das bedeutet: 23.7.2016

Ich denke, Technologie ist nicht das Problem, das Problem ist, wie es sich anfühlt? Wenn Sie eine Datumsnummer verwenden, die Software lebendig machen könnte, so wie ein Mann, der Geburtstag hat. Jedes Jahr, in dem wir erwachsen werden, wächst das Gleiche wie Software.

Die Hausnummer sieht aus wie die Maschine, die Maschine, keine lebendige, keine lebendige.

Kanglando
quelle