Softwareentwicklung


Wie sieht der richtige Softwareentwicklungsprozess aus?

Viele Menschen glauben, dass die Entwicklung von Software ein Prozess sei, der einen klar definierten Anfang und ein klar definiertes Ende hat. Der tatsächliche Prozess bei der Entwicklung von Software ist jedoch in der heutigen Zeit wesentlich komplexer und erstreckt sich über einen langen Zeitraum. Dabei verläuft der Weg nicht auf einer Geraden, sondern vielmehr spiralförmig.

Am Anfang einer jeden Software steht eine Idee. Egal wie klein die Software auch sein mag, sie benötigt eine intensive Planungsphase. In vielen Beispielen erfolgreicher Software verging bereits viel Zeit zwischen der ersten Idee und dem ersten Rohentwurf eines Entwurfes der Architektur der Software. Im Zentrum der ersten Überlegungen steht die hauptsächliche Funktionalität der Software. In vielerlei Hinsicht kann man die Entwicklung einer Software mit dem Bau eines Hauses vergleichen. So muss der Architekt bereits vor seiner Arbeit wissen, welchen Zweck das endgültige Gebilde erfüllen soll.

Die meisten Softwareprojekte der heutigen Zeit beschäftigen sich nicht mit trivialen Problemen. Im seltensten Fall wird das Programm die erwünschte Aufgabe in einem einzigen Arbeitsschritt erledigen können. Aus der groben Idee über den Zweck der Software müssen also mehrere kleinere Unteraufgaben abgeleitet werden. Diese bilden einen groben Grundriss des endgültigen Programms. Zu diesem Arbeitsschritt gehört ebenfalls, sich über den vollen Funktionsumfang der Software klar zu werden. Ein Haus baut man schließlich auch nicht einfach drauflos.

Erst nach der Planung des vollen Funktionsumfangs können Daten und Datenstrukturen ermittelt werden, die für die einzelnen Aufgaben der Software benötigt werden. Eine falsche Formatierung eines bestimmten Datensatzes kann zu einer starken Verzögerung der Fertigstellung des gesamten Projektes führen. Die Datenstrukturen müssen so gewählt werden, dass einerseits die höchste Sicherheit in Bezug auf den Datenschutz gewährleistet werden kann und andererseits alle Teile der Software, die Zugriff auf die Daten benötigen, diesen Zugriff auch bekommen.

Sobald die gesamte Planung abgeschlossen ist, müssen die Anforderungen noch einmal genauestens überprüft werden und mit der aktuellen Planung der Software verglichen werden. Erst wenn sämtliche Anforderungen erfüllt sind, erhält der Rohentwurf die Genehmigung, entwickelt zu werden. Mithilfe verschiedenster Methoden des Projektmanagements kann anschließend die Realisierung der Programmierarbeit vollzogen werden. Aufgrund der besonders hohen Komplexität der heutigen Software müssen die verschiedenen Fähigkeiten der Mitarbeiter effizient für die Entwicklung eingesetzt werden.

In der Endphase der Implementierung geht der Prozess der Entwicklung der Software fließend in eine Testphase über. Abwechselnd wird die Software auf fehlerfreie Funktionalität getestet und anschließend überarbeitet, sobald Fehler auftauchen. An dieser Stelle gibt es zwei verschiedene Möglichkeiten, wie die Entwicklung der Software fortgesetzt wird. Sollten gravierende Fehler innerhalb der Architektur des Systems entdeckt worden sein oder sollte eine bestimmte Funktionalität mit der aktuellen Technik nicht realisierbar sein, muss der gesamte Prozess wiederholt werden. Die neuen Erkenntnisse werden dann in die ursprüngliche Planung eingearbeitet und ermöglichen es dem Team, beim nächsten Versuch dem erfolgreichen Abschluss der Entwicklung der gewünschten Software einen Schritt näher zu kommen. Ebenfalls gibt es die Möglichkeit, dass es zu einer Fehlkommunikation mit dem Auftraggeber bei der ursprünglichen Auftragserstellung kam oder er eine Anpassung der fertigen Software wünscht. In diesen Fällen muss ebenfalls der gesamte Ablauf wiederholt werden.

Erst sobald sowohl Entwickler als auch Auftraggeber mit dem endgültigen Produkt zufrieden sind, kann die Software veröffentlicht werden. Die Veröffentlichung stellt gleichermaßen den Abschluss der Softwareentwicklung dar.

 

Wie funktioniert ein effektives Projektmanagement in Softwareentwicklungsprozessen?

