Skip to main content
main-content

Über dieses Buch

Das Buch führt in die Grundlagen der Softwaretechnik ein. Dabei liegt sein Fokus auf der systematischen und modellbasierten Software- und Systementwicklung aber auch auf dem Einsatz agiler Methoden. Die Autoren legen besonderen Wert auf die gleichwertige Behandlung praktischer Aspekte und zugrundeliegender Theorien, was das Buch als Fach- und Lehrbuch gleichermaßen geeignet macht. Die Softwaretechnik wird im Rahmen eines systematischen Frameworks umfassend beschrieben. Ausgewählte und aufeinander abgestimmte Konzepte und Methoden werden durchgängig und integriert dargestellt.

Die Autoren
Prof. Dr. Dr. h.c. Manfred Broy war Inhaber des Lehrstuhls für Software & Systems Engineering an der Technischen Universität München. Seine Schwerpunkte in Forschung und Lehre waren und sind die Entwicklung sicherheitskritischer eingebetteter Systeme, mobile und kontextadaptive Softwaresysteme, und Entwicklungsmethoden für leistungsfähige, industriell einsetzbare Softwaresysteme. In zahlreichen Industriekooperationen konnte die Arbeiten des Lehrstuhls angewendet und evaluiert werden. Für seine Arbeit wurde Manfred Broy vielfach ausgezeichnet.
Prof. Dr. Marco Kuhrmann vertritt den Lehrstuhl Software Engineering I an der Universität Passau. Seine Schwerpunkte in Forschung und Lehre sind die Methodik des Software Engineering mit dem Fokus auf agile/hybride Software- und Produktentwicklung sowie das Prozess- und Qualitätsmanagement. Er ist einer der Entwickler des V-Modell® XT, dessen Anpassung und Einführung in Organisationen und Projekten er bereits vielfach begleitet hat.

Inhaltsverzeichnis

Frontmatter

Grundlagen und Begriffsbildung

Frontmatter

Kapitel 1. Grundlagen

Zusammenfassung
Software Engineering ist in wenigen Jahren von einer Nischendisziplin zu einer dominanten Technologie geworden. Software Engineering ist die beherrschende Disziplin bei der Entwicklung digitaler Systeme. Sie umfasst die technische Realisierung (Implementierung) von Software durch Programmierung ebenso wie Fragen, in welchen Bereichen Software gewinnbringend eingesetzt werden kann und wie Software gestaltet werden muss, damit Nutzerbedürfnisse optimal adressiert werden. Software ist in vielen Anwendungsgebieten entscheidender Innovationstreiber. Darüber hinaus sind Fragen der Qualität von Software von großer Bedeutung. Software wird über lange Zeiträume eingesetzt und muss beständig verbessert und an sich ändernde Rahmenbedingungen angepasst werden. Insbesondere in kritischen Anwendungen muss Software präzise und korrekt funktionieren. Softwaresysteme sind ständiger Begleiter für die Menschen unserer Zeit bei ihren vielfältigen Tätigkeiten und Aufgaben im Alltagsleben sowohl im Büro wie ihrer Freizeit. Zu Recht wird erwartet, dass Software mühelos nutzbar ist, genau die in sie gesetzten Erwartungen erfüllt und die Softwaresysteme einander flexibel ergänzen. Dies zeigt bereits die vielfältigen Anforderungen an die Entwicklung von Softwaresystemen. Software Engineering ist nach wie vor eine große Herausforderung, die nur durch genaue Beherrschung dieser Disziplin gemeistert werden kann. Gleichzeitig ist Software ein dominanter Wirtschaftsfaktor, da leistungsstarke Softwaresysteme die Grundlage global agierender Unternehmen sind. Software Engineering ist die bestimmende Disziplin des 21. Jahrhunderts.
Manfred Broy, Marco Kuhrmann

Kapitel 2. Eigenschaften und Strukturen von Softwaresystemen

