Vorgehensmodell zur Software-Entwicklung (SDLC)

Seitdem der Einsatz von Computern Mainstream wurde, suchen Softwareentwickler nach Möglichkeiten, Entwicklungsmethoden zu schaffen, mit denen sich die Geschwindigkeit der Produktentwicklung und Prozessproduktivität steigern lassen. Diese Notwendigkeit führte zur Schaffung von Vorgehensmodellen zur Software-Entwicklung (Software development life cycles).

Was ist ein Vorgehensmodell zur Software-Entwicklung (SDLC)?

Der SDLC oder Software Development Life Cycle ist ein Prozess klar definierter Schritte, die von der Softwareindustrie befolgt werden, um qualitativ hochwertige Softwareprodukte zu entwickeln, welche die Kundenerwartungen übertreffen und innerhalb vorgegebener Zeit und Budgets abgeschlossen werden können. Es ist ein detaillierter Plan, der Einblicke in die Entwicklung, Wartung, Verbesserung, Ersetzung oder Aktualisierung von Software bietet. Er bietet eine genau definierte Methodik zur Verbesserung der Qualität des Entwicklungsprozesses und zur Bereitstellung eines hochwertigen Endprodukts, das den Zeit- und Kostenaufwand verringert.

Lebenszyklus der Softwareentwicklung
Lebenszyklus der Softwareentwicklung

Der SDLC teilt den gesamten Einzelprozess der Software-Entwicklung in verschiedene separate Schritte auf, so dass sich die Entwickler auf jeden Schritt separat konzentrieren können, um eine bessere Lösung zu finden, mit der das Ziel hoher Qualität sowie Kosten- und Zeiteffizienz erreicht werden kann. Bei der Arbeit an einem langen Einzelprodukt verlieren sich die Entwickler möglicherweise in kleinen Details und verpassen die Gelegenheit zur Verbesserung ihrer Software. Die Aufteilung des Prozesses in kleine Schritte hilft dem Entwickler jedoch dabei, den Fokus während der Arbeit beizubehalten.

Wenn außerdem verschiedene Personen an verschiedenen Schritten arbeiten, hilft dies bei der Detailbeobachtung mit unterschiedlichen Wahrnehmungen und Perspektiven. Das führt zu guten Ideen für Verbesserungen. Die Entwickler können an verschiedenen Schritten gleichzeitig arbeiten, was diesen Prozess zeiteffizient macht. Der SDLC besteht aus sieben Phasen oder Schritten, einschließlich Planung, Definition von Anforderungen, Erstellung von Design und Prototyping, Software Design, Tests, Integration sowie Betrieb und Wartung. Wachsende Unternehmen können einige dieser Schritte zusammenlegen oder diese Schritte in mehrere Schritte aufteilen, je nach Umfang des Produkts. Der SDLC definiert die Aufgaben, die in jedem Schritt des Entwicklungsprozesses durchgeführt werden.

Die Schritte des SDLC

Nachfolgend sind die wesentlichen Schritte des SDCL aufgeführt, die für einen reibungslosen, effizienten und produktiven Ablauf des Software-Entwicklungsprozesses sorgen.

Anforderungsanalyse

In diesem Schritt befragt man Kunden nach den Anforderungen, welche sie an das Projekt stellen. So kann der Kunde beispielsweise angeben, was das Softwareprodukt leisten soll.. Wenn ein Kunde zum Beispiel eine soziale Applikation wünscht, wird eine der Anforderungen an die Applikation die Fähigkeit sein, Nachrichten an andere Personen zu senden und zu empfangen. Handelt es sich bei dem Produkt um einen Media Player, dann wird der Kunde in den Anforderungen Abspiel-, Ergänzungs- und offene Optionen angeben. Zu diesen Anforderungen können auch die Hardware oder Ressourcen gehören, die für die Durchführung des Projekts benötigt werden. Wenn ein Team beispielsweise an einem Projekt einer Applikation arbeitet, die online funktionieren soll, benötigt es eine Webdomäne zur Verbindung mit der Applikation, damit diese Daten online übertragen werden können. Sobald man alle notwendigen Daten vom Benutzer erhalten hat, werden sie formell in einem Dokument namens Business Requirement Specifications (BRS) festgehalten. Dieses Dokument bietet einen vollständigen Überblick über den Geschäftsbetrieb und die Kundenanforderungen. Nach Fertigstellung des Dokuments werden die Kundenanforderungen analysiert, und ein neues Dokument erstellt. Das neue Dokument beschreibt die vom Kunden erwarteten vollständigen Produktänderungen. Dieses Dokument wird System Requirement Specifications (SRS) genannt. Es wird auch als “übergeordnetes Dokument” bezeichnet, da alle zukünftigen Planungen und Entwicklungen auf dem Inhalt dieses Dokuments basieren.

