Softwareevolution - Erhaltung und Fortschreibung bestehender Softwaresysteme

Softwareevolution bedeutet Wartung plus Weiterentwicklung eines bestehenden Systems. In den bestehenden Systemen steckt die akkumulierte Erfahrung eines Unternehmens und die Arbeit mehrerer Personen über viele Jahre.

Das Buch unterstreicht den immensen Wert bestehender Softwaresysteme und die Notwendigkeit, sie zu bewahren. Sie müssen ständig ausgebaut und regelmäßig renoviert werden. Das alles verlangt nach anderen Techniken und Methoden als bei der Entwicklung eines neuen Systems.

Die Autoren behandeln in diesem Grundlagenwerk Themen wie Wartungs- und Wiederaufbereitungsprozesse, Wiederverwendung, Softwareanalysemethoden, Reverse Engineering, Nachdokumentation und Wirtschaftlichkeitsaspekte der Softwaresystemerhaltung. Auch auf Aspekte bei agilen Entwicklungsprojekten wird eingegangen. Die Kapitel des Buches sind nach den Tätigkeiten in einem Softwareevolutionsprozess gegliedert.

Autoren: Harry M. Sneed, Richard Seidl

Verlag: dpunkt.verlag

ISBN: 978-3-86490-041-9

Edition: 1. Auflage

Erhältlich im Buchhandel und bei Amazon

Inhaltsverzeichnis

1.1 Wartung und Evolution – eine Begriffsbestimmung   1.1.1 Zum Ursprung des Begriffes »Maintenance«   1.1.2 Zum Unterschied zwischen Erhaltung und Entwicklung   1.1.3 Zum Unterschied zwischen Erhaltung und Evolution   1.1.4 Zum Unterschied zwischen Änderung und Erweiterung   1.1.5 Zum Unterschied zwischen Korrektur und Sanierung 1.2 Iterative und evolutionäre Softwareentwicklung 1.3 Softwareevolution und agile Softwareentwicklung 1.4 Wartung und Evolution in einer serviceorientierten IT-Welt 1.5 Struktur und Inhalt der folgenden Kapitel

2.1 Zur Werterhaltung von Softwarekapitalgütern 2.2 Software als verpacktes Wissen 2.3 Wertgetriebene Softwareevolution 2.4 Einflüsse auf die Evolutionskosten   2.4.1 Der Einfluss der Größe auf die Softwareerhaltung   2.4.2 Der Einfluss der Komplexität auf die Softwareerhaltung   2.4.3 Der Einfluss der Qualität auf die Softwareerhaltung 2.5 Schätzung der Evolutionskosten 2.6 Ermittlung vom Evolutionsnutzen   2.6.1 Zum Nutzen der korrektiven Aufträge   2.6.2 Zum Nutzen der adaptiven Aufträge   2.6.3 Zum Nutzen der perfektiven Aufträge   2.6.4 Zum Nutzen der enhansiven Aufträge 2.7 Beispiel einer Kosten-Nutzen-Rechnung   2.7.1 Kalkulation des ROI für ein betriebliches Informationssystem   2.7.2 Kalkulation des ROI für ein Testwerkzeug 2.8 Schlussfolgerungen aus der Wirtschaftlichkeitsbetrachtung

3.1 Die Pionierleistung von Lehman und Belady 3.2 Lehmans Kategorisierung der Softwaresystemtypen   3.2.1 S-Systeme   3.2.2 P-Systeme   3.2.3 E-Systeme 3.3 Die fünf Gesetze der Evolution   3.3.1 Gesetz der fortdauernden Änderung   3.3.2 Gesetz der zunehmenden Komplexität   3.3.3 Gesetz der abnehmenden Qualität   3.3.4 Gesetz der sinkenden Produktivität   3.3.5 Gesetz des begrenzten Wachstums 3.4 Zur Gültigkeit der Evolutionsgesetze 3.5 Konsequenzen aus den Gesetzen der Softwareevolution   3.5.1 Releasegrößen müssen begrenzt werden   3.5.2 Die Dokumentation muss mit jedem Release aktualisiert werden   3.5.3 Der Code muss in regelmäßigen Abständen saniert werden   3.5.4 Die Qualität der Software soll laufend überwacht werden   3.5.5 Die Evolution des Systems muss geplant werden 3.6 Warum Software doch noch stirbt   3.6.1 Veralterung der Implementierungstechnologie   3.6.2 Ungeeignete fachliche Lösung   3.6.3 Abhängigkeit von Schlüsselpersonen

