# Entwicklungsstadium (Software)

Ein Entwicklungsstadium ist in der Softwaretechnik der Fertigstellungszustand, den ein zu erstellendes Softwareprodukt zu einem bestimmten Zeitpunkt erreicht hat oder erreichen soll. Die relevanten Stadien werden im Rahmen des Projektmanagements zeitpunktbezogen und inhaltlich festgelegt. Sie basieren auf dem für das Projekt gewählten Vorgehensmodell, seinen Aktivitäten und Meilensteinen oder auf Festlegungen in herstellerspezifischen Methodenkonzepten und Entwicklungsumgebungen.
Im engeren Sinn bezieht sich der Begriff Entwicklungsstadium auf ausführbare Software, d. h. auf lauffähige Programme, die im Rahmen von Releasemanagement-Prozessen eines Projekts zum Testen oder an ihre Benutzer bereitgestellt werden. Je nach Projektsituation, oft in kleineren Wartungsprojekten, entfallen manche Stadien, sie werden zusammengelegt oder die Software wird nur als eine einzige finale Version bereitgestellt.
In erweitertem Sinn ergeben sich unterschiedliche Entwicklungsstadien für Software im gesamten Projektverlauf, in dem auch in konzeptionellen Projektphasen Ergebnisse entstehen, die bestimmten Meilensteinen (‚Entwicklungsstadien‘) zugeordnet sind. Beispiel siehe. Am Ende jedes Stadiums werden die definierten Projektergebnisse in nachfolgende Bearbeitungsstufen übergeleitet.
Nach dem Erreichen des Software-Endzustands beginnt der Entwicklungszyklus i. d. R. mit Maßnahmen/Projekten zur Anwendungserweiterung wieder neu – mit dem Ziel einer neuen Software-Version.

## Zweck / Unterschiede

Die Zielsetzung für die Festlegung mehrerer Entwicklungsstadien ist im Allgemeinen, im Projektverlauf Fixpunkte mit definierten Reifegraden zu erreichen, um die anschließenden Aktivitäten sicher(er) bearbeiten zu können. Häufig werden unterschiedliche Entwicklungsstadien z. B. beim Softwaretest praktiziert, um in nachgelagerten Teststufen/Testarten Funktionsdetails überprüfen zu können, die auf bereits im vorhergehenden Stadium getesteten Funktionalitäten aufsetzen.
Unterschiede zwischen den einzelnen Software-Entwicklungsstadien für Computerprogramme können zum Beispiel folgende sein – um für den jeweils als Beispiel angegebenen Freigabezweck verwendet zu werden:
* Manche Funktionen sind noch nicht realisiert; um einzelne Funktionen vorweg zu testen
* ... oder sind nur in einfacher Form (ohne Spezialfälle) realisiert; ebenfalls für erste/frühe Tests.
* Die Software wurde im bisherigen Stadium nur durch bestimmte Testarten (wie Alphatests) überprüft; zur Durchführung von Betatests.
* Die Software enthält noch Hilfsroutinen (z. B. Stubs oder Driver); zum Testen von Unterprogrammen.
* Die Anwendung wird zur Übernahme in eine spezielle System- oder Testumgebung bereitgestellt und ist ggf. zielsystemspezifisch adaptiert; zur Durchführung von Produktionstests oder Lasttests.
* In der Anwendung sind Hilfsroutinen enthalten, die das Testen und die Dokumentation von Fehlerfällen unterstützen; für öffentliche Tester.
* Stadiumbezogene Übergaben enthalten entweder die ganze Anwendung oder nur einzelne Komponenten zur (nachträglichen) Installation.
* Die Anwendung ist vollständig einsatzbereit (letztes Stadium); zur finalen Übergabe in die Produktionsumgebung.

## Beispiele für Entwicklungsstadien