Planung

Sobald die Anforderungen an das Projekt dokumentiert sind, wird ein gründlicher Plan erstellt, um das Ziel zu erreichen. Dieser Plan umfasst die Wahl der Technologie oder der Plattformen, die den Produktanforderungen am besten entsprechen, sowie die Auswahl aller erforderlichen Ausrüstungen oder Geräte. Es werden Personen mit geeigneten Fähigkeiten ausgewählt und ein Team mitsamt Hierarchie und Verantwortlichkeiten der einzelnen Mitglieder gebildet. Die Kosten für die erforderlichen Ressourcen werden berechnet, um festzustellen, ob der Plan finanziell überhaupt durchführbar und tragfähig ist. Sobald die Hauptpunkte des Plans festgelegt sind, wird ein detaillierter Zeitplan mit Meilensteinen aufgestellt, die den Zeitrahmen für die Fertigstellung definieren. Ein Projektzeitplan wird in der Regel geplant, um die Leistung und das Tempo des Teams zu überprüfen und im Gleichgewicht zu halten. Dadurch kann ein gutes Tempo beibehalten und alle Ziele rechtzeitig erreicht werden. Alle Projektrisiken sind ebenfalls Teil der Planungsphase. Planungsexperten verwenden in der Regel eine Reihe verschiedener Entwicklungsansätze, um alle Methoden zu spezifizieren und auszuwählen, die für ein bestimmtes Projekt gut funktionieren werden.

Software Design

Sobald der Prozess geplant ist und alle Anforderungen dokumentiert sind, wird das System-Design entwickelt. Der Systementwurf umfasst sowohl den Software- als auch den Hardwareentwurf. Er muss alle Kundenanforderungen abdecken. Beim Architekturdesign legen die Entwickler fest, welche Programmiersprache für die Aufgabe am besten geeignet ist, die Gesamtarbeit und den Algorithmus des Programms, die Wahl verschiedener Industriepraktiken und die Verwendung von Bibliotheken oder Vorlagen. Wenn der Entwickler zum Beispiel Raspberry Pi als Recheneinheiten für die Applikation verwendet, ist Python eine gute Wahl. Wenn Arduino involviert ist, werden die Entwickler C oder Assembler bevorzugen. Die Datenstrukturen hängen von der Funktion der Anwendung ab. Wenn zum Beispiel eine Online-Shopping-Anwendung ein Warenkorbverwaltungsprogramm benötigt, wird sie die “Listendaten”-Struktur verwenden. Wenn dies jedoch auf einem Browser geschieht und der Benutzer von der aktuellen, nächsten oder vorherigen Seite aus navigieren muss, wird die “Push-Pop”-Datenstruktur verwendet. Wenn Sie zum Beispiel eine Nachrichtenanwendung entwerfen, sollte es einen Button zur Kontaktauswahl, zum Senden einer Nachricht und eine Tastatur zum Eingeben der Nachricht geben. Der Entwurf wird die Aktion jeder dieses Buttons definieren. Dann wird die Applikationsplattform ausgewählt. Dies könnte Android, Linux, Windows, iOS usw. sein. Der Kommunikationskanal für die Applikation kann mit anderen Ressourcen kommunizieren, z.B. mit dem zentralen Server oder der Applikation eines beliebigen anderen Benutzers. Um die Sicherheit der Applikation und der Benutzerdaten zu gewährleisten, werden verschiedene Sicherheitsmaßnahmen festgelegt. So sichert z.B. die Verschlüsselung des SSL-Verkehrs den Informationsfluss von und zur Website. Der Passwortschutz gewährleistet, dass Applikationen sicher auf dem Gerät des Benutzers verwendet werden können.

