055.2 Lektion 1
Zertifikat: |
Open Source Essentials |
---|---|
Version: |
1.0 |
Thema: |
055 Projektmanagement |
Lernziel: |
055.2 Produktmanagement / Release Management |
Lektion: |
1 von 1 |
Einführung
Die meiste Software entwickelt sich im Laufe der Zeit weiter. Das ist ja das Schöne an Software: Sie ist leicht zu ändern und erfordert nur eine Netzwerkübertragung, um für alle Benutzer wieder aktuell zu sein. Entwickler fügen neue Funktionen hinzu, beheben Fehler und Sicherheitslücken, portieren die Software auf neue Hardware und ergänzen Schnittstellen zu beliebten Programmen und Diensten. Ändert sich die Software, werden neue Versionen oder Revisionen veröffentlicht.
Diese Lektion behandelt die Logistik für Planung und Durchführung von Änderungen an Software, die Art und Weise, wie Teams mit mehreren Versionen umgehen, Konventionen für die Benennung der Versionen und andere organisatorische Aspekte der Entwicklung. Dies alles sind Aufgaben des Projektmanagements. Die Logistik, die sich speziell auf Zeitpunkt, Benennung und Kontrolle von Releases bezieht, wird als Release Management bezeichnet.
Merkmale von Releases
Releases unterscheiden sich in Bezug auf Stabilität, Abwärtskompatibilität und Unterstützung. Wir werden jedes dieser Konzepte in den folgenden Abschnitten untersuchen.
Stable und unstable Releases
Stabilität ist eine wichtige Eigenschaft, die Benutzer von Software erwarten. Die erste Frage, die sich viele stellen, wenn sie von einer neuen Version hören, lautet entsprechend: “Wie stabil ist sie?” Mit anderen Worten: Funktioniert sie zuverlässig, oder stürzt sie ab? Beschädigt sie Daten oder liefert sie falsche Ergebnisse?
Stabilität kann auf einem Spektrum gemessen werden, und viele setzen Software auch gerne ein, wenn sie noch einige Fehler enthält. Aber Entwicklungsteams neigen dazu, die Dinge einfach zu halten, und unterscheiden binär stable und unstable Versionen.
Stabilität bezieht sich sowohl auf die Fehleranfälligkeit der Software als auch auf sichtbare Veränderungen für Außenstehende bzw. Benutzer. Entwickler könnten eine Version einer Softwarebibliothek als unstable betrachten, weil Funktionen geändert wurden, die Programmierer aufrufen (mit der Folge, dass die Entwickler ihre Software für die nächste Version möglicherweise umschreiben müssen). Die Software könnte aber auch aus Benutzersicht instabil sein, weil Entwickler eine Funktion entfernt haben.
Gibt es Gründe, eine unstable Version zu veröffentlichen? Ja. Sie ist wertvoll, weil Benutzer neue Funktionen schon in einer frühen Projektphase ausprobieren und auf Fehler testen können.
Die meisten Projekte geben sehr frühe Versionen der Software für wichtige Kunden zum Testen frei, die sogenannten Alpha Releases. Natürlich sollte man diese Releases nicht in produktiven Arbeitsumgebungen einsetzen — sie sind nur zum Testen gedacht. Tester sollten Alpha Releases auf Rechnern außerhalb der Arbeitsumgebung laufen lassen, da Fehler in diesen Releases die auf dem Computer gespeicherten Daten beschädigen könnten.
Steht die Software nach Ansicht der Entwickler kurz davor, als stabil zu gelten, veröffentlicht das Projekt normalerweise eine weitere Testversion, die als Beta Release bezeichnet wird. Diese sollte immer noch nicht auf Produktivsystemen eingesetzt werden, sondern ausschließlich für Tests.
Sowohl bei Alpha- als auch bei Beta-Versionen nutzen Entwickler standardisierte Verfahren, um Fehler zu melden und den Fortschritt bei der Fehlerbehebung zu verfolgen.
Bei manchen Projekten gibt es zwischen der Beta- und der stable Version eine weitere Phase, in der die Entwickler alle Fehler behoben haben und das Produkt als fertig erachten. Sie bezeichnen die Version als Release Candidate und stellen sie ausgewählten Kunden oder Interessenten zur Verfügung, damit diese den Einsatz neuer Funktionen planen können.
Es ist wichtig, dass Benutzer neue Funktionen ausprobieren und Feedback dazu geben, bevor die Entwickler die Schnittstellen fertigstellen und neue Funktionen aufwendig stabilisieren.
Abwärtskompatibilität
Die meisten Projekte bemühen sich um Abwärtskompatibilität (Backward Compatibility): sie versuchen, Funktionen, die in älteren Versionen vorhanden waren, zu erhalten. Kompatibilität kann auf mehreren Ebenen bestehen: Indem Entwickler beispielsweise Abwärtskompatibilität für die Programmierschnittstelle von Anwendungen (API) erhalten, stellen sie sicher, dass alter Quellcode weiterhin funktionieren kann, auch wenn er möglicherweise neu kompiliert werden muss. Wenn Hardwarehersteller oder Betriebssystementwickler Abwärtskompatibilität für das Application Binary Interface (ABI) erhalten, sorgen sie dafür, dass alte ausführbare Dateien auf neuen Versionen der Hardware laufen.
Wir werden uns später ansehen, wie Projekte mit fehlender Abwärtskompatibilität umgehen, wenn sie sich also entscheiden, alte Schnittstellen für die neuen Funktionen oder Umgebungen nicht mehr unterstützen.
Support und End of Life (EOL)
Idealerweise wird Software immer besser, wenn Entwickler Probleme entdecken und beheben. Aber mit der Zeit können Funktionen aufgrund von Änderungen in der Softwareumgebung nicht mehr funktionieren. Außerdem werden neue Fehler entdeckt, die zuvor nicht aufgefallen waren.
Neue Versionen kombinieren oft Sicherheits- und Fehlerkorrekturen mit neuen Funktionen. Vielleicht möchten Sie die neuen Funktionen gar nicht haben — vielleicht bevorzugen Sie sogar eine alte Funktion, die die Entwickler entfernt haben, um Platz für neue Funktionen zu schaffen. Aber die meisten Benutzer aktualisieren auf die neue Version für die Sicherheitskorrekturen, die sie vor Angriffen schützen.
Manche nutzen alte Softwareversionen weiter und verzichten auf ein Upgrade, weil die neue Version in ihrer Umgebung anders oder gar nicht funktioniert. Wenn Unternehmen Geld für Upgrades verlangen, ist das für manche Kunden ebenfalls ein Grund, kein Upgrade durchzuführen; bei Open Source muss man für Upgrades allerdings selten etwas zahlen.
Entwickler kommen den Benutzern alter Versionen nach Möglichkeit entgegen, indem sie Fehler in den alten Versionen beheben, ohne die neuen Funktionen hinzuzufügen, die die Software möglicherweise instabil machen. Natürlich können Entwickler dies nicht unbegrenzt leisten; irgendwann werden sie eine alte Version nicht mehr reparieren und die Benutzer auffordern, entweder ein Upgrade durchzuführen oder die Korrekturen selbst vorzunehmen.
Das Beheben von Fehlern und Sicherheitslücken wird als Support (Unterstützung) für die Software bezeichnet. Er unterscheidet sich von dem Support, den Helpdesks und andere anbieten, um Benutzer beim Einsatz der Software zu unterstützen. Was das Versionsmanagement angeht, so ist eine unterstützte Version eine, für die die Entwickler Fehlerkorrekturen zusagen, während sie dies bei einer nicht unterstützten Version nicht (mehr) tun.
Beachten Sie, dass “Support” meist für Software angeboten wird, die von Unternehmen oder großen Organisationen entwickelt wird. Kleinere Open-Source-Projekte, die stark vom Einsatz Freiwilliger abhängig sind, tun oft ihr bestes, um Fehler zu beheben und neue Versionen herauszubringen, ohne dies garantieren zu können. Sie sehen oft auch keine Notwendigkeit, alte Versionen zu reparieren; da der Code Open Source ist, können Benutzer, die nicht aktualisieren wollen, jemanden dafür bezahlen, eine alte Version zu reparieren.
Wird Support angeboten, veröffentlichen die Entwickler einen Zeitplan, der angibt, wie lange sie eine Version unterstützen werden. Das Datum, zu dem der Support endet, wird als End of Life (EOL) der Software bezeichnet. Benutzer können die alte Version bis zum EOL einsetzen und erwarten, dass Fehler behoben werden; nach dem EOL müssen sie jedoch ein Upgrade durchführen oder das Risiko tragen.
Große Projekte, wie beispielsweise die Debian-Distribution von GNU/Linux, bieten Versionen mit Long Term Support (LTS) an. Das bedeutet, dass die Entwickler eine bestimmte Anzahl von Jahren Fehler beheben. Kunden, die großen Wert auf Stabilität legen, scheuen sich vielleicht, Softwareversionen zu installieren, die zahlreiche Änderungen enthalten; die Änderungen könnten Prozesse unterbrechen, auf die sich die Kunden verlassen. Solche Kunden, vor allem große Unternehmen und Institutionen, schätzen die Sicherheit von LTS-Versionen.
Softwareversionierung: Major, Minor und Patches
Wir haben gesehen, dass Versionsverwaltung komplex ist: Einige Versionen beheben Fehler, andere fügen neue Funktionen hinzu, und die Versionen können sich in Hinblick auf Stabilität unterscheiden. Entwickler geben durch die Bezeichnung an, wie groß die Änderungen an der Software in einer Version sind. Diese Konventionen, denen fast alle Projekte bei der Kennzeichnung von Versionen folgen, nennt man semantische Versionierung.
Nehmen wir die frühe Geschichte des Linux-Kernels als Beispiel: Linus Torvalds bezeichnete die erste stabile Version als 1.0. Als er den Kernel verbesserte, nannte er die nachfolgenden Versionen 1.1, 1.2 usw. Die 1 vor dem Punkt steht für die Major Version (Hauptversion), die Zahlen nach dem Punkt bezeichnen die Minor Version (Unterversion). Man kann davon ausgehen, dass Version 1.2 mehr Funktionen bietet als Version 1.1.
Aber es gab auch unzählige kleine Veröffentlichungen, die manchmal nur ein paar Fehler behoben. Um anzuzeigen, dass diese Änderungen nur geringe Auswirkungen auf die Funktionalität des Kernels hatten, fügte Torvalds eine dritte Nummer hinzu, die Patch (also “Flicken”) genannt wurde. So wurde 1.0 auf 1.0.1 aktualisiert, dann 1.0.2 und so weiter.
Die Patch-Nummerierung beginnt bei einer neuen Minor Version wieder bei 0, und die Nummerierung der Minor Versions startet wieder bei 0, sobald eine neue Major Version erscheint.
Entwickler fassen mehrere Versionen mit einem x
zusammen; so steht 1.x beispielsweise für alle Versionen unter der Major Version 1.
Aber was ist der Unterschied zwischen einer Änderung, die zu einer neuen Minor Version führt, und einer Änderung, die eine neue Major Version verdient? In der Regel vergehen Jahre, bevor eine neue Major Version veröffentlicht wird, und sie muss bedeutende Aktualisierungen enthalten.
Im Allgemeinen versuchen Entwickler, Abwärtskompatibilität bei Versionsänderungen zu bewahren. Ist dies nicht möglich, sollten sie die Major Version erhöhen.
Bei einer Versionsnummer kleiner als Null — also beispielsweise 0.9 — zeigt die führende Null an, dass es sich um eine frühe Version der Software handelt, die instabil und noch nicht für den produktiven Einsatz geeignet ist. Es gibt auch keine Garantie für Abwärtskompatibilität, bis Entwickler Versionen veröffentlichen, die mit 1 beginnen.
Alpha-Versionen werden in der Regel durch das Anhängen von “a" oder "`alpha” an die Versionsnummer gekennzeichnet, wie etwa 3.6alpha; bei Beta-Versionen ist es entsprechend “b” oder “beta”.
Der Lebenszyklus von Softwareprodukten
Das Leben eines Entwicklers ist keineswegs einfach. Jeder will etwas: Der eine will den Fehler im Bildschirmlayout so schnell wie möglich behoben haben, ein anderer hingegen den Fehler bei der Benennung von Dateien. Benutzer fordern neue Funktionen, und wenn verschiedene Entwickler parallel an verschiedenen Funktionen arbeiten, stellen sie fest, dass die Änderungen des einen die des anderen zunichte machen können.
Projektmanagement und das so genannte Versionsmanagement als ein Teilbereich befassen sich mit diesen Fragen. Normalerweise übernimmt ein leitender Projektmitarbeiter die Verantwortung für diese Managementaufgabe.
Wie Menschen durchlaufen auch Softwareversionen einen Lebenszyklus. Jede Version beginnt mit einer Diskussion über neue Funktionen und andere erforderliche Änderungen, durchläuft Entwicklungs- und Testphasen und wird planvoll ausgeliefert.
Planung und Roadmaps
Entwickler versuchen, weit im Voraus festzulegen, welche Änderungen sie an einem Produkt vornehmen wollen. Im kommerziellen Umfeld sprechen sie mit ihren Kollegen vom Marketing, die filtern und zusammenfassen, was ihre Kunden wünschen. Open-Source-Projekte hängen eher von den Ideen ab, die von Entwicklern und Benutzern eingereicht und in einer Datenbank, dem Issue Tracker, erfasst werden. Wenn Benutzer die Behebung eines Fehlers oder eine neue Funktion wünschen, erstellen sie ein sogenanntes Issue. Die Entwickler setzen dann Prioritäten für die Änderungen und entscheiden, wer sich um welches Issue kümmert.
Wie aber werden Änderungen ausgewählt und priorisiert? Das kann ein ungeordneter Prozess sein, aber gute Projektmanager in Open-Source-Projekten ermutigen zu breitem Input und stellen gleichzeitig sicher, dass Entscheidungen getroffen werden. Einige Projekte halten sogar Konferenzen ab, auf denen die Teilnehmer die Prioritäten diskutieren.
Eine öffentliche Roadmap, also ein Fahrplan für die geplanten Änderungen, legt die Schritte fest. Sie kann viele Versionen und Jahre in die Zukunft abbilden. Jeder Schritt wird als Milestone (Meilenstein) bezeichnet und kann mit einem Zieldatum verbunden sein.
Release-Planung
Es gibt grundsätzlich zwei Ansätze, Releases zu planen: zeitbasiert oder funktionsbasiert. Ein Projekt kann ein Release in regelmäßigen Abständen — zum Beispiel alle sechs Monate — planen und alles aufnehmen, was zu diesem Zeitpunkt fertig ist. Alternativ kann das Projekt bestimmte Funktionen für ein Release vorsehen, und den Entwicklern so viel Zeit lassen, wie sie für die Fertigstellung dieser Funktionen benötigen.
Wenn der Zeitpunkt der Veröffentlichung näher rückt, legt der Release Manager die Termine für die Alpha-, die Beta- und die stabile Version fest. Die Teammitglieder prüfen regelmäßig die Fehlerberichte und versuchen, ihre Arbeit so zu planen, dass sie die Meilensteine einhalten.
Um eine neue Version fertigzustellen, muss ein Projekt ab einem gewissen Punkt aufhören, Ideen für neue Funktionen anzunehmen, und sich darauf konzentrieren, die vorhandenen Funktionen korrekt umzusetzen. Dieser Zeitpunkt wird als Feature Freeze bezeichnet.
Dokumentation für Produktversionen
Roadmaps erläutern, wie bereits erwähnt, die Funktionen, die die Entwickler in jede Version aufnehmen wollen. Die Version wird von einer Liste der Änderungen begleitet, die als Changelog (Änderungsprotokoll) bezeichnet wird. Im Allgemeinen listet das Changelog neue Funktionen, Änderungen an bestehenden Funktionen, Funktionen, die entfernt wurden, Funktionen, die die Entwickler in Zukunft entfernen wollen (sogenannte deprecated Features), und Fehlerbehebungen auf.
Daher können Changelogs recht detailliert ausfallen. Die Benutzer müssen besonders auf die Funktionen achten, die entfernt wurden oder veraltet sind, da sich möglicherweise Programme und die Art der Bedienung ändern. Natürlich versuchen die Entwickler, nur die Funktionen zu entfernen, die niemand mehr benötigt.
Diese Aufgabe ist zeitaufwändig, und es kann leicht passieren, dass Entwickler eine Änderung übersehen und in der Dokumentation vergessen.
Geführte Übungen
-
Was unterscheidet eine stable von einer unstable Version?
-
Würden Sie eine Funktionsänderung zwischen einer Version 2.6.14 und einer Version 2.6.15 erwarten?
-
Würden Sie eine Funktionsänderung zwischen einer Version 2.6.0beta und einer Version 2.6.0 erwarten?
-
Warum sollten Sie nicht davon ausgehen, dass die Version 1.0 abwärtskompatibel mit der Version 0.9 ist?
-
Wenn Sie eine Sicherheitslücke in einer Version nach dem Feature Freeze, aber vor der Veröffentlichung entdecken, können Sie diese beheben lassen?
Offene Übungen
-
Angenommen Sie möchten eine Version einer Open Source Software nach dem EOL weiter verwenden, weil sie eine Funktion enthält, die Sie benötigen. Was können Sie tun, um sie weiterhin zu nutzen?
-
Welche Kriterien führen dazu, dass eine Fehlerbehebung oder ein Feature Request gegenüber anderen bevorzugt wird?
Zusammenfassung
In dieser Lektion wurden die wichtigsten Merkmale von Versionen beschrieben: Stabilität, Abwärtskompatibilität und Unterstützung. Wir haben die Bedeutung von Versionsnamen und -nummern sowie die wichtigsten Aspekte des Versionsmanagements, einschließlich der Dokumentation, besprochen.
Antworten zu den geführten Übungen
-
Was unterscheidet eine stable von einer unstable Version?
Releases werden in zweierlei Hinsicht als stabil angesehen: Sie funktionieren gut, ohne abzustürzen oder falsche Ergebnisse zu liefern, und die Schnittstelle, die sich Benutzern oder Programmierern präsentiert, ist abwärtskompatibel mit früheren Versionen.
-
Würden Sie eine Funktionsänderung zwischen einer Version 2.6.14 und einer Version 2.6.15 erwarten?
Nein. Die dritte Zahl in der semantischen Versionierung steht für einen Patch, der einen Fehler behebt oder eine andere kleinere Aufgabe wie eine Neuformatierung erfüllt. Eine Funktionsänderung sollte zu einer neuen Minor oder Major Release führen.
-
Würden Sie eine Funktionsänderung zwischen einer Version 2.6.0beta und einer Version 2.6.0 erwarten?
Nein. Die Beta-Version ist eine Testversion, die alle Funktionen enthält, die in der endgültigen Version enthalten sein werden.
-
Warum sollten Sie nicht davon ausgehen, dass die Version 1.0 abwärtskompatibel mit der Version 0.9 ist?
Die Nummer 0.9 weist potenzielle Benutzer ausdrücklich darauf hin, dass sich die Software noch in der Entwicklung befindet und sehr wahrscheinlich beispielsweise ein anderes Interface haben wird, wenn sie als Version 1.0 stabil wird.
-
Wenn Sie eine Sicherheitslücke in einer Version nach dem Feature Freeze, aber vor der Veröffentlichung entdecken, können Sie diese beheben lassen?
Auf jeden Fall. Der Zeitraum zwischen dem Feature Freeze und der Veröffentlichung ist dazu gedacht, Fehler zu entdecken und zu beheben, einschließlich Sicherheitslücken.
Antworten zu den offenen Übungen
-
Angenommen Sie möchten eine Version einer Open Source Software nach dem EOL weiter verwenden, weil sie eine Funktion enthält, die Sie benötigen. Was können Sie tun, um sie weiterhin zu nutzen?
Nach dem EOL sind die Projektentwickler nicht verpflichtet, Fehler zu beheben, einschließlich Sicherheitslücken. Daher sollten Sie den Bug Tracker und die Mailinglisten des Projekts aufmerksam verfolgen, um herauszufinden, welche Fehler auftauchen. Da der Code verfügbar ist, können und sollten Sie Fehler, die in Ihrer Version enthalten sind, beheben. Theoretisch könnten Sie sogar neue Funktionen in Ihre Version einbauen. Das würde Ihre Version zu einem Fork des Originals machen.
-
Welche Kriterien führen dazu, dass eine Fehlerbehebung oder ein Feature Request gegenüber anderen bevorzugt wird?
Bei Fehlerbehebungen gehören zu den Kriterien der Schweregrad (der dem Fehler zugewiesen wird, nachdem er in die Fehlerdatenbank aufgenommen wurde) und die Zahl der davon betroffenen Benutzer. Bei einer Funktion gehören zu den Kriterien die Zahl der Benutzer, die diese Funktion wünschen, der Aufwand, sie zu programmieren, und ihre möglichen Auswirkungen auf andere Teile des Programms.