Richard Seidl Logo

Softwareevolution - Erhaltung und Fortschreibung bestehender Softwaresysteme

Softwareevolution - Erhaltung und Fortschreibung bestehender Softwaresysteme
September 2013
dpunkt.verlag

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