Die Anzahl an Entwicklungsstadien mit ihren Soll-Reifegraden und auch ihre Bezeichnungen variieren erheblich. Insbesondere bei Standardsoftware (inkl. Systemsoftware) legen die Hersteller häufig fest, wie sie ihre Software stufenweise entwickeln, für wen und zu welchen Zwecken sie die jeweiligen Softwareversionen bereitstellen und wie sie diese Stufen benennen. Bei der Entwicklung von Individualsoftware werden Entwicklungsstadien/Softwarereleases meist unternehmensindividuell praktiziert, sie sind oft nicht allgemeingültig festgelegt, sondern folgen projektspezifischen Gegebenheiten.
Entwicklungsstadien und Bezeichnungen für Softwarereleases können zum Beispiel sein:
    pre-Alpha → Alpha → Beta → Release Candidate → Release.
In anderen Fällen praktiziert ein Hersteller Releasebezeichnungen wie die folgenden:
    CLOSED → FINAL STABLE → FINAL → CURRENT BUILD → SCHEDULED.
Dabei ergeben sich zwischen solchen Haupt-Stadien in der Softwareentwicklung intern beliebig viele Software-Zwischenversionen, zum Beispiel aus mehreren Behebungsversuchen (und Teststufen) bei gemeldeten Programmfehlern.
Für die Softwareentwicklung allgemein, d. h. nicht nur für ausführbare Programme geltend, sind beispielsweise folgende Stadien i. S. von Meilensteinen bekannt:
    Projektdefinition, Anforderungsanalyse, Lastenheft, Pflichtenheft, Codeanalyse, Modultest, Systemtest, Projektabnahme

## Softwarestadien für ausführbare Software
### Pre-Alpha-Version