4.1 Der Softwareevolutionsprozess aus historischer Perspektive 4.2 Das Releasekonzept 4.3 Systemanalyse 4.4 Releaseplanung 4.5 Fortschreibung des Systems   4.5.1 Korrekturaufgaben   4.5.2 Änderungsaufgaben   4.5.3 Weiterentwicklungsaufgaben   4.5.4 Integrationsaufgaben   4.5.5 Sanierungsaufgaben   4.5.6 Optimierungsaufgaben 4.6 Systemregressionstest   4.6.1 Regressionstestplanung   4.6.2 Regressionstestspezifizierung   4.6.3 Regressionstestaufbau   4.6.4 Regressionstestausführung   4.6.5 Regressionstestvalidierung   4.6.6 Regressionstestevaluierung 4.7 Systemdokumentation 4.8 Systemauslieferung

5.1 Gegenstände der Systemanalyse 5.2 Methoden der Systemanalyse   5.2.1 Softwareregelprüfung   5.2.2 Vermessung der Software   5.2.3 Nachdokumentation der Software   5.2.4 Impact-Analyse 5.3 Ergebnisse der Ist-Systemanalyse   5.3.1 Prüfberichte   5.3.2 Metrikberichte   5.3.3 Liste der zu ändernden Bausteine   5.3.4 Größenmaße des Auswirkungsbereiches 5.4 Systemanalyse ist nicht gleich Systemanalyse

6.1 Die Notwendigkeit einer Evolutionsstatistik   6.1.1 Statistik aus der Produktanalyse   6.1.2 Statistik aus der Prozessanalyse 6.2 Die Schätzung eines neuen Release   6.2.1 Messung der gegenwärtigen Systemgröße   6.2.2 Hochrechnung der Systempflegekosten   6.2.3 Schätzung der Weiterentwicklungskosten   6.2.4 Kalkulation der Gesamtkosten des nächsten Release 6.3 Die Identifikation und Zuweisung der Evolutionsaufgaben   6.3.1 Evolutionsaufgaben   6.3.2 Zuweisung der Evolutionsaufgaben   6.3.3 Terminierung der Evolutionsaufgaben   6.3.4 Management by Contract 6.4 Werkzeuge für die Releaseplanung

7.1 Die Fehlermeldung 7.2 Die Fehleranalyse 7.3 Fehlerursachenforschung 7.4 Fehlerbeseitigung 7.5 Fehlerkorrekturtest 7.6 Fehlerkorrekturdokumentation 7.7 Fehlerstatistik

8.1 Der Änderungsprozess 8.2 Der Änderungsantrag 8.3 Änderungsanalyse 8.4 Lokalisierung der zu ändernden Stellen   8.4.1 Analyse der Textdokumente   8.4.2 Analyse der Entwurfsdokumente   8.4.3 Analyse des Codes   8.4.4 Analyse der Datenstrukturen   8.4.5 Analyse der Testfälle 8.5 Änderungsfolge 8.6 Änderungsabschottung 8.7 Änderungsdurchführung 8.8 Änderungsvalidation   8.8.1 Aufbau der Integrationstestumgebung   8.8.2 Generierung der Integrationstestdaten   8.8.3 Instrumentierung des geänderten Codes   8.8.4 Ausführung des Integrationstests   8.8.5 Auswertung der Testergebnisse 8.9 Änderungsdokumentation

9.1 Messung als Voraussetzung der Sanierung 9.2 Sanierungsziele 9.3 Sanierungsverfahren   9.3.1 Einfrierungsstrategie   9.3.2 Gelegenheitsstrategie 9.4 Sanierungsmaßnahmen   9.4.1 Assembler-Sprachen   9.4.2 Prozedurale Sprachen     9.4.2.1 Reformatierung des Codes     9.4.2.2 Bereinigung des Codes     9.4.2.3 Umbenennung nicht sprechender Datennamen     9.4.2.4 Beseitigung inkompatibler Datentypen     9.4.2.5 Entfernung festverdrahteter Daten     9.4.2.6 Auslagerung der IO-Schnittstellen     9.4.2.7 Restrukturierung der Ablauflogik     9.4.2.8 Verflachung der Ablaufstruktur     9.4.2.9 Zerlegung des Codes in kleinere Bausteine   9.4.3 Objektorientierte Sprachen     9.4.3.1 Verflachung der Methodenlogik     9.4.3.2 Verflachung der Klassenhierarchie     9.4.3.3 Eliminierung redundanter Methoden     9.4.3.4 Ablösung komplexer Auswahlstrukturen     9.4.3.5 Verlagerung gemeinsamer Methoden und Attribute     9.4.3.6 Spaltung zu groß gewordener Klassen     9.4.3.7 Vereinfachung der Schnittstellen     9.4.3.8 Entfernung festverdrahteter Daten     9.4.3.9 Entfernung des toten Codes     9.4.3.10 Umbenennung der Bezeichner     9.4.3.11 Ergänzung der Kommentierung     9.4.3.12 Vereinheitlichung des Codeformats   9.4.4 Skriptsprachen 9.5 Sanierungsrevision