Im Rahmen des IT-Projektmanagements haben sich mehrere verschiedene effektive Formen herauskristallisiert, um die Prozesse der Softwareentwicklung zu optimieren. Ebenso wie jedes Team individuelle Voraussetzungen für die Entwicklung der Software besitzt und aus individuellen Personen besteht, sind manche Methoden des Projektmanagements effektiver als andere. Aktuell haben sich drei verschiedene Formen als besonders effektiv erwiesen und werden von nahezu jedem Entwicklerteam angewendet. Diese sind das V-Modell, Extreme Programming und Scrum.

Das V-Modell

Bei dem V-Modell wird der Prozess der Softwareentwicklung in verschiedene Phasen unterteilt. Dabei bezieht sich das V-Modell nicht nur auf Prozesse der Softwareentwicklung, sondern ebenso auf Prozesse der Qualitätssicherung. Der Name des Modells beruht auf der typischen Darstellung der angewendeten Vorgehensweise. Bildet man in einem Diagramm die Detaillierung der einzelnen Arbeitsschritte in Abhängigkeit von der verstrichenen Zeit ab, so entsteht typischerweise die Form eines “V”. Bis zur Hälfte des Projektes nimmt die Detailliertheit der Aufgaben immer weiter zu und nimmt anschließend immer weiter ab.

Vorerst beginnt man auf der linken Seite mit einer fachlichen bzw. funktionalen Spezifikation. Dies wird immer detaillierter in eine technische Spezifikation bzw. eine Grundlage für die Implementierung ausgebaut. Die Spitze des Modells beinhaltet die eigentliche Implementierung. Auf der rechten Seite werden anschließend die Anforderungen an die Software mit den vorhandenen Funktionen verglichen.

Diese besonders effektive Methode wurde im Jahr 1979 von dem amerikanischen Softwareentwickler Barry Boehm erstmals angewendet. Sie stellt eine weiterentwickelte Form des Wasserfallmodells dar. Das Modell muss zwingend Schritt für Schritt abgearbeitet werden, da die Ergebnisse der einzelnen Phasen Grundlage für die Entwicklung der nächsten tieferen Projektphase genutzt werden. Bei genauerer Betrachtung erkennt man leicht, dass die gesamte linke Seite des Modells, die aus Spezialisierungsphasen und einer abschließenden Phase der Realisierung besteht, ein exaktes Ebenbild des Wasserfallmodells ist. Lediglich die im rechten Ast dargestellten Testphasen machen aus dem Wasserfallmodell das V-Modell. Mit dieser Gegenüberstellung wird versucht, eine möglichst hohe Abdeckung an Tests zu erreichen. Da jede Testphase direkt aus der dazugehörigen Spezifikationsphase abgeleitet wurde, wird eine optimale Prüfung aller Anforderungen gewährleistet.

Extreme Programming

Beim Extreme Programming (XP) bzw. zu Deutsch Extremprogrammierung, nimmt das Lösen der Programmieraufgabe die zentrale Rolle der Softwareentwicklung ein. Den formalen Vorgaben misst man dabei ausschließlich eine sehr geringe Bedeutung zu. Wenngleich die Wirksamkeit dieses Modells unter Experten der Softwareentwicklung sehr umstritten ist, stellt es vor allem bei jungen Entwicklerteams ein häufig verwendetes und beliebtes Modell dar. Grundsätzlich leitet man aus den Anforderungen des Kunden ein essenzielles Problem der Programmierung ab und versucht, dieses nach eigenen Maßstäben zu lösen. Anschließend nähert man sich in kleinen Schritten den Anforderungen des Kunden an.

Entstanden ist dieses Modell durch die Kombination verschiedener bewährter Methoden der Softwareentwicklung, bei welchen man ausschließlich auf die schnellste Erreichung sichtbarer Ergebnisse geachtet hat. Diese Methoden werden auch als “Best Practices” bezeichnet. Beim Extreme Programming achtet man auf eine besonders strukturierte Teamarbeit. Deshalb stehen die Kommunikation und Offenheit aller Teammitglieder an oberster Stelle. Auf der Grundsäule der Kommunikation baut der gesamte Erfolg dieser Methode auf.

Diese Methode generalisiert die in der Praxis häufig vorkommende Situation, dass der Kunde bei Projektbeginn seine Anforderungen an die in Auftrag gegebene Software selbst noch nicht kennt. Da in manchen Fällen zahlreiche Funktionen der Software, die zu Beginn des Projektes oberste Priorität hatten, im Laufe der Zeit immer unbedeutender werden und schlussendlich sogar hinfällig werden, ignoriert das Entwicklerteam sämtliche Anforderungen des Kunden, die nicht die Hauptfunktion der Software darstellen. Erst nachdem der Kunde mit der hauptsächlichen Funktionalität der Software zufrieden ist, können Zusatzfunktionen in Auftrag gegeben und integriert werden.

