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