Ihr umfassender Leitfaden für alle Dinge der Softwareentwicklung
Veröffentlicht: 2020-08-13Wie ähnlich sind sich eine Produktionshalle in einer Fabrik und ein Büro von Softwareentwicklern?
Stellen Sie sich einen Raum voller Programmierer vor, die Code in ihre Computer eingeben. Was wäre, wenn Sie ihre Ergebnisse wie zusammengebaute Widgets vom Fließband einer Fabrik behandeln würden? Funktionieren die Dinge, die die Produktion maximieren, auch hier? Oder ist der Entwicklungsprozess eher wie in anderen Ingenieurdisziplinen?
Projektmanager haben seit Beginn der Softwareentwicklung versucht, dieses Problem zu lösen. Aus diesen Fragen ist die Definition des Softwareentwicklungslebenszyklus entstanden.
Was ist Softwareentwicklung?
Es ist der Prozess, Software von Grund auf neu zu erstellen. Während das Schreiben von Code die Kernaktivität ist, ist es viel mehr als das.
Der Entwicklungsprozess umfasst Ideenfindung und Design, bevor Code geschrieben wird. Die Planung ist leicht zu übersehen. Es fühlt sich nicht wie Entwicklung an, wie es beim Schreiben von Code der Fall ist. Doch erst die Beantwortung entscheidender Fragen stärkt das fertige Produkt. Lohnt sich das Projekt überhaupt? Wenn ja, wie geht man da am besten vor? Welche Features sind notwendig und welche Features sind nice to have? Die Antworten geben dem Projekt eine bessere Chance auf Erfolg.
Während die Schritte konstant sind, variiert ihre Anwendung. Der Grund, warum Softwareentwicklung eine neue Disziplin ist. Ingenieurdisziplinen sind mit einer jahrhundertealten Geschichte ausgereift. Die Softwareentwicklung geht nur bis in die späten 1940er Jahre zurück. Es ist noch eine neue Disziplin. Die agile Methode ist erst 20 Jahre alt. Dennoch ist es eines der einflussreichsten Ereignisse in der Theorie der Softwareerstellung. Unabhängig davon sind die sechs Lebenszyklusphasen der Softwareentwicklung allen Systemen gemeinsam.
6 Phasen des Softwareentwicklungslebenszyklus (SDLC)
Ein Entwicklungsteam kann den Lebenszyklus der Softwareentwicklung für ein ganzes Projekt oder eine Funktion verwenden. Bei der Entwicklung der Verwendung des SDLC ging es darum, das Risiko zu verringern, indem die Länge jedes Schritts verkürzt wurde. Gleich werden wir uns die verschiedenen Methoden genauer ansehen. Lassen Sie uns zunächst die Schritte selbst untersuchen.
Beachten Sie auch, dass Sie Varianten in Bezug auf die Anzahl der Schritte oder ihre Namen sehen. Manchmal werden Schritte wie Entwicklung und Test zusammengeführt. In anderen Fällen wird ein Schritt in zwei Teile geteilt, wie z. B. Planung, die zu Planung und Analyse wird. In unserem Fall bleiben wir bei diesen sechs, da sie die Phasen klar definieren.