Zusammenfassung
Technisch gesehen sind Softwaresysteme große Ansammlungen von Programmcode und Daten, die auf verfügbaren Rechenanlagen zur Ausführung gebracht werden können. In dieser technischen Sichtweise und Darstellung sind Softwaresysteme für Menschen kaum verständlich, da sie für die Ausführung auf Maschinen gemacht sind. Für das Verständnis eines Softwaresystems sind deshalb strukturierte Sichten notwendig, die beschreiben, welche Aufgaben sich durch ein Softwaresystem erledigen lassen, welche Funktionalität ein Softwaresystem in welcher Form zur Verfügung stellt und welche besonderen Qualitätseigenschaften es aufweist. Letzteres hat mit der Frage zu tun, wie zuverlässig ein Softwaresystem ist, wie korrekt es seine Funktionen ausführt, wie intuitiv es nutzbar ist und wie einfach es zu betreiben ist. Werden Softwaresysteme in kritischen Anwendungen eingesetzt, muss ihr fehlerfreies Funktionieren gewährleistet sein, ohne dass Gefahren für Menschen auftreten. Dies alles macht deutlich, dass eine Vielzahl unterschiedlicher Eigenschaften und Qualitätsmerkmale von Softwaresystemen von Interesse sind und das spezielle Strukturen und Modelle benötigt werden, um diese Eigenschaften angemessen zu beschreiben. Dieses Kapitel widmet sich daher der Charakterisierung von Softwaresystemen anhand von Qualitätseigenschaften und der Einführung von Metriken zur Messung der Qualitätseigenschaften.
Manfred Broy, Marco Kuhrmann

Kapitel 3. Vorgehensmodelle in der Softwareentwicklung

Zusammenfassung
Die Entwicklung von Software erfolgt im Rahmen von Projekten. Projekte benötigten eine angemessene Vorgehensweise. Wir sprechen von Vorgehensmodellen. Diese beschreiben die Aufbauorganisation sowie die Ablauforganisation eines Projektes. In der Aufbauorganisation wird die Teamstruktur festgelegt und in der Ablauforganisation der Prozess für die einzelnen Schritte zur Durchführung der Entwicklung. Darüber hinaus sind geeignete Methoden für die Durchführung der geplanten Arbeitsschritte und zur Erarbeitung der Zwischenergebnisse, den Artefakten, zu wählen. Der Zusammenhang zwischen den Artefakten wird in einem sogenannten Artefaktmodell festgelegt. Wesentliche Artefakte sind der Programmcode für das Softwaresystem, aber auch die Beschreibung der Anforderungen an das Softwaresystem, seine Architektur, seiner Qualitätseigenschaften oder der zu verwendenden Testfälle. Die Wahl des Vorgehensmodells bestimmt in weiten Teilen wesentliche Faktoren der Softwareentwicklung wie die Kosten, den Zeitaufwand und die erreichte Qualität. Vorgehensmodelle sind ein wesentliches Bindeglied zwischen Fragen der Organisation und des Managements und der technischen Durchführung von Softwareprojekten. Dieses Kapitel führt die grundlegenden Vorgehensmodelle und Rollen in Projekten ein und erläutert traditionelle und agile Vorgehensmodelle im Kontext der Softwareentwicklung.
Manfred Broy, Marco Kuhrmann

Kapitel 4. Modelle in der Softwareentwicklung und ihre Beschreibung

