Gute Versionsnummern für Programme vergeben
DGerade bei größeren Projekten machen gute Versionsnummern für Programme Sinn. Ich bin bei der Recherche auf einen Standard für die Versionsnummern-Vergabe auf eine interessante Seite gestoßen die ich als Quelle für eigene Software ab nun verwenden werde. Eventuell ist das für den einen oder anderen von euch auch interessant.
Gute Versionsnummern für Programme vergeben
Auf der Seite semver.org findet man eine sehr ausführliche und gute Beschreibung wie ordentliche Versionsnummern für Programme funktionieren. Es wird eine Nummerierung mit folgender Regel vorgeschlagen:
MAJOR.MINOR.PATCH
- MAJOR
Die Major Nummer wird erhöht, wenn die Software zur vorherigen Version inkompatibel wird. - MINOR
Die Minor Nummer wird erhöht bei neuen Funktionen der aktuellen Version hinzugefügt werden. - PATCH
Die Patch Nummern sind nur Bugfixes, behobene Fehler. Das sind sowohl Softwarefehler als auch Security Updates.
Warum sollte man Versionnummern verwenden?
Ist eine berechtigte Frage die jeder unerfahrene Programmierer stellen wird. Bei kleinen Projekten ist es durchaus legitim keine Nummern zu vergeben. Jeder Programmierer der schon mal in der so genannten „Dependency Hell“ gelandet ist, wird es besser wissen. Eine Software ist selten eine einmalige Aufgabe. Gerade erfolgreiche Software die von vielen Anwendern verwendet wird muss regelmäßig angepasst und erweitert werden. Das sind technische Anpassungen, neue Schnittstellen oder rechtliche Rahmenbedingungen. Je dynamischer das Umfeld, desto wahrscheinlicher sind laufende Änderungen.
Ohne kluger Versionierung läuft man Gefahr, dass unterschiedliche Versionen der selben Software nicht mehr kompatibel sind. Jedes größere Softwareprojekt führt Versionsnummern ein mit einer detaillierten Beschreibung was, wann wo geändert wurde und warum. Dadurch ist gewährleistet, dass das Softwareprodukt auch in Zukunft flexibel weiterentwickelt werden kann. In der Praxis wird das so aussehen, dass ein Teil der Entwickler bereits an der neuen Major oder Minor Version arbeiten. Ein kleineres Team arbeitet parallel an der Wartung älterer Software und erstellt dort Bugfixes und nimmt Verbesserungen vor.
Versionsnummern in der Praxis
Anhand einiger Beispiele wird sofort ersichtlich, dass sich zahlreiche bekannte Softwareprojekte an diesen Standard halten.
- WordPress 4.6.1
- Joomla 3.6.3
- Typo 3 7.6.11
- Magento 2.1.2
- Linux Kernel 4.8.4
- …
Man sieht anhand der kleinen Liste an Beispielen das diese Open Source Projekte alle mit der selben Logik von Versionsnummern arbeitet. Gerade diese Standardisierung hilft den Anwendern der Software ungemein. Als Systemadmin wird man bedenkenlos Bugfixes einspielen, also Versionsupdates der dritten Zahl. Für Minor Änderungen kann man das schnell in einem Testsystem durchtesten und dann Live schalten. Erst bei einer neuen Major Nummer wird man die komplette Software (zum Beispiel der Magento Online Shop) neu aufsetzen. Als Entwickler kann man durch diese Thematik dem Kunden auch recht gut die Kosten für solche Umstellungen erklären. Major Änderungen erfordern meist ein komplett neues Projekt. Minor Anpassungen gehen meist recht schnell mit Aktualisierung und Tests bzw. kleinen Anpassungen bei der Software Peripherie. Bugfixes sollten immer aktuell gehalten werden, damit man nicht Ziel eines Angriffs von Außen wird.
Fazit
Die Weiterentwicklung von Software wird transparenter und nachvollziehbarer mit guten Versionsnummern. Durch eine Standardisierte Versionsnummernvergabe sind Updates auf projektübergreifend nachvollziehbar und vergleichbar.
Achtet ihr bei euren Projekten auf sinnvolle Versionsnummer?
Hi,
also bei uns sind wir auch seit langem am Überlegen.
Deine vorgeschlagene Variante benutzen wir in den meisten Projekte, doch haben wir damit schon einige Probleme gehabt. Zum Beispiel wenn jemand Lokal etwas testet mit neuen Versionen von Bibliotheken, dann die neue Version hochlädt, aber die neue Bibliothek vergisst. Das hat bei uns schon oft zu Fehlern geführt. Darum sind wir auch Continous Delivery umgestiegen. Wir haben uns dazu entschieden, dass nur noch unser CI (Jenkins) Versionen bauen darf. Da ist es dann aber schwer MAJOR.MINOR.PATCH zu vergeben, also nehmen wir einfach die Jenkins Build Nummer.
Klappt in manchen Projekten gut in anderen nicht so gut 😀
Sehr interessant danke. Ich glaube Microsoft macht das mit dem Build von Windows auch so.
Hallo Niklas,
das mit Versionsnummer und Jekins funktioniert sehr gut!
Da die Version Nummer bestimmt was ich ändern kann, darf ich kann in einem Patch 3 stelle nicht in Interface ändern zum Beispiel ist das mit Jekins kein problem die erste stellen steh einfach in einer datei im Branch der source controll. Die Build nummer wir als 4 stelle angehängt damit ich noch weiß von welchem build die kommt.
ist jetzt eine Version „fertig“ wird der Trunc / master die Version erhöht und der source in eine Branch verschoben so kann man noch hot fixed für eine „alte“ Version machen. Wir nehmen da einfach die dritte stelle sie heiß ja Patch.
Der Counter bräuchte mal ein major Update oder vllt einen Bugfix?
„(Visited 42 times, 45 visits today)“
😛
Naja das sind die 3 Bots für Facebook, Twitter und Blogger die zählen offenbar nicht zur Gesamtsumme sehr wohl aber für den täglichen Counter…
Hey 😀
Ich habe jetzt ein Problem: Ich habe eine kleine Python-Bibliothek, die Daten von Individous ausliest. Da kann ich aber ja recht schlecht überhaupt über 1.0.0 kommen, weil was soll da inkompaktibel werden?
Daja, wie soll ich das denn dann machen?
Jede Schnittstelle ändert sich irgendwann. Sollte das doch niemals passieren, dann bleibt die Version einfach 1.0.0.