1. Planung
Die Planungsphase ist der wichtigste Schritt. Die Beteiligten müssen alles berücksichtigen, einschließlich der Machbarkeit des Projekts selbst. Es ist in Ordnung, das gesamte Projekt hier zu töten. Eine gesunde Organisation wird die Stakeholder bei Bedarf dazu befähigen. Programmierer werden während dieser Phase in einer Unternehmensumgebung weniger beteiligt sein. Product Owner, Business Analysts und andere Stakeholder äußern in diesem Schritt ihre Bedürfnisse.
2. Entwurf
Die Planungsphase ist der wichtigste Schritt. Die Beteiligten müssen alles berücksichtigen, einschließlich der Machbarkeit des Projekts selbst. Es ist in Ordnung, das gesamte Projekt hier zu töten. Eine gesunde Organisation wird die Stakeholder bei Bedarf dazu befähigen. Programmierer werden während dieser Phase in einer Unternehmensumgebung weniger beteiligt sein. Product Owner, Business Analysts und andere Stakeholder äußern in diesem Schritt ihre Bedürfnisse.
3. Entwicklung
Die Designphase umfasst auch das Design der Benutzererfahrung (UX). Wenn die Anwendung benutzerorientierte Komponenten enthält, ist UX-Design ein Muss. Dazu gehört die Benutzerforschung, indem echte Menschen bei der Interaktion mit Produktmodellen beobachtet werden. Der Grund dafür, dass dies in der Entwurfsphase statt in der Entwicklungsphase geschieht, ist das Timing. Benutzersitzungen brauchen Zeit. Aufgrund der gesammelten Daten kommt es häufig auch zu weiteren Diskussionen mit Geschäftsinteressenten.
4. Testen
Als nächstes testet das Entwicklungsteam den Code. Der Codeschreiber und der Tester sollten verschiedene Personen sein. Noch besser ist ein Nicht-Entwickler-Qualitätssicherungstester. Entwickler neigen dazu, nur an Happy-Path-Szenarien zu denken. Engagierte QA-Testexperten sind in der Regel besser darin, darüber nachzudenken, wie sie die Software kaputt machen können. Es ist wahrscheinlicher, dass sie auf diese Weise Fehler vor der Bereitstellung finden. Das Ergebnis ist eine stabilere Software bei der Veröffentlichung.
Automatisiertes vs. manuelles Testen
Unit-Tests und Integrationstests werden häufig automatisiert. Häufig führt eine DevOps-Plattform diese Tests mit neuem Code durch, bevor sie ihn in den Master-Branch einführt.
Manuelles Testen ist noch lange nicht obsolet. Automatisierte Tests machen immer wieder dasselbe. Eine Person, die manuelle Tests durchführt, kann jedoch während des Tests versehentlich Fehler finden. Es ist die Variabilität beim manuellen Testen, die seine Stärke ausmacht.
Unit-Tests
Ein Unit-Test verifiziert nur eine Methode, mehr nicht. Die zu testende Funktion ist die Grenze. Der Entwickler schreibt die Komponententests, und einige SDLC-Frameworks schreiben sie vor. Extreme Programming erfordert sie. Es schreibt auch testgetriebene Entwicklung vor. Dies ist die Praxis, zuerst Unit-Tests zu schreiben. Dann Schreiben des eigentlichen Programmcodes.
Integrationstest
Integrationstests prüfen Abschnitte oder Features der Codebasis. Sie sind normalerweise automatisiert und werden von der DevOps-Plattform ausgeführt. Was sie überprüfen, umfasst mehr als eine einzelne Methode. Ein Beispiel ist die Überprüfung, ob ein API-Aufruf einen neuen Datensatz in einer Datenbank beibehalten hat. Vergleichen Sie dies mit einem Komponententest, der auch die API-Methode überprüft. Der Komponententest könnte nur überprüfen, ob ein Aufruf der Datenbank erfolgen sollte. Der Integrationstest kann nachweisen, dass die Daten wie erwartet durch die Anwendung geflossen sind.
Systemtests
Die letzte Testform ist der vollständige Systemtest. Zusammenfassend lässt sich sagen, dass Unit-Tests nur eine Funktion verifizieren. Integrationstests verifizieren eine Funktion. Aber Systemtests behandeln die gesamte Anwendung als eine Einheit. Der Rauchtest ist eine leichte Form des Systemtests. Darin interagiert der Tester mit dem System wie ein natürlicher Benutzer und stellt sicher, dass es sich wie erwartet verhält. Im Gegensatz zu vollständigen End-to-End-Systemtests, die strenger sind. Ein vollständiger Systemtest prüft alle Teile eines Systems als eine Einheit. Außerdem kann eine Reihe von Integrationstests als vollständiger Systemtest dienen.
5. Bereitstellung
In der Bereitstellungsphase wird der getestete Code in die Produktion verschoben. Die Automatisierung der Bereitstellung macht sie zuverlässiger. Außerdem erhöht das Üben von Produktionsbereitstellungen die Chancen auf eine reibungslose Bereitstellung. Das Entwicklungsteam übt mit einer Testumgebung, die als Staging-Umgebung bezeichnet wird. Es sollte mit der Produktion identisch sein. Je ähnlicher die beiden Umgebungen sind, desto wertvoller ist der Praxiseinsatz.
6. Wartung
Alles bis zu diesem Punkt im SDLC wird nur etwa ein Viertel der Gesamtbetriebskosten ausmachen. Die anfänglichen Entwicklungskosten der Software betragen 25 % dessen, was das Unternehmen ausgeben wird. Die Wartungsphase kostet das Unternehmen rund 75 % der Gesamtbetriebskosten. Die Verteidigung gegen explodierende Wartungskosten wird eher den früheren Phasen gewidmet. Dies bedeutet ein besseres technisches Design, eine bessere Entwicklung und gründlichere Tests. Die Alternative sind technische Schulden. Wie echte Schulden werden sie mit der Zeit teurer.
5 Hauptmethoden der Softwareentwicklung
Während sich die Schritte von SDLC nicht ändern, variiert ihre Implementierung und Ausführungsreihenfolge. Sehen wir uns die beliebtesten Methoden an, mit denen Unternehmen den Softwareentwicklungsprozess durchführen.
1. Agil
Was Agile einzigartig macht, ist der Fokus auf den Menschen. Die agilen Methoden haben die Aufmerksamkeit der Branche neu ausgerichtet. Früher stand das Produkt, die Software, im Mittelpunkt. Agile stellte dies in Frage und konzentrierte sich auf die Personen, die den Prozess durchführen. Außerdem hatten Extreme Programming (XP) und Scrum vor dem Agilen Manifest keine Verbindung. Doch danach vereinten sich ihre Praktiker unter dem Agile-Banner.
Agile ist kein Framework an sich. Es ist ein Framework für Frameworks. Im Kern geht es darum, sich auf Menschen und schnelle Iterationen zu konzentrieren. Es ist genau das, was der Name sagt, agil. Gut gemacht gibt es Flexibilität beim Erreichen des Ergebnisses. Prozesse gehen nie auf Kosten der Menschen, sondern sie schöpfen Wert aus ihnen.