Dadurch soll eine schnellere Bereitstellung der Software ermöglicht werden. In der Praxis hat eine konsequente Einhaltung des Extreme Programmings meist eine höhere Softwarequalität, gesteigerte Zufriedenheit des Kunden und eine geringere Bearbeitungszeit zur Folge. Der Kunde erhält bei dieser Methode das Gefühl, nicht lediglich einen Auftrag erteilt, sondern aktiv an der Herstellung der gewünschten Software teilgenommen zu haben.

Scrum

Das Scrum hat sich bislang als die effektivste Methode der Softwareentwicklung bewährt. Sie ist dabei besonders vielseitig einsetzbar, sodass sie aktuell bereits in deutlich mehr Fachbereichen eingesetzt wird. Neben der Entwicklung von Software wird sie ebenfalls häufig bei der Planung von Veranstaltungen und im Marketing eingesetzt. Grundsätzliches Ziel ist es, durch diese Methode eine besonders flexible Projektentwicklung zu gewährleisten.

Der Kern von Scrum besteht aus drei Rollen und fünf verschiedenen Aktivitäten. Dabei werden die genauen Regeln in einem sogenannten Scrum Guide festgehalten. Dieser kann individuell angepasst und ausgestaltet werden, um die größten möglichen Freiheiten bei der Projektgestaltung zu gewährleisten. Zusätzlich konzentriert sich diese Methode auf die Grundsätze der Transparenz, Überprüfung und Anpassung. Sämtliche Fortschritte und Hindernisse des Projektes müssen zu jedem Zeitpunkt für das ganze Team sichtbar sein. Dazu wird ebenso das Produkt wie auch das praktizierte Vorgehen regelmäßig überprüft und bei Bedarf angepasst.

Ein Scrum Team besteht immer aus einem Product Owner, einem Scrum Master und einer beliebigen Anzahl von Mitgliedern des Entwicklungsteams. Außerhalb des Scrum Teams sind für gewöhnlich sämtliche Stakeholder berechtigt, an den meisten Aktivitäten des Scrum Teams teilzunehmen und über alle Entwicklungen auf dem Laufenden gehalten zu werden. Als Stakeholder werden alle Menschen bezeichnet, die ein begründetes Interesse an einem erfolgreichen Projektabschluss haben, aber nicht dem Entwicklerteam angehören. Es können Kunden, Anwender oder das Management sein.

Der Product Owner ist für den wirtschaftlichen Erfolg des Projektes verantwortlich und soll den zu erreichenden Gewinn maximieren. Dafür priorisiert er bestimmte Eigenschaften der zu erstellenden Software und sorgt fortlaufend dafür, dass eine größtmögliche Gewinnerzielung im Fokus steht. Der Scrum Master hingegen ist dafür verantwortlich, dass die Methode des Scrum im aktuellen Projekt tatsächlich funktioniert. Er muss fortlaufend auf Probleme des Teams eingehen und dafür sorgen, dass der größtmögliche Nutzen aus dieser Methode gezogen werden kann. Das Entwicklungsteam ist ausschließlich für die Entwicklung der Software nach den Vorgaben des Product Owners und unter Anleitung des Scrum Masters zuständig.

Dieses Team nutzt die fünf Aktivitäten des Scrum bei der Umsetzung der Softwareentwicklung. Die prägendste Aktivität des Scrum besteht in dem täglichen “Daily Scrum”. Dabei trifft sich das gesamte Team und spricht offen über den aktuellen Stand der Entwicklung und über Problemstellungen, die sich im Verlauf des vorangegangenen Tages entwickelt haben könnten. Während des Daily Scrums soll dann eine Lösung für alle auftretenden Probleme gefunden werden, sodass jedes Mitglied des Entwicklungsteams nach dem Daily Scrum weiß, wie es mit dem Problem umzugehen hat.

Weiterhin gibt es sogenannte Sprints. Diese stellen einen Entwicklungsabschnitt dar, in welchem ein besonders großer Fortschritt erreicht werden soll. Entsprechend muss beim “Sprint Planning” festgehalten werden, was genau erreicht werden soll und wie man es erreichen möchte. Nach dem Sprint wird in einem Sprint Review der gesamte Sprint analysiert und bewertet. Anschließend kann während der “Sprint Retrospektive” die Vorgehensweise des Teams analysiert werden, um sie für den nächsten Sprint zu optimieren. Zusätzlich führt das gesamte Team fortlaufend mehrere “Product Backlog Refinements”. In diesem wird ein Product Backlog erstellt, welches zahlreiche wertvolle Informationen für alle Stakeholder bereithält.

 

Wenn ich Softwareentwicklung studieren möchte, wo kann ich das tun?

Die Entwicklung von Software kann man an nahezu jeder Universität oder Fachhochschule studieren. Der Grad der Intensität, mit welcher die Universität oder Hochschule auf das Themengebiet der Softwareentwicklung eingeht, hängt jedoch besonders stark von dem gewählten Studiengang ab.