Codierung

In diesem Schritt schreiben die Entwickler nun das eigentliche Programm für die erforderliche Funktionalität der Applikation. Je nach Projektgröße schreibt entweder ein einzelner Entwickler oder ein Team ein Programm für die Applikation. Im Falle mehrerer Entwickler werden verschiedene Aufgaben innerhalb einer Anwendung festgelegt, und jedem Entwickler eine Aufgabe zugewiesen. Die getrennte Entwicklung der Aufgaben ermöglicht eine bessere Kompatibilität mit Programmen anderer Aufgaben. Die Entwickler wissen hauptsächlich, wie die Applikation funktioniert. Daher stellen sie eine Gliederung für ein Benutzerhandbuch, die Produktarbeit, die Spezifikationen und den Fehlerbehebungsprozess bereit. Dies hilft bei der Erstellung eines vollständigen Benutzerhandbuchs für die Applikation. Dazu können auch Antworten auf häufig gestellte Fragen (FAQs) gehören. FAQs helfen dem Benutzer, die Funktionen der Applikation besser zu verstehen. Während der Programmierung stoßen Entwickler auf Bugs und Fehler. Diese nehmen manchmal viel Zeit in Anspruch, da langwieriger Code Fehler in der Regel schwer zu finden macht. Verschiedene Debugging-Werkzeuge werden verwendet, um die Entwickler bei der Suche nach Glitches oder Fehlern zu unterstützen. Wenn der Entwurf detailliert und organisiert vorbereitet wird, ist der Code-Entwicklungsprozess mit weniger Aufwand und schneller abgeschlossen.

Testen

Dies ist eine der kritischsten Phasen in der Software-Entwicklung. Sobald die Applikation vollständig entwickelt ist, wird sie getestet. Dann wird auch die Leistung der Applikation bewertet. Fehler und Probleme in den Produkten werden aufgezeigt, verfolgt, gelöst und erneut getestet. Dies ist ein iterativer Prozess, bei dem die Applikation wiederholt getestet wird, bis alle Probleme beseitigt sind. Das Testen erfordert manchmal eine spezielle Umgebung. Beispielsweise wird manchmal eine virtuelle Umgebung erstellt, um die Applikation vor der Bereitstellung zu testen. Das Testen wird durchgeführt, um sicherzustellen, dass jede Funktion der Applikation ordnungsgemäß funktioniert. Während der Testphase wird nicht nur die Funktionalität der Anwendung, sondern auch ihre Leistung auf Verzögerungen bei der Verarbeitung überprüft. Dieser Schritt verringert die Wahrscheinlichkeit von Fehlern oder Störungen, auf die die Endbenutzer stoßen könnten. Als Ergebnis wird eine höhere Benutzerzufriedenheit erreicht, und es werden mehr Menschen ermutigt, die Applikation zu benutzen. In vielen SDLC-Modellen ist das Testen nicht eine separate Stufe, sondern die Unterstufe aller Stufen, da das Testen Bestandteil aller Stufen ist. Wir begegnen vielen Applikationen, die entweder gar nicht funktionieren, nicht wie beschrieben funktionieren oder viele Glitches und Bugs aufweisen. Diese Dinge passieren bei Applikationen, die nach ihrer Entwicklung und Freigabe nicht angemessen getestet werden. Schlecht getestete Applikationen schaffen unzufriedene Kunden, die schnell zu einem anderen Unternehmen und anderen Produkten wechseln.

Implementierung