Ein weiterer wichtiger Aspekt von Agile ist ein iterativer Ansatz. Die Idee ist, Arbeitsblöcke in kürzeren Zeitabschnitten zu erledigen. Auf diese Weise kann sich das Unternehmen schneller an Marktveränderungen anpassen. Die Fähigkeit, die Richtung der Entwicklung schnell zu ändern, macht es agil. Gleichzeitig kann das Entwicklungsteam aus dem, was es in jeder Iteration getan hat, lernen und sich verbessern. Agile Teams tun dies in retrospektiven Meetings nach jeder Iteration.
2. Extreme Programmierung
Extreme Programming (oft als XP abgekürzt) begann in den frühen 1990er Jahren. Martin Fowler war einer der ursprünglichen Unterzeichner des Agilen Manifests. Er glaubt, dass Agile seine Popularität durch das XP-Framework erlangt hat. Darüber hinaus behauptet er, dass dies der beste Weg ist, um mit der agilen Softwareentwicklung zu beginnen.
XP hat seinen Namen von seinem Ansatz. Es braucht allgemein bewährte Softwarepraktiken und erfordert sie. Das macht es "extrem". XP erfordert Dinge wie Unit-Tests, Paarprogrammierung und häufigere Veröffentlichungen.
Was XP zu einer einzigartigen Methode macht, ist:
- Kurze Iterationszyklen (üblicherweise 1 bis 2 Wochen)
- Offenheit für das Ersetzen von Arbeitselementen in der aktuellen Iteration (etwas, das Scrum nicht zulässt)
- Schwerpunkt auf automatisiertem Testen und Paarprogrammierung
3. Mager
Lean war technisch gesehen nicht agil, aber in der Praxis fühlt es sich ähnlich an. Jetzt wird es von den meisten als Teil von Agile akzeptiert. Sein Fokus unterscheidet sich von traditionellem Agile. Gemäß dem Agile-Manifest „Individuen und Interaktionen über Prozesse und Tools“. Lean konzentriert sich mehr auf die Software als auf die Macher.
Seine Wurzeln sind die Lean-Manufacturing-Prinzipien von Toyota. Hier sind die sieben Teile, die es definieren. Wenn Sie mit Lean in der Fertigung vertraut sind, werden diese ähnlich klingen. Sie sind:
- Abfall beseitigen
- Lernen verstärken
- Entscheiden Sie sich so spät wie möglich
- So schnell wie möglich liefern
- Stärken Sie das Team
- Bauen Sie Integrität ein
- Optimieren Sie das Ganze
4. Gedränge
Scrum ist die beliebteste agile Methode. Laut dem 14. State of Agile-Bericht verwenden 58 % der Softwareunternehmen Scrum. Wenn Sie Scum-Hybride einbeziehen, steigt der Prozentsatz auf 84 %. Was die Frage aufwirft, warum ist es das beliebteste?
Die Antwort lautet: Bei Scrum geht es darum, mehr Arbeit in kürzerer Zeit zu erledigen. Das spricht Unternehmen an. Jede Iteration in Scrum ist ein „Sprint“. Der Name verstärkt die Vorstellung von Geschwindigkeit. Normalerweise dauert ein Sprint 2 bis 3 Wochen. Sobald ein Scrum-Team einen Sprint geplant hat, sollte ihn niemand mehr ändern. Neue Arbeit muss bis zum Start des nächsten Sprints warten. Dies erfordert Disziplin seitens der Geschäftsbeteiligten. In der Praxis wird oft gegen diese Scrum-Regel verstoßen. Aus diesem Grund berichten Teams oft von einem Scrum-Hybrid.
Ein weiteres Merkmal von Scrum ist der Scrum Master. Dies ist ein Teammitglied, das dafür nominiert ist, den Sprint auf Ziel zu halten. Häufig ist der Scrum Master ein Entwickler aus dem Entwicklerteam.
Die am weitesten verbreitete Variante von Scrum ist ScrumBan, ein Mashup aus Scrum und Kanban. Kanban hat seine Wurzeln im japanischen Toyota-Fertigungsprozess wie Lean. Es ist ein System der Just-in-Time-Arbeit.
Jedes Arbeitselement ist wie eine eigene Iteration. Ein Entwickler arbeitet immer nur an einer Sache. Die Regel ist ein „in Bearbeitung“-Element pro Entwickler. Diese strenge Work-in-Progress-Grenze wirft ein Licht auf alle Engpässe. Entwickler verfolgen laufende Arbeitselemente über ein Kanban-Board. Als Nebenbemerkung kommt der Name daher. Auf Japanisch bedeutet Kanban „Schild“.
5. Wasserfall
Die Wasserfallmethode ist die früheste aller Softwareentwicklungspraktiken. Es ist mindestens mehrere Jahrzehnte älter als Agile. Auch diese Methode ist älter als ihr Name.
Es ist die natürliche Art und Weise, wie Unternehmen ihre Arbeit schon immer erledigt haben. Es ist ein linearer Prozess, und Sie beginnen am Anfang. Zunächst stellen Stakeholder Anforderungen zusammen. Sie tun dies nicht für ein oder zwei Features. Nein, Geschäftsbeteiligte prüfen das gesamte Projekt auf einmal. Danach beginnt die Arbeit. Die Entwickler erledigen die ganze Arbeit, ohne bis zur Fertigstellung zu iterieren.
Der Wasserfallweg ist konzeptionell am einfachsten zu verstehen. Menschen tun eine Sache nach der anderen. Das heißt, es ist das riskanteste für den Geschäftserfolg. Wenn etwas vom Ziel abweicht, können die Beteiligten es bis zum Abschluss des Projekts nicht korrigieren. Der Grund dafür ist, dass es bis zum Abschluss des Projekts nicht einmal bemerkt wird.
3 Kernuntertypen von Software
Fertige Software ist einer von drei Typen. Diese Typen sind System-, Programmier- und Anwendungssoftware. Zur Veranschaulichung hier eine Kuchenback-Analogie. Ein Mixer oder Spatel ist die Programmiersoftware. Es ermöglicht Ihnen, mehr Kuchen oder mehr Softwareanwendungen in dieser Analogie zu machen. Beim Zusammenstellen eines Kuchens ist die unterste Schicht die Systemsoftware. Es ist die Grundlage. Ohne sie können Sie keinen Schichtkuchen haben. Die oberste Schicht wäre dann die Anwendungssoftware. Es ist das, was für die meisten zufälligen Beobachter sichtbar ist.
Systemsoftware
Das Betriebssystem eines Computers ist Systemsoftware. Es ist entscheidend für die Nützlichkeit davon. Stellen Sie sich einen Computer ohne Betriebssystem vor. Sie könnten nur über Maschinensprache damit interagieren. Das ist rein binär – nur Einsen und Nullen. Sie würden es unmöglich finden, damit auf jeder Ebene zu arbeiten. Systemsoftware erschließt den Nutzen eines Computers.
Windows, macOS und Linux sind die beliebtesten Beispiele für Systemsoftware. Gerätetreiber sind ebenfalls Systemsoftware. Sie erweitern die Grundfunktionalität eines Betriebssystems. Intelligente Geräte ohne Betriebssystem verwenden Firmware, um ihre Funktionalität zu ermöglichen. Es ist auch Systemsoftware.
Programmiersoftware
Programmiersoftware ist eine Teilmenge der Anwendungssoftware. Jedes Programm, das ein Entwickler verwendet, um neue Programme zu erstellen, würde klassifiziert werden. Sie reichen von einfachen Texteditoren bis hin zu komplexen integrierten Entwicklungsumgebungen (IDEs). Die meisten Entwickler bevorzugen komplexere Programmiersoftware-Tools. Programme wie Microsofts Visual Studio helfen, die Entwicklung zu beschleunigen.