Allgemein kann jeder beliebige Entwicklungszustand vor der ersten Alpha-Version als eine pre-Alpha-Version (von lateinisch prae- ‚vorzeitig‘ und vom ersten Buchstaben des griechischen Alphabets Alpha, auch als α' Schriftzeichen für 1) bezeichnet werden. Oft wird eine solche Version verwendet, wenn ein halbwegs fertiges Modul der Software vorgestellt werden soll. Eine weitere Bezeichnung ist die Entwicklervorschau (von englisch developer preview, abgekürzt auch oft DP).

### Alpha-Version

Die erste zum Test durch Fremde (also nicht die eigentlichen Entwickler) bestimmte Version eines Computerprogramms wird oft Alpha-Version genannt. Obwohl der Begriff nicht exakt definiert ist, enthält in der Regel eine Alpha-Version bereits die grundlegenden Bestandteile des Softwareprodukts – es ist aber fast unerlässlich, dass in späteren Versionen der Funktionsumfang noch erweitert wird.
Insbesondere enthalten Alpha-Versionen zumeist Programmfehler in Ausmaß oder Menge, die sie für den produktiven Einsatz ungeeignet machen.
Auch Alpha-Versionen können als Entwicklervorschauen, englisch Developer Previews oder Developer Releases, verfügbar gemacht werden. Dies geschieht meist in einem exklusiven Kreis für Entwickler von Drittanbietern.

### Beta-Version

Eine Beta-Version ist die erste Version eines Computerprogramms, die vom Hersteller zu Testzwecken veröffentlicht wird. Der Begriff ist nicht exakt definiert, als Faustregel zur Abgrenzung einer Beta-Version von anderen Versionen gilt in der Regel, dass in ihr zwar alle wesentlichen Funktionen des Programms implementiert, aber noch nicht vollständig getestet sind. Das Programm kann oder wird daher unter Umständen noch viele, evtl. auch schwerwiegende Fehler enthalten, die einen produktiven Einsatz nicht empfehlenswert machen.
Der Nutzen eines Betatests besteht insbesondere darin, dass Fehler, die typischerweise erst in der Praxis auftreten (wie zum Beispiel Konflikte mit anderen Programmen, Probleme mit bestimmten Hardwarekomponenten, missverständlich umgesetzte Anforderungen oder Unklarheiten in der Benutzeroberfläche), schon vor der finalen Veröffentlichung (englisch Release) des Programms erkannt und behoben oder zumindest dokumentiert werden können.
Als Betatester bezeichnet man im Allgemeinen den oder die ersten unabhängigen beziehungsweise anonymen Fremdtester und Anwender.
Beta-Versionen von Programmen sind in der Regel an der 0 als Hauptversionsnummer – diese Variante gilt natürlich nur für die Beta-Versionen vor der ersten fertigen Version (1.0) – oder dem Namenszusatz Beta zu erkennen.
Beta-Versionen werden normalerweise nicht auf dem gleichen Weg wie Release Candidates oder fertige Versionen vertrieben. Folgende Möglichkeiten finden Verwendung:
* In (un)regelmäßigen Abständen werden definierte Snapshots (aktuelle Entwicklungszustände) aus dem Quellcodeverwaltungssystem generiert und en bloc entweder im Quellcode oder als vorkompiliertes Paket angeboten. Dies kann täglich (Nightly Build), wöchentlich oder zu beliebigen anderen Terminen, die die Entwickler für angemessen halten (z. B. nach Fertigstellung eines Subsystems), erfolgen. Eine solche Version kann auch ein automatisches Bugtracking-Modul enthalten (siehe z. B. Amarok), um den Betatestern die Fehlerberichte an die Entwickler zu erleichtern. Dies ist bei großen Projekten mit definierten Entwicklungszielen und einem festen Veröffentlichungszeitplan üblicherweise der Normalfall (z. B. bei GNOME).
* Die Betaversion wird im Quellcodeverwaltungssystem zu einer definierten Revision mit einem Tag (einer Markierung) versehen, aber sonst nicht gesondert behandelt. Unabhängige Anbieter können dann diesen Entwicklungsstand als Basis für ihre vorkompilierten Pakete verwenden. Dies kommt bei sich sehr schnell ändernden Projekten, die unter Umständen ganz ohne oder nur mit seltenen festen Releases arbeiten, bei denen aber trotzdem allgemeines Interesse an aktuellen Versionen besteht, zum Einsatz (z. B. Dirac, Xine).
* Es gibt keine feste Beta-Version, Beta ist das aktuelle HEAD, also der sich ständig ändernde, tatsächliche Entwicklungsstand. Betatester müssen den derzeitigen Stand selbst aus dem Quellcodeverwaltungssystem herunterladen, konfigurieren und kompilieren, diese Tätigkeit wird normalerweise durch vom Projekt bereitgestellte Skripte automatisiert erledigt. Dies ist der häufigste Fall, kann aber auch mit einer der beiden vorherigen Methoden kombiniert werden (das ist die Regel).

### Perpetual Beta

Ein Begriff, der beschreibt, dass sich in Bezug auf die ständige Entwicklung des Internets auch Websites und Software kontinuierlich weiterentwickeln und somit nie wirklich fertig sind. Somit ist ein immerwährender Entwicklungszustand eingetreten, die „Perpetual Beta“. Entstanden als Schlagwort innerhalb des Web-2.0-Konzeptes, das dem Extreme-Programming-Konzept der „Continuous Integration“ Rechnung trägt.

### Technical Preview

Wenn ein Produkt oder eine Komponente qualitätsgesichert freigegeben wird, die aber noch unvollständig ist, spricht man von einem Technical Preview. Kunden können die Software testen, auch wenn sie noch dokumentierte Einschränkungen hat, z. B. noch nicht in allen finalen Sprachen lokalisiert ist.

### Release Candidate/Prerelease

Ein Release Candidate (kurz RC, aus dem Englischen für Freigabekandidat,) gelegentlich auch als Prerelease (aus dem Englischen etwa für „Vorabveröffentlichung“ oder „Vorabversion“) bezeichnet, ist eine abschließende Testversion einer Software. Darin sind alle Funktionen, die die endgültige Version der Software enthalten soll, schon verfügbar (sogenannter feature complete,) alle bis dahin bekannten Fehler sind behoben. Aus dem Release Candidate wird vor der Veröffentlichung die endgültige Version erstellt, um einen abschließenden Produkttest oder Systemtest durchzuführen. Dabei wird die Qualität der Software überprüft und nach verbliebenen Programmfehlern gesucht.
Wird auch nur eine Kleinigkeit geändert, muss ein weiterer Release Candidate erstellt werden, und die Tests werden wiederholt. Die Release Candidates werden daher auch oft nummeriert (RC1, RC2 usw.). Erfolgen keine weiteren Änderungen und hält ein Release Candidate schließlich die geforderten Qualitätsstandards ein, so wird das Suffix RCx entfernt und damit die Version als Release (auch englisch final release, finale Veröffentlichung oder final version, finale Version) erklärt und veröffentlicht.
Versionen, die deutlich stabiler sind als Beta-Versionen, aber noch nicht den Teststand eines Release Candidate besitzen, werden in manchen Entwicklungsprojekten als Gamma-Version bezeichnet.
Bei Gerätetreibern für Windows gibt es manchmal den Status WHQL Candidate (übersetzt WHQL-Kandidat). Hierbei handelt es sich um eine dem RC entsprechende Treiberversion, die der Hersteller zur WHQL-Prüfung eingereicht hat, die entsprechende Zertifizierung ist allerdings noch nicht erfolgt.

### Release

Die fertige und veröffentlichte Version einer Software wird als Release bezeichnet, manchmal auch als Hauptversion. Damit geht traditionell eine Erhöhung der Versionsnummer einher. Bei einer mediengebundenen Verteilung wird diese Version zur Produktion an die Presswerke ausgeliefert, wo sie auf Datenträger wie CD-ROMs oder DVDs kopiert, also als tatsächlich greifbares Produkt hergestellt wird.
Für diesen Status haben sich außerdem verschiedene Bezeichnungen etabliert:

#### Release to Manufacturing/Web (RTM/RTW), auch First Customer Shipment (FCS)

    Bereit für die Vervielfältigung und Veröffentlichung im Netz (Web)

#### Stable

    für eine stabile Version, die nicht mehr verändert wird

#### Final

    für die endgültige (finale) Version

#### General Availability (GA)

    steht für eine allgemeine Verfügbarkeit. Der Begriff verdeutlicht, dass die Version für den Praxiseinsatz freigegeben ist und über verschiedene Medien verteilt wurde bzw. erhältlich ist.

#### Gold, auch Golden Master (GM)

    Mit dem Goldmaster wird die Version bezeichnet, welche schließlich ins Presswerk geht und (physisch) vervielfältigt wird. Um den Golden Master zu erreichen, müssen alle Fehler ausgebügelt und das Endprodukt vollständig komplett und auf das Endspeichermedium (die Goldmaster-DVD) gebrannt sein. Die Bezeichnung kommt aus der Musikindustrie. Die Goldmaster DVD wird ganz am Schluss hergestellt, kurz bevor sie ans Presswerk geschickt wird. Da es früher keine Updates oder ähnliches gab, wurden mehrere Golden Master erstellt und ausgiebig getestet, bevor die Endversion ins Presswerk geschickt wurde. Mit dem Gold Master wird die endgültige Verkaufsversion bezeichnet, welche als Original ins Presswerk kommt und von der dann Kopien hergestellt werden. In der Musik- und Filmindustrie wird der Golden Master noch ausgiebig eingesetzt (CD und DVD-Produktion), in der Software-Industrie wurde er weitgehend durch Updates ersetzt. Von der Goldmaster-DVD gibt es normalerweise nur ein Stück.

### Benennungen

Die Bezeichnungen von Software-Versionen, Releases, sind grundsätzlich nicht genormt und lauten meist von Projekt zu Projekt unterschiedlich. Manche Hersteller legen in einer Art Roadmap auch die beabsichtigten Bezeichnungen für (geplante) veröffentlichte Entwicklungsstände fest. Statt „Version“ oder „Release“ sind u. a. folgenden Benennungen für veröffentlichte Software gängig:

#### Build

    Das Ergebnis aus dem Kompilieren des Quelltextes. Dabei wird im Build-Prozess meist die automatisch geführte Build-Nummer um eins erhöht, vor allem, wenn der gesamte Quelltext kompiliert wird. Da die Software jedoch oft intern zum Testen kompiliert werden muss, trägt ein solcher Build meist dieselbe Versionsnummer wie der vorherige Build. Aber auch bei bereits veröffentlichten Versionen bzw. Releases werden oft zwecks Wartung, etwa wegen Funktionsupdates oder Bugfixes, neuere Builds als Update veröffentlicht.
    Manche Programme hängen bei der Version die Build-Nummer mit einem Bindestrich an, also z. B. 1.2.3-4567, wobei 1 die Hauptversionsnummer ist, 2.3 die Nebenversions- und Revisionsnummer und 4567 (nach dem Bindestrich) die Build-Nummer. Siehe auch Versionsnummer.

#### Version

    Ein Build, der eine eindeutige Versionsnummer erhält, wird als eine neue Version eines Projekts geführt. Wird im Zuge von Hotfixes oder Bugfixes z. B. eine Wartungsversion veröffentlicht, so kann diese die gleiche Versionsnummer tragen, aber eine höhere Build-Nummer oder einen namentlichen Zusatz, etwa „Service Release 1“ oder einfach „Maintenance Release.“

#### Release

    Im Allgemeinen wird eine veröffentlichte Version als Release (deutsch: Veröffentlichung) bezeichnet. Interne Versionen, die nicht veröffentlicht werden, werden daher normalerweise nicht als Release bezeichnet, jedoch können solche Versionen oder Builds leaken und somit ebenfalls an die Öffentlichkeit gelangen.
Problematisch ist auch der Begriff Beta-Version, da er nicht eindeutig definiert ist und damit grundsätzlich für jeden unfertigen Entwicklungsstand stehen kann. So gibt es dieselben Benennung nach den Stadien der Entwicklung oft einerseits bezogen auf das gesamte Projekt, andererseits kann die Benennung auch lediglich auf erst kürzlich hinzugefügte Teilkomponenten bezogen sein (und der Rest der Projektes ist eigentlich stabil und daher keine Beta-Version).
Auch die veröffentlichte Software selbst hat meist unterschiedliche Namen. Neben der sogenannten “Release” gibt es auch die “Final” oder final version (zu Deutsch: fertige Version oder auch finale Version). Es gibt jedoch auch den Begriff “Stable”, also stabil, oft als stable version, stabile Version. Auch hier zeigt sich deutlich, dass verschiedene Benennungen durchaus üblich sind: statt einer Version kann auch eine Veröffentlichung namensgebend sein: eine final release eines Entwicklungsprojektes ist lediglich die veröffentlichte final version.
Bei unfertigen Versionen verhält es sich nicht anders. Ob nun Pre-Alpha-, Alpha- oder Beta-Version: gebräuchlich ist “experimental” (experimentell), “unstable” (instabil), “testing” genauso wie “Preview”, jeweils optional wieder als “version” oder als “release”, aber auch als “build”. Ein Build ist dabei am unspezifischsten, wird aber auch oft bei Veröffentlichungen verwendet, um den Status einer unfertigen Software zu verdeutlichen. Dennoch haben auch stabile und fertige Versionen oft eine Build-Nummer.
Eine Besonderheit ist die Benennung als Nightly Build, übersetzt: nächtlicher Build. Ein Programm mit dieser Benennung kann zwischen vollkommen stabil bis gänzlich laufunfähig alles sein, weil der Prozess fast immer automatisiert in der Nacht abläuft (daher auch der Name) und dabei auf dem jeweiligen Stand des Quelltextes basiert, an dem die Entwickler tagsüber ihre Änderungen vornehmen. Der Quelltext könnte durch die letzten Änderungen defekt geworden sein (englisch broken), jedoch dennoch übersetzbar für den Compiler bleiben, sodass zwar der Build-Prozess erfolgreich verläuft, das Programm jedoch dennoch nicht lauffähig ist. Daher sagt die Benennung als Nightly Build nichts über das Entwicklungsstadium des Softwareprojektes aus.
Üblich sind aber auch Benennungen, die unabhängig vom Entwicklungsstand eines Softwareprojekts an ein bestimmtes Publikum gerichtet sind. Diese verfolgen meist das für den Entwickler vorteilhafte Ziel, einen externen Betatest unter bestimmten Bedingungen durchzuführen. Auch die Benennungen für weiterreichende „Beta-Programme“ sind nicht genormt und lauten von Projekt zu Projekt unterschiedlich, es gibt jedoch gemeinsame Schlagwörter:

#### Internal Build oder Private Build

    bezeichnet eine lauffähige Version eines Projekts, das nur intern getestet wird.

#### Developer Build

    ist eine Testversion, die speziell für externe Entwickler (englisch developer) gedacht ist. Das kommt meist dann zur Anwendung, wenn viele Drittanbieter für die Funktion des Projektes unerlässlich sind, z. B. bei einem Betriebssystem, auf dem viele Programme von anderen Herstellern laufen können (bzw. kompatibel bleiben oder werden) sollen. Beispiel: Rhapsody Developer Release oder Mac OS X Developer Preview

#### Closed Beta

    bezeichnet eine Beta-Version, die einem exklusiven Kreis verfügbar gemacht wird. Beispiel: Windows 10 als Insider Build oder Insider Preview, das für Teilnehmer eines offenen (da nur anmeldepflichtigen) Programms von Microsoft, das den Namen Insider Program trug, veröffentlicht wurde. Dabei war die Aufnahme von Testern zeitlich begrenzt.

#### Public Beta

    bezeichnet eine Beta-Version, die offen und uneingeschränkt für Early-Adopter gedacht ist. Beispiel: Mac OS X Public Beta, eine Beta-Version von Mac OS X 10.0.

#### Early Access

    bezeichnet ein Kundenprogramm, das einen meist kostenpflichtigen Zugang (englisch access) zu frühen Test- und/oder Entwicklerversionen bietet. Dies ist vor allem bei Computerspielen sehr beliebt, da es einerseits den Spielern bereits lange vor der Veröffentlichung eines Titels erlaubt, bestimmte Elemente der Spielewelt zu erforschen und bei Stabilitätstests auf verschiedener Hardware zu helfen, andererseits den Entwicklern ermöglicht, frühzeitig Änderungen vorzunehmen, die auf Feedback der Spieler basieren. Early-Access-Programme sind zudem meist eine gute Finanzierungsquelle, da das Entwicklerstudio bereits über Early-Access-Verkäufe Geld für die Entwicklung des Spiels vorab einnimmt.
Eine weitere Art der Benennung stellt die Bezeichnung des Zwecks oder Grundes dar, für den eine bestimmte Version herausgegeben wird. Gebräuchlich sind hier vor allem die “Maintenance Release” und “Service Release”, also eine Veröffentlichung zum Zweck der Wartung. Übersetzt wird dies oft auch als Wartungsversion.

## Fehlerbehebung nach Veröffentlichung

Um Fehler in bereits veröffentlichter Software zu beheben, geben Softwarehersteller sogenannte Aktualisierungen, Hotfixes, Patches und Service Packs heraus. Bei vielen modernen Anwendungen und Betriebssystemen können diese dann manuell oder automatisch über das Internet bezogen werden.

## Firefox als Beispiel

Der Webbrowser Mozilla Firefox erscheint in sechswöchigen Abständen in vier verschiedenen Versionen: der experimentellen Version Firefox Nightly (pre-alpha), der experimentellen Version „Firefox Developer Edition“, der größtenteils stabilen Version Firefox Beta und der stabilen Version Firefox, die sich jeweils in ihrer Versionsnummer unterscheiden, z. B. Firefox Aurora 11, Firefox Beta 10, Firefox 9. Außerdem kann man das „nächtliche“ Nightly Build (aktueller Entwicklungsstand, nur zum Testen geeignet) herunterladen. Auf diese Weise kann einerseits der Entwicklungsprozess beschleunigt werden, andererseits können Benutzer durch die Verwendung der Versionen Beta oder Aurora dazu beitragen, künftige Funktionen der stabilen Version zu testen, zu beurteilen und Programmfehler sowie Sicherheitslücken frühzeitig zu erkennen, da die Aurora-Version zwölf und die Beta-Version sechs Wochen vor dem endgültigen Erscheinen der stabilen Version der Öffentlichkeit zur Verfügung gestellt wird.