Sobald die Applikation entwickelt und getestet ist, wird sie der Öffentlichkeit zur Verfügung gestellt. Der Implementierungsprozess kann einfach oder komplex sein und auf der Applikation selbst basieren. Einige Unternehmen laden die Einrichtung der Applikation auf ihre Website hoch und stellen sie so zum Kauf und Download zur Verfügung. Solche Applikationen sind leicht installierbar. Manchmal kann die Bereitstellung und Implementierung jedoch ein komplizierter Prozess sein. Zum Beispiel, wenn Sie eine neue Applikation für eine Firma entwickelt haben und nun ihre Datenbank aktualisieren müssen. Die Datenbank verwendet verschiedene andere Systeme, die die Integration von Upgrades zu einem langwierigen und komplizierten Prozess machen. Manchmal wird ein Produkt nicht vollständig, sondern in Segmenten veröffentlicht. Zuerst wird ein begrenzter Teil des Produkts für Benutzer verfügbar gemacht und in einer realen Geschäftsumgebung getestet. Dies wird auch als “Benutzerakzeptanztest” bezeichnet. Durch diese begrenzte Freigabe erhält das Unternehmen eine Vorstellung von seinem Markt und seiner Nutzung. Darüber hinaus hilft das Einholen von Feedback von den Benutzern für das freigegebene Produkt dem Unternehmen, die Produktspezifikationen neu zu bewerten und sie entsprechend der Benutzernachfrage zu verbessern. Wenn der Benutzer die anfängliche Version akzeptiert, ist die endgültige Version erfolgreich und wird von den Benutzern akzeptiert.

Betrieb und Wartung

Sobald die Applikation bereitgestellt und für den Markt verfügbar gemacht wurde, ist der Entwicklungszyklus beendet. Betriebs- und Wartungsexperten sind nun für den ordnungsgemäßen Betrieb der Applikation verantwortlich und kümmern sich um Beschwerden der Benutzer über Fehler und Probleme. Diese Phase bezieht sich nicht nur auf die Behebung von Fehlern, sondern umfasst auch die Aktualisierung der Anforderungen der Applikationen, um neuen Marktanforderungen gerecht zu werden. In dieser Phase muss die Applikation auf dem neuesten Stand gehalten und verbessert werden, um sicherzustellen, dass sie kontinuierlich Benutzer anzieht und an sie bindet. Nehmen wir eine Applikation für einen Online-Shop mit vielen verschiedenen Zahlungsmethoden als Beispiel. Wenn eine neue Zahlungsmethode eingeführt wird, könnte sie von vielen auch zur bevorzugten Wahl werden. Daher möchte der Eigentümer der Applikation diese Methode auch in die Applikation des Shops aufnehmen, um den Nutzern dieses Service den Umgang mit der Applikation zu erleichtern. Darüber hinaus kann der Benutzer die Hinzufügung neuer Features verlangen, die vom Wartungsteam bearbeitet werden. Wenn die Aktualisierungsarbeiten nicht sehr umfangreich sind, werden sie vom Wartungs- und Betriebsteam durchgeführt. Wenn aber die neue Anwendungsversion wie ein völlig neues Projekt aussieht, wird ein neues SDLC-Modell erstellt und umgesetzt.

Methoden

Es ist unpraktisch, eine Umgebung in Betracht zu ziehen, in der definierte und organisierte Prozesse für die Softwareentwicklung nicht erforderlich sind. Es gibt eine Menge Dinge, die in solchen Umgebungen schief gehen und zum Scheitern beitragen können. Es ist wichtig, sich von den getesteten Richtlinien oder Regeln helfen zu lassen, die als Standard verwendet werden können, um eine Anleitung für die erfolgreiche Auslieferung eines Produkts zu erhalten. Es ist immer wichtig, vorgeschriebene Methoden für den Software-Entwicklungsprozess zu verwenden, weil sie vorhersehbar sind, wenn sie in einer kontrollierten Umgebung betrachtet werden. Das Vorgehensmodell zur Software-Entwicklung ist ein wiederholbarer Prozess, der so oft wie nötig wiederholt werden kann, um die gewünschten Produktfähigkeiten zu erreichen. Er steht in engem Zusammenhang mit den Leistungsindizes in der Software-Entwicklung. Im Folgenden sind einige bekannte Methoden aufgeführt, die vom Großteil der Software-Entwicklungsfirmen verwendet werden.

Wasserfallmodell