Anwendungssoftware
Anwendungssoftware ist der häufigste Typ. Es ist die Software, mit der Sie Dinge mit einem Computer erledigen können. Es macht Computer nützlich. Beliebte Beispiele sind Programme wie Microsoft Word und Excel.
Auch Cloud-Software fällt in diese Kategorie. Google Docs, Dropbox und sogar Instagram sind Anwendungssoftware. Wenn Sie jemals verwirrt sind, ob es sich bei etwas um Anwendungssoftware handelt oder nicht, finden Sie hier einen einfachen Test. Benötigt das Programm etwas anderes, um ausgeführt zu werden? Windows oder Android nicht. Sie sind Systemsoftware. PowerPoint oder sogar ein Spiel wie Call of Duty benötigen andere Dinge, die ausgeführt werden, um zu funktionieren, was bedeutet, dass es sich um Anwendungssoftware handelt. Ohne Gerätetreiber und Betriebssystem können sie nicht ausgeführt werden.
Fazit
Die Methoden der Softwareentwicklung sind noch ausgereift. Unabhängig von der verwendeten Methode bleiben die Schritte jedoch gleich. Agile Teams können sie schneller durchlaufen, und Wasserfallpraktiker bewegen sich langsam von einem zum nächsten. Um jedoch bessere Software zu entwickeln, müssen Sie den Prozess für jeden Schritt stärken. Sie bauen aufeinander auf. Der Lebenszyklus der Softwareentwicklung ist nichts ohne einen seiner Schritte. Die Teile machen das Ganze.
Denken Sie darüber nach, was passieren würde, wenn Sie einen Schritt auslassen würden. Ohne zu planen, was Sie machen? Ohne Design verläuft der Entwicklungsprozess planlos. Ein Weglassen des Entwicklungsschrittes ist nicht möglich. Ein Mangel an Tests stellt sicher, dass das Produkt nicht wie erwartet funktioniert. Wenn keine Bereitstellung erfolgt, hat niemand Zugriff auf das Produkt. Eine nicht gewartete Anwendung wird nicht mehr verwendet. Jeder Schritt ist entscheidend für den Erfolg eines Softwareprodukts.