Softwareevolution 

 25. September 2013

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

Inhaltsverzeichnis

1 Einführung in die Softwareevolution

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 Wirtschaftlichkeit der Softwareevolution

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 Die Gesetze der Softwareevolution

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 Der Evolutionsprozess

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 Softwaresystemanalyse

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 Softwareevolutionsplanung

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 Fehlerbehebungen

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

8 Änderungen

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 Sanierung

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 Softwareweiterentwicklung

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 Systemregressionstest

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 Fortlaufende Dokumentation

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