Dieses Modell wird als eines der ältesten und geradlinigsten Methoden für den Softwareentwicklungs-Lebenszyklus angesehen. Sie bietet einen sequentiellen und linearen Ablauf von Schritten. Bei dieser Methodik muss ein Schritt abgeschlossen sein, bevor man zum nächsten übergeht, da jeder folgende Schritt von den Ergebnissen oder Resultaten des vorhergehenden abhängt. Sobald ein Schritt abgeschlossen ist, gibt es kein Zurück mehr, da dieses Modell nur eine Vorwärtsrichtung durch Schritte erlaubt. Beim Wasserfallmodell kann jede Stufe ihren eigenen Plan haben, um die Anforderung effektiver zu erfüllen. Einer der Vorteile dieser Methodik ist ihre Einfachheit, die es uns erlaubt, diesem Modell leichter zu folgen und es umzusetzen. Alle durchzuführenden Aktivitäten sind gut definiert, was es leicht verständlich und nachvollziehbar macht. Ist eine Phase jedoch einmal abgeschlossen, ist es fast unmöglich, zu einem früheren Zustand zurückzukehren. Das Wasserfallmodell gilt im Vergleich zu anderen Methoden als teurer und zeitaufwendiger.

Agile Entwicklung

In diesem Modell wird das Produkt in Zyklen aufgeteilt, so dass der Entwicklungsprozess das funktionsfähige Produkt in kürzerer Zeit liefern kann. Applikationsversionen werden eine nach der anderen produziert. Jede Version wird getestet, um Probleme zu erkennen und Verbesserungsmöglichkeiten zu finden. Die nach dem Testen einer Version gesammelten Daten werden dazu verwendet, Änderungen und Verbesserungen am vorherigen Design vorzunehmen, um so die gewünschten Ergebnisse zu erzielen.  Es handelt sich um eine iterative Technik, bei der in jeder Iteration eine neue kleine Änderung gegenüber der vorherigen Iteration inkrementiert und getestet wird, um die Fehler zu finden, mit denen das Design in der nächsten Iteration verbessert werden kann. Jede Iteration ist an ein kleines Ziel gebunden, was den Prozess schnell macht und das Auffinden der Probleme erleichtert. Der Hauptvorteil dieses Modells ist seine Fähigkeit, in kürzerer Zeit eine hohe Produktqualität zu liefern, die durch einen iterativen Verbesserungsprozess für jede Produktversion entwickelt wird. Dieses Modell ermöglicht die Einbeziehung des Kunden. Nach jeder Iteration hilft das Feedback des Kunden zu jeder aufeinander folgenden Version, das Produkt entsprechend der Nachfrage zu verbessern. Es ist eines der flexibelsten Modelle, da Änderungen in jeder Phase der Prozessentwicklung eingeführt werden können. Dieses Modell ermöglicht es verschiedenen Teams, bei der Entwicklung zusammenzuarbeiten und ein qualitativ hochwertigeres Produkt zu erzielen. Das agile Modell erfordert ein Team von spezialisierten Fachleuten. Jedes Mitglied muss über bestimmte Fähigkeiten verfügen. Wenn Sie den Umfang des Projekts nicht gleich zu Beginn definieren können, kann dieses Modell Herausforderungen mit sich bringen, da in der agilen Entwicklung häufig Änderungen vorgenommen werden. Da dieses Modell das Kundenfeedback für Änderungen begünstigt, führt es das Projekt manchmal in die falsche Richtung. Der Kunde trifft nicht immer die besten Entscheidungen. Außerdem wird der hohe Beitrag der Kunden zum Projektergebnis manchmal überbewertet.

Prototyping

