Der Software Development Life Cycle, (zu Deutsch: Softwareentwicklungslebenszyklus), häufig auch nur SDLC genannt, besteht aus standardisierten Phasen, die ein Softwareentwicklungsteam bei der Entwicklung eines neuen Produkts durchläuft. Anzahl und Eigenschaften der jeweiligen Phasen in einem Software Development Life Cycle können je nach Softwareentwicklungsmethodik und Framework variieren.
Die meisten SDLC Modelle basieren auf den folgenden Phasen:
- Planung und Analyse
- Design
- Entwicklung
- Test
- Bereitstellung
- Wartung
Was ist der Unterschied zwischen dem Software Development Life Cycle und dem System Development Life Cycle?
SDLC kann auch für System Development Life Cycle (zu Deutsch: Systementwicklungslebenszyklus) stehen. Der Begriff wird hierbei ganzheitlich verwendet; Sicherheitskontrollen und -anforderungen werden nicht nur eingefügt, sondern sind integraler Bestandteil des Prozesses. Wenn das „S“ von SDLC für „System“ steht, werden Personen, Prozesse, Softwarekomponenten, Infrastruktur und Change-Management abgedeckt.
Während es sich demnach beim System Development Life Cycle um einen eher allgemeinen Projektmanagement-Begriff handelt, fokussiert sich der Software Development Life Cycle gezielt auf die Softwareentwicklung.
Warum ist der Software Development Life Cycle so wichtig?
Die Definition und Ausführung der unterschiedlichen Phasen des Software Development Life Cycles resultiert in verbesserter Qualität des Softwareprodukts, während gleichzeitig die Zeit für die Entwicklung und Bereitstellung reduziert wird, was sich wiederum auf die Gesamtkosten auswirkt.
Der SDLC wirkt sich wie folgt auf den Softwareentwicklungsprozess aus:
- Management mit mehr Übersicht und Kontrolle.
- Verbesserte Dokumentation.
- Das Ziel der Software wird von allen Beteiligten vorab geklärt. Für das Ziel wird eine Roadmap angelegt.
- Alle Beteiligten können sich im Software Development Life Cycle einbringen.
- Entwickler haben ein klares Verständnis dafür, was sie erstellen sollen und warum.
- Alle Beteiligten sind sich dessen bewusst und stimmen der Ressourcenzuteilung zu, um das Ziel des Softwareentwicklungsprojekts zu erreichen.
Folgt der Software Development Life Cycle immer den gleichen Phasen in derselben Reihenfolge?
In einem Wort: Nein. Nicht jeder Software Development Life Cycle ist derselbe. Verschiedene Softwareentwicklungsmethoden und Frameworks haben ihre eigenen Variationen für die SDLC Phasen.
Einige, wie zum Beispiel Crystal, geben dem Team die nötige Flexibilität für die Softwareentwicklung, um ihre eigenen SDLC Phasen festzulegen. Hintergrund ist hierbei, da das Team selbst am besten entscheiden kann, wie die Phasen für ein bestimmtes Softwareprojekt gestaltet werden sollten.
Zum Beispiel folgt das agile Extreme Programming (XP) Framework einem 5-stufigen Software Development Life Cycle:
- Planung
- Design
- Coding
- Test
- Listening (Kunden-Feedback)
Das agile Feature Driven Development (FDD) Framework hat ebenfalls fünf Phasen, die sich jedoch in ihrer Definition unterscheiden:
- Entwicklung eines Gesamtmodells
- Erstellung einer Feature-Liste
- Feature-Planung
- Feature-Design
- Feature-Erstellung
Adaptive Software Development (ASD) (zu Deutsch: adaptive Softwareentwicklung) ist ein agiles Framework, dessen Software Development Life Cycle nur aus drei Phasen besteht:
- Spekulation
- Kollaboration
- Lernen
Das agile Dynamic Systems Development Model (DSDM) bzw. dynamische Systementwicklungsmodell besteht aus vier Phasen:
- Durchführbarkeit und Wirtschaftsstudie
- Funktionelles Modell / Prototyp-Iteration
- Design- und Build-Iteration
- Implementierung
Die einzelnen Ansätze und Phasen des Software Development Life Cycles sind fließend.
Wenn ein Framework sieben oder acht Phasen und ein anderes nur drei definiert, bedeutet das nicht, dass mehr oder weniger Gesamtschritte vorkommen. Beispielsweise hat Adaptive Software Development lediglich drei definierte Lebenszyklus-Phasen. Nur weil keine dieser Phasen „Test“ oder „QA“ genannt wurde, bedeutet dies im Umkehrschluss nicht, dass die Software nicht auch hier getestet wird. Die Prüfung wird einfach als Zwischenschritt innerhalb der Kollaborationsphase durchgeführt.
Software Development Life Cycle – Häufige Phasen
Auch wenn es keine in Stein gemeißelte Liste an Phasen im Software Development Life Cycle gibt, lassen sich die gängigsten Phasen von unterschiedlichen Methoden und Frameworks dennoch definieren. Die folgenden Phasen kommen in jedem Ansatz vor, können jedoch je nach Framework einen unterschiedlichen Namen tragen oder in den jeweiligen Schritten eingebaut sein.
Planung und Analyse
Planungs- und Analyseprozesse werden häufig in einer einzigen Software Development Life Cycle Phase zusammengeführt. Sie sind jedoch genauso oft in zwei separate Phasen aufgeteilt.
In dieser ersten Phase werden die geschäftlichen Rahmenbedingungen zur Entwicklung einer Software analysiert. Zu den Fragen, die in dieser Phase normalerweise vorkommen, zählen:
- Welches Problem wird die Software lösen? Wie wertvoll ist die Problemlösung?
- Wie groß ist potenzielle Zielgruppe der Software?
- Gibt es bereits Software, die das gleiche Problem löst?
- Wie wird die neu entwickelte Software derzeitige Lösungen verbessern?
- Wie viel könnte die Softwareentwicklung kosten, um das Problem effektiv zu lösen?
- Ist das Problem groß genug, um eine akzeptable Rendite zu erzielen?
- Haben wir die nötigen Ressourcen, um die Kosten zu decken?
Annahmen, die in den Antworten auf diese Fragen enthalten sind, sollten überprüft werden, vorzugsweise durch Methoden wie beispielsweise Fokusgruppen, andere Marktforschungswerkzeuge oder technische Prototypen.
Der Projektumfang bzw. die anfängliche Schätzung basiert in einem agilen Ansatz auf den anfänglichen Feature-Anforderungen oder -Annahmen. Dasselbe gilt für die Ressourcenplanung, einschließlich Softwareentwicklung und benötigtem Team.
Somit sollten die Ziele und Limitierungen klar definiert sein.
Das Rollen innerhalb des Softwareentwicklungsteams, die in der Regel in der Planungs- und Analysephase des Software Development Life Cycles vorkommen (diese variieren von Team zu Team und werden von der gewählten Methodik / Framework beeinflusst), sind:
- Produktinhaber
- Projektmanager
- CTO (Technischer Direktor)
- Business-Analyst
Design
Sobald der Software-Bedarf bestätigt und der voraussichtliche Umfang, Anforderungen und Ressourcen in der Analyse- und Planungsphase etabliert wurden, geht es in die Design-Phase.
Hier treffen Software-Architekten und -Entwickler Entscheidungen über das allgemeine Design des Softwaresystems. Ein Tech-Stack wird ausgewählt inklusive Programmiersprachen, Frameworks und Bibliotheken im Front- und Backend und es werden weitere Entscheidungen bzgl. Datenbanktechnologie und Leistungen von Drittanbietern getroffen.
Entscheidungen werden auch auf Infrastrukturebene getroffen, beispielsweise ob die Software in der Cloud bereitgestellt wird und ob es sich um eine öffentliche, private oder um einen hybriden Cloud-Ansatz handeln wird und welche Anbieter infrage kommen. Sicherheitsanforderungen sind ebenfalls ein wichtiger Bestandteil der Designphase und beeinflussen viele der getroffenen Entscheidungen.
In der Design-Phase sollten die Beteiligten bzgl. Tech-Stack-Auswahl, Risiken und Ressourcen einbezogen werden, die im Zusammenhang mit Designentscheidungen, Zeit-, Budget-, regulatorischen und anderen Projektbeschränkungen erforderlich sind.
Umfang und Eigenschaften des Minimum Viable Products (MVPs) sollten auch hier entschieden werden, da dies die nächste Phase beeinflusst.
Zentrale Teamrollen für die Design-Phase des SDLC umfassen:
- Software-Architekt
- UI-/UX-Designer
Entwicklung
In der Software Development Life Cycle Entwicklungsphase wird das Produkt von Entwicklern kodiert und zusammengefügt. In einem agilen Ansatz, von dem die meisten Softwareentwicklungsprojekte Gebrauch machen, wird in der ersten Entwicklungsphase eines iterativen SDLF das MVP erstellt.
In einem Wasserfall-Ansatz werden die technischen Details des Produkts von Anfang bis Ende in der Design-Phase dokumentiert und in der Entwicklungsphase von Anfang bis Ende erstellt.
Die am meisten beteiligten Teamrollen in der Entwicklungsphase sind:
- Frontend-Entwickler
- Backend-Entwickler
- UI-/UX-Designer
Testphase
Während der Testphase wird die in der vorherigen Phase entwickelte Software auf Performance, Bugs und anhand von den Anforderungen getestet, die in der Planungs- und Analysephase definiert wurden. Das Ziel der Phase besteht darin, sicherzustellen, dass das Softwareprodukt sowohl hinsichtlich der Nutzerfahrung als auch der erforderlichen Ressourcen entwickelt wurde, um einwandfrei zu laufen und die Verfügbarkeits- und Sicherheitsanforderungen zu erfüllen.
Softwaretests beinhalten in der Regel manuelle Tests bzgl. Benutzererfahrungen sowie automatisierte Tests mit Tools und Skripts. Wenn Bugs oder andere Fehler gefunden werden, müssen Tester das Problem dokumentieren und anschließend das Entwicklungsteam informieren, das eine neue Version der Software erstellt, in der die Probleme gelöst werden. Diese Version der Software wird dann erneut getestet, um zu prüfen, ob Updates Probleme haben und ob neue Fehler oder Defekte auftreten.
In einem DevOps-Ansatz sind die Entwicklungs- und Testphasen im Software Development Life Cycle miteinander verflochten, wobei die Testphase ein kontinuierliches Verfahren während der Entwicklung wird und beide Prozesse auch als eine einzige Phase bezeichnet werden können.
Die häufigsten Teamrollen in der Testphase umfassen:
- Solutions-Architect
- QA-Engineer
- Tester
- DevOps-Engineer
Bereitstellung
Die Bereitstellungsphase bringt die Softwareanwendung aus den Entwicklungs- und Testumgebungen in eine Live-Umgebung, wo sie den Benutzern zur Verfügung gestellt wird. Die Bereitstellung kann je nach Art der Software ein relativ einfacher oder auch ein äußerst komplexer Prozess sein. Wenn beispielsweise ein neues Softwareprodukt eine Datenbank umfasst, die von anderen Systemen verwendet wird, kann die Integration ein erhebliches Unterfangen darstellen.
Ein entscheidender Schritt in der Bereitstellungsphase ist die Sicherstellung, dass die Software in der Live-Umgebung genauso arbeitet wie in den Entwicklungs- und Testumgebungen. In einer DevOps CI/CD Software Development Pipeline sollten die Pre-Deployment- und Live-Umgebungen identisch sein, wodurch das Risiko von Abweichungen minimiert wird. DevOps integriert die Entwicklungs- und Bereitstellungsphasen.
Die gängigsten Teamrollen in der Bereitstellungsphase des SDLC sind:
- DevOps-Engineer
- Datenbankadministrator
Wartung
Die Wartungsphase stellt sicher, dass die Softwareanwendung in Bezug auf Funktionalität, Leistung und Verfügbarkeit weiterhin wie geplant läuft. Benutzer und Tests können Bugs und andere Fehler oder Sicherheitsfragen aufdecken, die während der Testphase nicht gefunden wurden. Hierbei kann es sich um geringfügige oder auch weitläufige Fehlerquellen handeln, die sogar eine neue Entwicklungsphase erfordern.
Die Hauptrollen in der Wartungsphase lauten:
- Benutzer
- Tester
- Supportmanager
Iterative und Agile Software Development Life Cycles
Wenn eine Software nicht mit der Wasserfall-Methodik erstellt wird, handelt es sich beim SDLC um einen sich wiederholenden und stets fortlaufenden Prozess, der nach jeder Iteration neu startet.
Sobald die Software einen bestimmten Reifegrad erreicht hat, werden in neuen Iterationen kleinere Updates entwickelt, wobei sich die Anzahl der Iterationen verringert. Im gesamten iterativen Software Development Life Cycle werden Anpassungen vom Softwareentwicklungsteam vorgenommen.
Zusammenfassung
Der Software Development Life Cycle kann und wird von Organisationen und Softwareentwicklungsteams anhand Philosophie, Methodik und Framework angepasst, die sie beim Erstellen eines bestimmten Softwareprodukts übernehmen.
Wenig, wenn überhaupt etwas, ist in Stein gemeißelt – und das aus gutem Grund. Der SDLC ist ein Projektmanagement-Tool und sollte den Bedürfnissen eines bestimmten Projekts, dem Team und allen anderen Beteiligten entsprechen. Phasennamen, Reihenfolge und Zusammensetzung sind hierbei variabel.
Jedes Softwareentwicklungsprojekt hat einen Lebenszyklus. Sie sollten jetzt ein gutes Verständnis vom Software Development Life Cycle haben und diesen gezielt als Projektmanagement-Tool nutzen können, um Ihre Ergebnisse zu verbessern.