
Mit diesem Beitrag beginnt ein Crashkurs zum Thema Software Engineering. Du wirst in diesem Artikel eine kurze Einführung in das Thema erhalten, damit du sowohl den Begriff als auch die Ziele davon verstehen kannst. So hast du am Ende die Möglichkeit, zu entscheiden, ob auch die nachfolgenden Beiträge dieses Crashkurses für dich interessant sein werden.
Inhaltsverzeichnis
1. Warum ist das Thema Software Engineering so wichtig?
Unabhängig davon, ob du als Anwendungsentwickler, Spieleentwickler oder in einem anderen Bereich der Softwareentwicklung tätig bist – Software Engineering ist für alle Entwickler enorm relevant. In dieser Tutorialreihe wirst du lernen, wie Softwareprojekte von Grund auf strukturiert werden.
Dieses Wissen ist nicht nur hilfreich, sondern auch essenziell, um den gesamten Entwicklungsprozess besser zu verstehen.
Ein fundiertes Verständnis über Software Engineering ist für jede Position in der Softwareentwicklung von großem Wert und wird dir dabei helfen, Projekte effizienter zu gestalten.
2. Was wirst du in diesem Beitrag lernen?
Zunächst werden wir die grundlegende Frage beantworten, was Software Engineering eigentlich ist. Dabei werde ich den Begriff ausführlich erklären, damit du eine klare Vorstellung davon erhältst.
Im Anschluss sehen wir uns die Ziele an, die wir mit Software Engineering verfolgen und warum sie in der Praxis so wichtig sind.
Anhand eines Beispiels werde ich dir dann aufzeigen, wie Fehler im Software Engineering zu erheblichen Problemen und Schäden führen können.
Abschließend gebe ich dir einen Ausblick auf die Inhalte des gesamten Crashkurses, damit du entscheiden kannst, ob dieses Thema für dich interessant ist.
Lass uns also direkt mit der ersten Frage starten:
3. Was ist Software Engineering?
Software Engineering, zu deutsch „Software Technik“, ist die praktische Anwendung wissenschaftlicher Erkenntnisse, um Software wirtschaftlich zu entwickeln, einzusetzen und zu warten.
Dieser Satz mag im ersten Moment wahrscheinlich ziemlich komplex wirken, weshalb wir uns die einzelnen Teile gleich genauer ansehen werden.
Zum einen haben wir die „praktische Anwendung wissenschaftlicher Erkenntnisse“. Das bedeutet, dass wissenschaftliche Methoden und Techniken genutzt werden, um „Software wirtschaftlich zu entwickeln, einzusetzen und zu warten“.
Bei diesem zweiten Teil des Satzes ist besonders der Begriff „wirtschaftlich“ von Bedeutung, denn im Software Engineering geht es nicht nur um die Entwicklung von Software, sondern auch darum, diese so zu gestalten, dass sie sowohl kosteneffizient erstellt als auch effektiv genutzt werden kann.
Es geht dabei also nicht nur um das Feld der Programmierung, sondern unter anderem auch um betriebswirtschaftliche Aspekte. Schließlich möchten Unternehmen, die Software entwickeln, auch Geld verdienen.
Wenn du allerdings jemand bist, der aus reiner Leidenschaft codet und kein finanzielles Interesse beim Programmieren sieht, ist das völlig in Ordnung. In diesem Kontext kannst du „wirtschaftlich“ einfach als "zweckorientiert" verstehen.
Das bedeutet, dass es im Software Engineering einen Prozess gibt, der auf zahlreichen Best Practices basiert und sicherstellt, dass am Ende qualitativ hochwertige Software entsteht. Diese Software erfüllt die Bedürfnisse der Kunden bzw. der Zielgruppe, an die du dich richtest, sei es aus geschäftlichem oder leidenschaftlichem Interesse.
4. Die Ziele von Software Engineering
4.1 Die Erstellung von Qualitätssoftware
Ein zentrales Ziel des Software Engineering ist die Erstellung von Qualitätssoftware. Doch was bedeutet Qualität in diesem Kontext? Qualität umfasst verschiedene Aspekte, wie beispielsweise die Frage, ob die Software die von den Nutzern erwarteten Funktionen erfüllt. Hier spielt auch die Wirtschaftlichkeit eine Rolle: Wenn die Software die gewünschten Funktionen nicht bereitstellt, wird ein Nutzer sie wahrscheinlich nicht lange verwenden.
Wird der Zweck nicht erfüllt, so macht die Nutzung keinen Sinn und das Projekt ist damit unwirtschaftlich.
Zusätzlich sind weitere Kriterien wichtig: Ist die Software zuverlässig? Funktioniert sie effizient? Ist sie benutzerfreundlich? Lässt sie sich gut warten und pflegen, auch nach der Entwicklungsphase? All diese Punkte sind entscheidend für die Qualität einer Software. Das Ziel des Software Engineering ist es daher, Software von höchster Qualität zu entwickeln.
4.2 Fehler vermeiden
Ein weiteres Ziel des Software Engineering ist es, Fehler zu vermeiden. Das bedeutet allerdings nicht, dass man Fehler völlig ausschließen sollte. Im Gegenteil: Aus Fehlern lernt man und sie können wertvolle Erkenntnisse liefern.
Wichtig ist, Fehler nicht ständig zu wiederholen. Wenn man bereits weiß, dass etwas nicht funktioniert, ist es ineffizient, diese Erfahrung erneut zu machen. Stattdessen sollte man auch aus den Fehlern anderer lernen, um sie selbst zu vermeiden.
Software Engineering unterstützt diesen Lernprozess effektiv.
4.3 Aufwände minimieren
Darüber hinaus zielt es darauf ab, Aufwände zu minimieren. Das steht in engem Zusammenhang mit der Vermeidung von Fehlern.
4.4 Den Kundennutzen maximieren
Ein anderes wichtiges Ziel des Software Engineering ist es, den Kundennutzen zu maximieren. Dabei wird deutlich, wie wichtig es ist, den Kunden stets im Fokus zu behalten und zu überlegen: „Was möchte der Kunde oder die Kundin überhaupt?“
Es spielt keine Rolle, ob der Kunde ein Unternehmen ist, das dich beauftragt hat, eine Software zu entwickeln, eine Nutzerin einer Webanwendung, die du erstellt hast, oder ein Spieler eines Spiels, das du programmiert hast – all diese Personen fallen unter den Begriff „Kunden“.
5. Mehr als nur Programmieren
Die Vielzahl der Ziele, die im Software Engineering verfolgt werden, deutet schon darauf hin, dass dieses Feld ziemlich umfangreich ist. Bei der Erstellung von Software geht es nicht nur um das Programmieren, was viele fälschlicherweise annehmen.
Programmieren ist lediglich ein Teil des gesamten Prozesses.
Es gibt viele Aspekte, die man beim Software Engineering berücksichtigen muss und ein wesentlicher Teil davon ist das Projektmanagement. Dabei ist es entscheidend, einen klaren Plan zu haben, der festlegt, wer der Kunde ist, was wann programmiert wird und wer in einem Team für welche Aufgaben verantwortlich ist.
Besonders im Spielebereich sollte man auch die Zielgruppe genau definieren und psychologische Aspekte berücksichtigen, um sicherzustellen, dass das Spiel langfristig gespielt wird.
Ein strukturierter Plan ist unerlässlich, ebenso wie kontinuierliche Tests, um zu überprüfen, ob die bisherigen Entwicklungen funktionieren. Sobald die Software in Betrieb genommen wird, ist es wichtig, sie zu übergeben, wenn sie für einen Kunden entwickelt wurde und sie anschließend regelmäßig zu warten.
Zusammenfassend lässt sich also sagen, dass Software Engineering von enormer Bedeutung ist und ein umfangreiches Feld darstellt.
6. Warum Software Engineering auch für Anfänger wertvoll ist
Unser Ziel ist es, dir mit diesem Crashkurs einen umfassenden Überblick über das Thema zu geben und dir zu zeigen, wie man diese Konzepte in der täglichen Praxis der Softwareentwicklung anwendet.
Egal, ob es sich um große oder kleine Projekte handelt, Software Engineering ist grundsätzlich für alle Entwicklungsprozesse entscheidend. Besonders wichtig ist es, zu verstehen, dass diese Prinzipien nicht nur für erfahrene Entwickler relevant sind.
Selbst wenn du gerade erst in die Programmierung eingestiegen bist und das Gefühl hast, dass große Projekte noch in weiter Ferne liegen, möchte ich dir ans Herz legen, diese Serie durchzulesen. Sie vermittelt grundlegende Konzepte und Strukturen, die du von Anfang an richtig umsetzen kannst.
Auf diese Weise vermeidest du die Situation, in der du monatelang an etwas arbeitest, nur um später festzustellen, dass das Projekt nicht funktioniert. Genau dafür ist Software Engineering da – um dir dabei zu helfen, Projekte von Anfang an auf den richtigen Weg zu bringen.
7. Negativbeispiel aus der Praxis: Ein Fehler kostete 60 Millionen Euro
Um noch einmal zu verdeutlichen, warum dieses Thema so wichtig ist, möchte ich einen Bericht von Heise.de heranziehen. Dieser stammt zwar vom 16. Februar 2017, ist aber immer noch sehr relevant. Die Schlagzeile lautete damals: „60 Millionen Euro versenkt: Bundesagentur für Arbeit stoppt IT-Projekt ROBASO“.
In dem Artikel wird beschrieben, wie die Bundesagentur für Arbeit 14 verschiedene interne Anwendungen nutzt, damit ihre Mitarbeiter ihre täglichen Aufgaben erledigen können. Das Ziel war es, eine zentrale Softwareplattform zu entwickeln, auf der alle diese Anwendungen zusammengeführt werden, um einen einheitlichen Zugangspunkt für die Mitarbeiter zu schaffen.
Die Idee klang zunächst logisch: Man hatte einen klaren Zweck definiert und wollte eine Software entwickeln, die all diese Anforderungen erfüllt. So startete das Projekt, wenn ich mich richtig erinnere, im Jahr 2010. Über mehrere Jahre hinweg wurde daran gearbeitet, und die Software wuchs zu einem extrem komplexen System heran. Nach einigen Jahren führte man dann einen Pilottest durch – und das Ergebnis war ernüchternd: Die Software erwies sich als viel zu unflexibel für den täglichen Einsatz.
7.1 Der Grund für den Fehler
Doch was bedeutet, dass die Software „unflexibel“ war? Im Bericht gab es ein Beispiel: Wollte man etwa die Kontonummer eines Kunden ändern, war dies zwar technisch möglich, aber die Mitarbeiter mussten anschließend zahlreiche weitere Daten manuell eingeben, obwohl nur eine kleine Änderung notwendig war.
Die Software war derart komplex, dass am Ende kaum jemand damit arbeiten konnte.
Letztlich stellte man fest, dass das gesamte Projekt gescheitert war – und das zu einem Preis von 60 Millionen Euro, die somit verloren waren.
Ein Blick in den Artikel zeigt eine entscheidende Stelle, in der es heißt: „Erst bei der Pilotierung im Februar 2016 wurde festgestellt, dass es kein standardisiertes Systemgeschäft gibt und die komplexen und vielfältigen Fallgruppen der Kundenanliegen einer sehr differenzierten Arbeitspraxis bedürfen.“
Man stellte also fest, dass das Vorhaben nicht so umsetzbar war, wie ursprünglich gedacht. Obwohl man in diesem Projekt Methoden des Software Engineering angewandt hatte, wurde in einer entscheidenden Phase ein Fehler gemacht.
Man hat nicht ausreichend analysiert, ob das Konzept überhaupt realisierbar ist. Stattdessen investierte man weiter, zahlte Entwickler, Projektmanager und steckte immer mehr Geld in die Entwicklung – nur um am Ende festzustellen, dass das gesamte Budget von 60 Millionen Euro verschwendet worden war und kein brauchbares Ergebnis dabei herauskam.
8. Warum Softwareprojekte scheitern
Warum zeige ich dir dieses Beispiel? Ich möchte dir damit verdeutlichen, wie viel auf dem Spiel steht, insbesondere bei Entwicklungsprojekten dieser Größenordnung. 60 Millionen Euro klingen nach einer unglaublichen Summe – und genau das soll dir zeigen, wie gravierend Fehler im Prozess sein können. Schon kleine Versäumnisse können dazu führen, dass ein ganzes Projekt scheitert.
Interessanterweise scheitern die meisten Softwareprojekte nicht an technischen Problemen, sondern an Aspekten wie schlechtem Projektmanagement oder einer unzureichenden Auseinandersetzung mit der Zielgruppe. Dadurch wird etwas entwickelt, das am eigentlichen Bedarf vorbeigeht.
Solche Probleme treten häufiger auf, als dass technische Aspekte nicht realisierbar sind. Auch wenn Großprojekte für dich als Programmieranfänger vielleicht noch weit entfernt erscheinen, möchte ich dir damit zeigen, was passieren kann, wenn man sich nicht an grundlegende Prinzipien hält oder kleine Fehler im Prozess macht.
9. Wann Software Engineering für kleine Entwickler sinnvoll ist
Das gilt auch für kleine Entwickler. Wenn du beispielsweise nur ein Skript schreibst, das Dateinamen umbenennt, brauchst du dafür natürlich keine große Planung – das kannst du einfach und schnell umsetzen. Genauso bei kleinen Anwendungen: In manchen Fällen kannst du ohne großen Plan direkt starten.
Sobald ein Projekt allerdings etwas größer wird, wirst du rasch merken, dass es nicht sinnvoll ist, sich einfach hinzusetzen und beispielsweise in Java mit Eclipse oder IntelliJ, ohne Plan Klassen zu erstellen und drauflos zu programmieren.
Du wirst feststellen, dass dir nach ein paar Stunden immer wieder neue Dinge einfallen, die du noch berücksichtigen musst. Deshalb ist es wichtig, sich im Vorfeld wirklich Gedanken zu machen.
Software Engineering bietet hier ein strukturiertes Vorgehen, das dir Schritt für Schritt zeigt, wie du dein Projekt mit bewährten Methoden („Best Practices“) umsetzen kannst.
Deshalb ist es auch für dich als Programmiereinsteiger wichtig, diese Tutorialreihe zu lesen oder im Videoformat anzusehen. Du wirst dabei viele wertvolle Dinge lernen, die dir in deiner weiteren Entwicklung enorm helfen werden. Selbst wenn du bereits etwas Programmiererfahrung hast, aber bisher noch nicht mit Software Engineering in Berührung gekommen bist, lege ich dir diese Serie ans Herz.
Wir haben uns nun ein Beispiel angesehen, das verdeutlicht, welche Folgen kleine Fehler in einem Projekt haben können – auch in finanzieller Hinsicht.
Zum Abschluss möchte ich dir noch einen Ausblick darauf geben, was dich im weiteren Verlauf dieses Crashkurses erwartet.
10. Was wirst du in diesem Crashkurs noch lernen?
Wir werden uns unter anderem verschiedene Vorgehensmodelle ansehen. Diese Modelle zeigen unterschiedliche Ansätze, wie wir von A bis Z eine Software entwickeln können. Es gibt davon zahlreiche Varianten.
Zum Beispiel das Wasserfallmodell oder agile Methoden wie Scrum. Dabei werden wir einige dieser Vorgehensmodelle kennenlernen, damit du mit ihnen vertraut wirst und ein grundlegendes Verständnis dafür entwickelst.
Als Nächstes werden wir uns mit Diagrammen befassen, die dazu dienen, Software zu beschreiben. Wenn du einen Plan für die Entwicklung erstellst, musst du klar kommunizieren, was du bauen möchtest. Besonders in einem Team ist es wichtig, dass jeder den Plan versteht.
Es gibt eine Vielzahl von Diagrammen, die du nutzen kannst, um anderen zu verdeutlichen, was du programmieren möchtest. Wir werden verschiedene Diagramme betrachten, die jeweils für unterschiedliche Einsatzzwecke geeignet sind.
Anschließend werden wir uns mit der Implementierung beschäftigen. Ich werde dir einige Kniffe und Prinzipien vorstellen, wie du deine Programme so designen kannst, dass der Code sauber und wartbar bleibt.
Außerdem werden wir verschiedene Testarten kennenlernen, uns mit der Abnahme und Inbetriebnahme auseinandersetzen und auch über die Wartung von Software sprechen. Dabei werden wir die Gründe erörtern, warum Software regelmäßig gewartet werden muss.
Das ist natürlich nur ein kleiner Ausblick auf das, was auf dich zukommen wird. Es gibt noch viele weitere Themen, die auf uns warten.