Zusammenfassung
In den im Laufe der Entwicklung von Softwaresystemen zu erstellenden Artefakten sind sehr unterschiedliche Zusammenhänge von oft hoher Komplexität zu erfassen. Dies umfasst die Beschreibung des Verhaltens eines Softwaresystems oder seiner Bestandteile und die Beschreibung von Daten, Prozessen, Zuständen oder Strukturen. Für die angemessene Beschreibung dieser unterschiedlichen Aspekte bieten sich in vielen Fällen Modelle an. Genauer gesagt bestehen die Inhalte von Artefakten häufig aus der Darstellung geeigneter Modelle für die zu beschreibenden Zusammenhänge. Modelle können dabei in sehr unterschiedlicher Form auftreten, angefangen von Gedankenmodellen, über grafisch dargestellte Modelle bis hin zu formalen Modellen. Gut gewählte Modelle bieten einen angemessenen Abstraktionsgrad, erlauben es, sich auf wesentliche Aspekte zu konzentrieren und erhöhen das Verständnis. Vor diesem Hintergrund sind für das Software Engineering eine Reihe von Modellkonzepten entwickelt worden, die sich für bestimmte Aspekte der Softwareentwicklung als besonders geeignet erwiesen haben. Dieses Kapitel führt in die Grundlagen der Modellierung im Kontext der Software- und Systementwicklung ein. Dazu werden ausgewählte Modellierungsansätze eingeführt, welche ein breites Spektrum von Einsatzmöglichkeiten – von der eher informalen Kommunikation bis hin zur mathematischen Modellierung – abdecken.
Manfred Broy, Marco Kuhrmann

Anforderungsanalyse

Frontmatter

Kapitel 5. Anforderungsanalyse und Anforderungsmanagement

Zusammenfassung
Was ist das Ziel eines Softwareentwicklungsprojekts? Welche Eigenschaften soll das zu entwickelnde Softwaresystem haben? Welche Aufgaben soll es unterstützen? Welche Funktionalität soll es in welcher Form anbieten? Welche Qualitätseigenschaften soll das Softwaresystem haben? – Dies sind die zentralen Fragen bei der Entwicklung von Software, deren Bedeutung erstaunlicherweise oft unterschätzt wird. Verantwortliche vertreten zu Beginn eines Projektes zu oft die Auffassung, dass diese Fragen offensichtliche Antworten hätten – eine meist gefährliche Fehleinschätzung. Meist stellt sich erst bei näherer Betrachtung heraus, welche Anforderungen für die Software tatsächlich angemessen sind. Schwierig ist dabei die Balance aus Kosten und Nutzen. Insbesondere, wenn Software zusätzlich Innovationen erlaubt, ergeben sich häufig neue Möglichkeiten zur Lösung einer Aufgabe, die alles andere als offensichtlich sind und erst bei sorgfältiger Betrachtung entdeckt werden können. Dieses Kapitel führt die grundlegenden Begriffe und Konzepte der Anforderungsanalyse ein. Dies umfasst insbesondere die zentrale Rolle der Nutzer, das grundsätzliche Vorgehen in der Anforderungsanalyse, die Kernartefakte zur Dokumentation der Anforderungen und die wesentlichen Aufgaben im Management der Anforderungen.
Manfred Broy, Marco Kuhrmann

Kapitel 6. Produkt- und Qualitätsanforderungen

Zusammenfassung
Zentral in der Anforderungsanalyse ist die Frage: Welchen Wert schafft die zu entwickelnde Software für den Auftraggeber? Das zielt primär auf die zu schaffende Funktionalität. Liegt der Funktionsumfang fest, muss die geforderte Funktionalität im Detail beschrieben werden. Dabei stößt man in der Regel immer wieder auf Einzelfragen, wie ein System in einer bestimmten Situation zu (re)agieren hat, wie eine Funktion im Einzelnen zu spezifizieren ist und auf welche konkrete Weise die Interaktion zwischen einem Nutzer und dem System zu erfolgen hat. Dies alles bestimmt die Bereitschaft zur Nutzung einer Software und ihre Attraktivität für den Nutzer und damit letztlich ihren Wert. Bei der Analyse und Dokumentation der Anforderungen können wir zwei große Teilgebiete unterscheiden. Zum einen sind das die Produktanforderungen, die sich auf Fragen der funktionalen Nutzung eines Systems beziehen. Dabei wird festgelegt, welche Funktionalität das System oder das Produkt in welcher Form anbietet. Zum anderen sind das Qualitätsanforderungen, die eine Reihe von unterschiedlichen Qualitätseigenschaften eines Systems betreffen, sich also mit der Fragestellung befassen, in welcher Qualität das System umgesetzt wird und seine Funktionalität erbringt. Die beiden Felder sind sehr unterschiedlicher Natur und erfordern deshalb unterschiedliche Vorgehensweisen, Methoden und Modelle, welche in diesem Kapitel vorgestellt werden.
Manfred Broy, Marco Kuhrmann