Der Studiengang, der sich am intensivsten mit dem Thema Softwareentwicklung beschäftigt ist der Bachelor of Science “Software Engineering” mit dem meist nachgestellten Master of Science “Software Engineering”. Dieser sehr spezielle Studiengang wird allerdings noch von wenigen Hochschulen angeboten. Das tiefgreifendste Wissen erlangt man an der Technischen Universität München. Dort wird der Elitestudiengang Software Engineering angeboten, der sich so tiefgehend wie kein anderer mit der Thematik beschäftigt.

Eine weitere Anlaufstelle stellt die Universität Ulm dar. Auch dort kann man sich in einem in Bachelor und Master unterteiltem Studiengang speziell mit der Softwareentwicklung beschäftigen. Weiterhin bietet die Hochschule Heilbronn diesen Studiengang ebenfalls an. Beide Hochschulen haben deutlich niedrigere Zugangsvoraussetzungen als die Technische Universität München und bieten trotzdem einen spezialisierten Studiengang an.

Diese Möglichkeit bieten einem ansonsten lediglich die beiden Fernuniversitäten in Hagen und Darmstadt. So kann man unabhängig vom Wohnort entweder an der Wilhelm-Büchner-Universität in Darmstadt oder an der Fernuniversität Hagen diesem besonders speziellen Studiengang nachgehen.

Man muss jedoch nicht unbedingt Software Engineering studieren, um sich in seinem Studium mit der Entwicklung von Software zu beschäftigen. Nahezu jede Universität und Fachhochschule bietet einen Studiengang der Informatik an. Hierbei ist die Spezialisierung des Fachgebietes nebensächlich. Jeder Student eines Studienfaches, das starken Bezug zur Informatik hat, erhält zumindest oberflächliches Wissen über die Entwicklung von Software und kann sich je nach Universität weiter auf dieses Thema spezialisieren. An einigen Universitäten wird sogar ein Mehrfachbachelor angeboten, bei welchem man die Softwareentwicklung als Nebenfach für ein Studium der Germanistik, Geschichte oder Sozialpädagogik wählen kann. Es gibt also zahlreiche Möglichkeiten, sich während des Studiums mit der Entwicklung von Software zu beschäftigen.

Kann ich auf eine andere Art und Weise lernen, Software zu entwickeln?

Die Entwicklung von Software ist keinesfalls ein Themengebiet, dass man nur erlernen kann, wenn man sich in sein Studium ausschließlich damit beschäftigt. In den meisten Universitäten erhält man während des Studiums der Informatik das Wissen über die Softwareentwicklung lediglich als Nebenprodukt der zahlreichen anderen spezialisierten Themengebiete.

Es gibt zahlreiche andere Möglichkeiten, die Entwicklung von Software zu erlernen. Dafür muss man noch nicht einmal studieren. Die wesentlichsten Grundsätze der Softwareentwicklung werden bereits in der Ausbildung zum Fachinformatiker vermittelt. Nicht selten haben Fachinformatiker sogar spezielleres Fachwissen über die Entwicklung von Software als Personen, die ein Studium der Informatik abgeschlossen haben.

Eine weitere Möglichkeit besteht in der Teilnahme an einem der zahlreichen im Internet verbreiteten Kurse. Manche dieser Kurse sind kostenpflichtig und andere vollkommen kostenfrei. Mit den meisten ist es jedoch ohne Probleme möglich, umfassende Erkenntnisse der Softwareentwicklung zu erlangen.

Die einfachste Möglichkeit besteht jedoch im Selbststudium. Abgesehen von der Ausbildung muss man sich das Wissen über die Entwicklung von Software in jedem Fall selbst aneignen. Viele Universitäten erwarten von ihren Studenten, dass sie sich die grundlegenden Kenntnisse der Softwareentwicklung neben dem Studium selbst beibringen. Für diese Tätigkeit muss man jedoch nicht zwangsläufig in einer Universität eingeschrieben sein. Es existieren zahlreiche Bücher und kostenfreies Wissen im Internet, mit welchen man ein tiefgreifendes Wissen über die Entwicklung von Software aufbauen kann.

Eine Spezialisierung des erlernten Wissens erfolgt in jedem Fall ausschließlich durch Praxis. Ob in der Universität, in der Ausbildung oder beim selbstständigen Lernen – das beste Verständnis der Softwareentwicklung erlangt man ausschließlich durch die Entwicklung einer eigenen Software. Hierfür benötigt man lediglich eine Idee, an welcher man arbeiten möchte und eine Gruppe von Personen, die diese Software ebenfalls entwickeln möchten. In der Softwareentwicklung ist die Erlangung des Wissens durch “Learning by Doing” weiterverbreitet als in jeder anderen Disziplin.