Das Prototyping-Modell ist ein Ansatz, bei dem zunächst ein Arbeitsmodell des gewünschten Softwareprodukts entwickelt wird, das eine begrenzte Funktionalität und die günstigsten Features des eigentlichen Produkts aufweist. Der Kunde meldet die Probleme und Mängel in der Funktionalität des Prototyps an das entwickelnde Unternehmen. Diese Probleme werden im vorangehenden Entwurf behoben, und es wird eine neue Version des Prototyps entwickelt. Diese wird dann wiederum dem Kunden zum Testen zur Verfügung gestellt. Sobald der Kunde mit dem Prototyp zufrieden ist, wird die Vollversion des Produkts entwickelt. Dieses Modell wird normalerweise in größeren Projekten mit komplexen und großen Systemen verwendet. Bei großen Projekten müssen die Benutzer die Funktionalitäten verifizieren, bevor sie die Entwicklung der endgültigen Version genehmigen. Wenn die Software-Anforderungen für den Kunden nicht offensichtlich sind oder wenn die Lösung für die Entwickler nicht klar ist, hilft dieses Modell, ohne viel Zeit zu verlieren, die am besten geeignete Lösung zu finden. Wenn Benutzer an der Produktentwicklung beteiligt sind, verbessert das genauere Feedback der Kunden jede Version des Prototyps. Fehler und Probleme in der Funktionalität werden gleich zu Beginn des Entwicklungsprozesses identifiziert und behoben. Aber wenn der Kunde mit dem Prototyp nicht zufrieden ist, müssen die Entwickler einen neuen bereitstellen. Dieser Prozess dauert so lange, bis eine geeignete Lösung gefunden ist. Die Überarbeitung eines abgelehnten Entwurfs durch den Benutzer verteuert dieses Modell sowohl in zeitlicher als auch in finanzieller Hinsicht.

Spiralmodell

Hierbei handelt es sich um ein risikoorientiertes Modell, das aus vier Hauptphasen besteht. Diese Phasen sind die Formulierung eines Ziels, die Analyse und Lösung von Risiken, die Entwicklung und Erprobung sowie die Planung der nächsten Iteration. Der Softwareprozess folgt diesen vier Phasen iterativ. In der ersten Phase werden die Projektanforderungen gesammelt. Als nächstes werden die Risiken bewertet, und es werden alternative Lösungen erarbeitet. Dann wird auf der Grundlage aktueller Daten ein Prototyp entwickelt und getestet. Dieser liefert Rückmeldungen zu den erforderlichen Änderungen und bestehenden Fehlern des Projekts. Daten aus dieser Phase werden ausgewertet und für die Planung der nächsten Iteration verwendet. Die detaillierte Risikoanalyse in der zweiten Phase verringert die Wahrscheinlichkeit von Fehlschlägen. Aufgrund des zyklischen Charakters des Spiralmodells können in jeder Phase der Entwicklung neue Funktionen hinzugefügt werden.

Abschließende Worte

Obwohl all diese Methoden ihre Vor- und Nachteile haben, kommt es letztlich immer auf die verschiedenen Anforderungen des Kunden, die Spezifität des Projekts und die Größe des Teams an.

Einige dieser Methoden sind älter und vielleicht etwas zu veraltet. Es gibt jedoch immer noch Projekte, die bis heute nur Dank ihnen funktionieren. Auf der anderen Seite geben Methoden wie Agile den Projektmanagern immer die Oberhand und helfen ihnen, ihre Projekte effizient auszuführen.

Wenn Sie mehr über die Software-Entwicklungsmethodik von CodeCoda erfahren möchten, können Sie hier mehr erfahren.

Autor

Nashat Wanli | Chief Technical Officer

Nashat übernimmt die Rolle des Chief Technology Officer bei CodeCoda. Nashat bringt mit seinen früheren Funktionen, die von Software Engineer, Architect über Project Manager bis hin zu CTO bei einem führenden E-Commerce-Unternehmen reichen, fast 25 Jahre wertvolle Branchenkompetenz mit. Er ist eine selbstmotivierte, hochqualifizierte und fähige Person, die, sobald sie zu einem Projekt hinzugefügt wird, Wert und Schlüsselkompetenz bietet.
Seine Erfahrung in der gesamten Bandbreite der Softwareentwicklung ist ein Gewinn für die Softwareentwicklungen unserer Kunden. Seine Liebe zum Detail und sein Ehrgeiz, Innovationen zu entwickeln und wichtige Veränderungen voranzutreiben, sind seine Schlüsselstärken!