Kapitel 7. Vorgehen in der Anforderungserhebung

Zusammenfassung
Bei der Erhebung von Anforderungen ist es erforderlich, ausgehend von den Zielen einer Softwareentwicklung die wesentlichen Bedürfnisse der Nutzer im Hinblick auf die Aufgaben, die mit dem Softwaresystem zu erledigen sind, zu verstehen und festzulegen. Daraus ist ein Konzept zu entwickeln wie das Softwaresystem grundsätzlich diese Aufgaben zu bewältigen hat, um dann die einzelnen Funktionen und Qualitätseigenschaften im Detail festzulegen. Für die vielfältigen, unterschiedlichen Aufgaben eines Softwaresystems gibt es eine Reihe spezifischer Methoden und Vorgehensweisen, die dabei helfen, die einzelnen Aufgaben effektiv zu erfassen und zu beschreiben. Insbesondere sind erfasste Anforderungen zusammen mit den Stakeholdern sorgfältig zu analysieren, zu hinterfragen und zu validieren, um sicher zu sein, dass die erfassten Anforderungen auch die tatsächlichen Bedürfnisse widerspiegeln und diese in angemessener Form beschreiben. Dieses Kapitel führt ausgewählte Techniken und Methoden der Anforderungsanalyse ein. Ein allgemeiner Prozess zur Anforderungserhebung bildet dafür den Rahmen. Mit der Beschreibung von Ansätzen wie dem Design Thinking oder dem Feature-Driven Development werden auch die Verknüpfungen zu den anderen Aufgaben der Softwareentwicklung hergestellt.
Manfred Broy, Marco Kuhrmann

Systementwurf und Architekturspezifikation

Frontmatter

Kapitel 8. Grundlagen und Prinzipien des Architekturentwurfs

Zusammenfassung
Softwaresysteme können enorme Umfänge annehmen, weshalb es unabdingbar ist, sie angemessen zu strukturieren. Dies erfolgt durch die Gliederung in Teilsysteme und die Beschreibung des Zusammenwirkens der Teilsysteme. Schnittstellen kapseln die Teilsysteme. Über die Schnittstellen wird festgelegt, welche Einwirkungsmöglichkeiten es von außen auf ein Teilsystem gibt und welche Dienste ein Teilsystem nach außen anbietet. Die Schnittstellenspezifikation entspricht einem Vertrag, der Entwickler und Nutzer verbindet, der Systemstrukturen festlegt und die arbeitsteilige Entwicklung einer Software unterstützt. Für eine ganze Reihe von Qualitätsfragen eines Softwaresystems ist die angemessene Strukturierung von entscheidender Bedeutung. Dies gilt auch für die Realisierung der Software auf eine Hardwareplattform, einer Ausführungsumgebung, bei der in aller Regel die unterschiedlichen Teilsysteme gegebenenfalls auf unterschiedliche Rechner abgebildet und dort zur Ausführung gebracht werden. Dieses Kapitel führt die Grundlagen des Architekturentwurfs ein. Zentral sind hier die Architekturprinzipien sowie die Ansätze zur Strukturierung von softwareintensiven Systemen.
Manfred Broy, Marco Kuhrmann

Kapitel 9. Architekturentwurf und Architekturmodellierung