10.1 Beauftragung einer Systemerweiterung   10.1.1 Anforderungsgetriebene Evolution   10.1.2 Modellgetriebene Evolution   10.1.3 Change-Request-getriebene Evolution 10.2 Analyse eines Erweiterungsantrages   10.2.1 Bestätigung des angegebenen Nutzens   10.2.2 Analyse der Funktionsspezifikation   10.2.3 Auswirkungsanalyse der beantragten Erweiterung 10.3 Aufwandsschätzung einer Erweiterung   10.3.1 Aufwandsschätzung in der anforderungsgetriebenen Evolution   10.3.2 Aufwandsschätzung in der modellgetriebenen Evolution   10.3.3 Aufwandsschätzung in der CR-getriebenen Evolution 10.4 Genehmigung einer Erweiterung 10.5 Aufstellung des Erweiterungsprojekts 10.6 Spezifikation der Erweiterung 10.7 Durchführung der Erweiterung 10.8 Test der Erweiterung 10.9 Dokumentation der Erweiterung

11.1 Die Problematik der Testfallselektion 11.2 Notwendigkeit eines unabhängigen Testteams 11.3 Regressionstestwerkzeuge   11.3.1 Werkzeuge für die statische Analyse     11.3.1.1 Werkzeuge zur Prüfung der Anforderungsspezifikation     11.3.1.2 Werkzeuge zur Prüfung des Codes und des Entwurfsmodells     11.3.1.3 Werkzeuge zur Prüfung der Testdokumentation   11.3.2 Werkzeuge für die Verwaltung und Fortschreibung der Testfälle   11.3.3 Werkzeuge für die Testfallauswahl   11.3.4 Werkzeuge für die Testdatengenerierung   11.3.5 Werkzeuge für die Regressionstestausführung   11.3.6 Werkzeuge für die Verfolgung der Testabläufe   11.3.7 Werkzeuge für die Vermessung der Testüberdeckung   11.3.8 Werkzeuge für den Abgleich der Testergebnisse   11.3.9 Werkzeuge für die Fehlermeldung und Fehlerverfolgung 11.4 Regressionstestverfahren   11.4.1 Regressionstestplanung   11.4.2 Regressionstestvorbereitung   11.4.3 Regressionstestausführung   11.4.4 Regressionstestauswertung 11.5 Regressionstestergebnisse

12.1 Die Rechtfertigung der Systemdokumentation 12.2 Automatisierte Nachdokumentation   12.2.1 Analyse der Anforderungsdokumente   12.2.2 Analyse des Entwurfsmodells   12.2.3 Analyse des Codes     12.2.3.1 Prozedurale Sprachen     12.2.3.2 Objektorientierte Sprachen     12.2.3.3 Gemeinsame Strukturen aller Sprachen 12.3 Multiple Sichten auf ein Softwaresystem   12.3.1 Statische Sichten auf die Programmlogik   12.3.2 Visualisierungstechniken     12.3.2.1 Baumdiagramme     12.3.2.2 Netzdiagramme     12.3.2.3 Sequenzdiagramme     12.3.2.4 Ablaufdiagramme     12.3.2.5 Entity/Relationship Diagramme   12.3.3 Grenzen der grafischen Darstellung   12.3.4 Texte vs. Diagramme 12.4 Aufbau und Nutzung eines System-Repository   12.4.1 Aufbau eines Repository   12.4.2 Besichtigung der Repository-Inhalte   12.4.3 Abfragen der Repository-Inhalte   12.4.4 Generierung von Dokumenten 12.5 Fortschreibung der Dokumentation   12.5.1 Abgestimmte Evolution aller Softwareschichten   12.5.2 Software = Code + Dokumentation + Test

Autor

Datum

ISBN

Auflage