Zusammenfassung
Der Entwurf einer Architektur erfolgt im Rahmen eines Architekturentwicklungsprozesses. Hier wird definiert, in welche Teilsysteme ein System untergliedert wird und wie die Teilsysteme (Komponenten) dargestellt und modelliert werden. Insbesondere wird in der Gliederung festgelegt, wie die Schnittstellen einschließlich des Schnittstellenverhaltens festgelegt sind und wie die Systeme über die Schnittstellen zusammenwirken, um das Gesamtsystem zu realisieren. Dies erfordert die Spezifikation eines Datenmodells, welches die ausgetauschten Daten zwischen den Komponenten beschreibt, und gegebenenfalls auch, welche Systemzustände die Komponenten einnehmen. Generell unterscheiden wir zwischen einem Grobentwurf, durch den ein umfangreiches Softwaresystem in eine Anzahl von Softwareteilsystemen unterteilt wird, und dem Feinentwurf, der die Softwareteilsysteme in Programme umsetzt und diese durch eine Softwarearchitektur strukturiert. Für beide Entwürfe gibt es eine Reihe von bewährten Prinzipien und Vorgehensweisen, die nach Möglichkeiten einzusetzen sind, um Architekturen hoher Qualität zu entwickeln. Diese Vorgehensweisen sowie die Entwurfsstrategien werden in diesem Kapitel vorgestellt. Neben dem Entwurf der Architektur widmet sich dieses Kapitel auch der Dokumentation und der Qualitätssicherung der Architektur eines Softwaresystems.
Manfred Broy, Marco Kuhrmann

Kapitel 10. Nutzung bewährten Architekturwissens

Zusammenfassung
Architekturen dienen entscheidend der Strukturierung von Softwaresystemen. Ist diese Strukturierung gut gewählt, entstehen in sich geschlossene Teilsysteme, die separat zu verstehen und zu realisieren sind. Ein so strukturiertes Softwaresystem ist auch leichter zu ändern und zu warten, da in der Regel die Änderungen nur bestimmte Teilsysteme betreffen. Dann kann über die Grenzen eines Teilsystems anhand der Spezifikation der Schnittstellen festgestellt werden, welche Änderungen sich auswirken. Ein weiterer Aspekt der Teilsysteme besteht darin, dass diese unter Umständen mehrfach, sowohl im gleichen wie auch in anderen Projekten, eingesetzt werden können. Man spricht von Wiederverwendung. Eine gut gewählte Architektur erlaubt es, vorhandene Teilsysteme in Neuentwicklungen einzubinden, aber auch Teilsysteme zu entwickeln, die in anderen Projekten sinnvoll verwendet werden können. Eine besondere Rolle spielen dabei sogenannte Muster, die bestimmte bewährte Formen von Teillösungen der Strukturierung von Architekturen beschreiben, sodass sie im Rahmen des Architekturentwurfs gezielt eingesetzt werden können. Dieses Kapitel stellt die unterschiedlichen Möglichkeiten der Wiederverwendung von bewährtem Architekturwissen dar. Zentral sind hierbei Klassenbibliotheken, Entwurfs- und Architekturmuster, sowie pragmatische Entwurfsregeln für Softwaresysteme.
Manfred Broy, Marco Kuhrmann

Implementierung, Integration und Qualitätssicherung von Software

Frontmatter

Kapitel 11. Implementierung von Softwaresystemen

Zusammenfassung
Eine der Kernaufgaben in der Entwicklung von Software ist die Implementierung des Softwaresystems mit Hilfe einer oder mehrerer passend gewählter Programmiersprachen. Dadurch wird ein ablauffähiges Programmsystem geschaffen. Abhängig vom gewählten Vorgehensmodell wird mit der Implementierung vergleichsweise früh begonnen, etwa bei Scrum, oder nach Abschluss der wesentlichen Entwurfsarbeiten, etwa bei der Nutzung des V-Modells. Folgt die Entwicklung einem modellbasierten Ansatz, kann ablauffähiger Programmcode auch aus Modellen generiert werden. Insbesondere bei manuell entwickeltem Code ist es entscheidend, den Code lesbar zu halten und angemessen zu dokumentieren und dabei gute, „sprechende“ sowie systematisch aufgebaute Identifikatoren zu wählen und eine Reihe methodischer Vorgaben einzuhalten, sodass gut strukturierter, leicht verifizierbarer, verständlicher Code entsteht. In diesem Kapitel werden die wesentlichen Aufgaben bei der Implementierung von Software beschrieben. Dies umfasst auch die Richtlinien und Empfehlungen zur Erstellung hochqualitativen Programmcodes und seiner Organisation und Verwaltung in Versionskontrollsystemen. Ferner gewährt dieses Kapitel einen Einblick in die Schritte und Aufgaben in der modellbasierten Softwareentwicklung.
Manfred Broy, Marco Kuhrmann

Kapitel 12. Verifikation und Integration von Software

Zusammenfassung
Liegen Teile der Software implementiert vor, kann damit begonnen werden, die Software zu verifizieren und die Teile zu integrieren. Typischerweise werden einzelne Teile zunächst für sich getestet und dann, soweit sie vorgegebenen Qualitätsanforderungen genügen, mit anderen Teilen zusammengefügt. Abhängig von der Vorgehensweise kann wieder sehr früh damit begonnen werden, Programmcode Schritt für Schritt aufzubauen und zu vervollständigen. Liegen einzelne Funktionen implementiert vor, werden diese unmittelbar getestet. Im Optimum heißt das, dass nach jedem Schritt ein ablauffähiges System vorliegt, wobei Implementierung, Test und Integration Hand in Hand gehen. Es ist aber auch möglich, einzelne Module oder Klassen zunächst individuell zu testen, dann zu größeren Softwareeinheiten zu integrieren, wobei der Zusammenbau in sogenannten Integrationstests auf Fehler überprüft wird, um schließlich die einzelnen Teile zu einem Gesamtsystem zu integrieren und dieses zu testen. Dieses Kapitel führt in die Grundlagen des Testens von Software ein. Dies umfasst die wesentlichen Konzepte und Vorgehensweisen im manuellen und automatisierten Softwaretest. Kaum zu trennen von den Testaufgaben ist die Integration. Die Strategien für die Software- und Systemintegration bilden den zweiten Teil dieses Kapitels, welches mit einem Überblick über Methoden und Techniken der kontinuierlichen Integration und DevOps abgeschlossen wird.
Manfred Broy, Marco Kuhrmann

Kapitel 13. Softwareevolution

Zusammenfassung
In den zurückliegenden Kapiteln haben wir die Software- und Systementwicklung so beschrieben, als würden wir auf der grünen Wiese starten und ein neues Softwaresystem von Grund auf entwickeln. Dadurch konnten wir die einzelnen Aufgaben der Softwareentwicklung gut abgegrenzt darstellen. Eine völlige Neuentwicklung ist aber in der Praxis eher die Ausnahme. Meist besteht die Softwareentwicklung darin, ein existierendes System auf einen neuen Stand zu bringen und es weiterzuentwickeln oder existierende Systemteile zu integrieren. Wir sprechen bei der Gesamtheit der Entwicklungsaufgaben für ein Softwaresystem, angefangen von der Neuentwicklung bis hin zu seiner Modifikation und Weiterentwicklung von Softwareevolution. Typischerweise werden Softwaresysteme, nachdem sie einen geeigneten Entwicklungsstand haben, in Betrieb genommen und im Laufe des Betriebes gewartet und weiterentwickelt. Die Wartung behandelt alle notwendigen Änderungen, die an einem System zur Fehlerbehebung vorgenommen werden, um es an neue Erfordernisse anzupassen und es gegebenenfalls besser zu strukturieren, sodass die Weiterentwicklung einfacher durchzuführen ist. In diesem Kapitel werden zunächst die Transition in die Einsatzumgebung und folgend die Aufgaben der Softwarewartung beschrieben. Ausgewählte Methoden und Techniken, die in der Neuentwicklung aber insbesondere auch in der Wartung eingesetzt werden können, ergänzen die Konzepte und Aufgabenbeschreibungen.
Manfred Broy, Marco Kuhrmann

Backmatter

Weitere Informationen

Premium Partner