O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Softwareevolution

Book Description

  • Erfahrung von Harry M. Sneed aus den letzten 20 Jahren Software Maintenance fließt ein- hoher Praxisbezug- State-of-the-Art: Auch SOA-Landschaften und agile Softwareentwicklung werden betrachtet - Bekanntheitsgrad des Autors, der erstmalig 2011 den "Deutschen Preis für Software-Qualität "als einer der Pioniere der deutschen IT-Szene erhielt.

Table of Contents

  1. Cover
  2. Titel
  3. Impressum
  4. Vorwort
  5. Inhaltsübersicht
    1. Inhaltsverzeichnis
  6. 1 Einführung in die Softwareevolution
    1. 1.1 Wartung und Evolution – eine Begriffsbestimmung
      1. 1.1.1 Zum Ursprung des Begriffes »Maintenance«
      2. 1.1.2 Zum Unterschied zwischen Erhaltung und Entwicklung
      3. 1.1.3 Zum Unterschied zwischen Erhaltung und Evolution
      4. 1.1.4 Zum Unterschied zwischen Änderung und Erweiterung
      5. 1.1.5 Zum Unterschied zwischen Korrektur und Sanierung
    2. 1.2 Iterative und evolutionäre Softwareentwicklung
    3. 1.3 Softwareevolution und agile Softwareentwicklung
    4. 1.4 Wartung und Evolution in einer serviceorientierten IT-Welt
    5. 1.5 Struktur und Inhalt der folgenden Kapitel
  7. 2 Wirtschaftlichkeit der Softwareevolution
    1. 2.1 Zur Werterhaltung von Softwarekapitalgütern
    2. 2.2 Software als verpacktes Wissen
    3. 2.3 Wertgetriebene Softwareevolution
    4. 2.4 Einflüsse auf die Evolutionskosten
      1. 2.4.1 Der Einfluss der Größe auf die Softwareerhaltung
      2. 2.4.2 Der Einfluss der Komplexität auf die Softwareerhaltung
      3. 2.4.3 Der Einfluss der Qualität auf die Softwareerhaltung
    5. 2.5 Schätzung der Evolutionskosten
    6. 2.6 Ermittlung vom Evolutionsnutzen
      1. 2.6.1 Zum Nutzen der korrektiven Aufträge
      2. 2.6.2 Zum Nutzen der adaptiven Aufträge
      3. 2.6.3 Zum Nutzen der perfektiven Aufträge
      4. 2.6.4 Zum Nutzen der enhansiven Aufträge
    7. 2.7 Beispiel einer Kosten-Nutzen-Rechnung
      1. 2.7.1 Kalkulation des ROI für ein betriebliches Informationssystem
      2. 2.7.2 Kalkulation des ROI für ein Testwerkzeug
    8. 2.8 Schlussfolgerungen aus der Wirtschaftlichkeitsbetrachtung
  8. 3 Die Gesetze der Softwareevolution
    1. 3.1 Die Pionierleistung von Lehman und Belady
    2. 3.2 Lehmans Kategorisierung der Softwaresystemtypen
      1. 3.2.1 S-Systeme
      2. 3.2.2 P-Systeme
      3. 3.2.3 E-Systeme
    3. 3.3 Die fünf Gesetze der Evolution
      1. 3.3.1 Gesetz der fortdauernden Änderung
      2. 3.3.2 Gesetz der zunehmenden Komplexität
      3. 3.3.3 Gesetz der abnehmenden Qualität
      4. 3.3.4 Gesetz der sinkenden Produktivität
      5. 3.3.5 Gesetz des begrenzten Wachstums
    4. 3.4 Zur Gültigkeit der Evolutionsgesetze
    5. 3.5 Konsequenzen aus den Gesetzen der Softwareevolution
      1. 3.5.1 Releasegrößen müssen begrenzt werden
      2. 3.5.2 Die Dokumentation muss mit jedem Release aktualisiert werden
      3. 3.5.3 Der Code muss in regelmäßigen Abständen saniert werden
      4. 3.5.4 Die Qualität der Software soll laufend überwacht werden
      5. 3.5.5 Die Evolution des Systems muss geplant werden
    6. 3.6 Warum Software doch noch stirbt
      1. 3.6.1 Veralterung der Implementierungstechnologie
      2. 3.6.2 Ungeeignete fachliche Lösung
      3. 3.6.3 Abhängigkeit von Schlüsselpersonen
  9. 4 Der Evolutionsprozess
    1. 4.1 Der Softwareevolutionsprozess aus historischer Perspektive
    2. 4.2 Das Releasekonzept
    3. 4.3 Systemanalyse
    4. 4.4 Releaseplanung
    5. 4.5 Fortschreibung des Systems
      1. 4.5.1 Korrekturaufgaben
      2. 4.5.2 Änderungsaufgaben
      3. 4.5.3 Weiterentwicklungsaufgaben
      4. 4.5.4 Integrationsaufgaben
      5. 4.5.5 Sanierungsaufgaben
      6. 4.5.6 Optimierungsaufgaben
    6. 4.6 Systemregressionstest
      1. 4.6.1 Regressionstestplanung
      2. 4.6.2 Regressionstestspezifizierung
      3. 4.6.3 Regressionstestaufbau
      4. 4.6.4 Regressionstestausführung
      5. 4.6.5 Regressionstestvalidierung
      6. 4.6.6 Regressionstestevaluierung
    7. 4.7 Systemdokumentation
    8. 4.8 Systemauslieferung
  10. 5 Softwaresystemanalyse
    1. 5.1 Gegenstände der Systemanalyse
    2. 5.2 Methoden der Systemanalyse
      1. 5.2.1 Softwareregelprüfung
      2. 5.2.2 Vermessung der Software
      3. 5.2.3 Nachdokumentation der Software
      4. 5.2.4 Impact-Analyse
    3. 5.3 Ergebnisse der Ist-Systemanalyse
      1. 5.3.1 Prüfberichte
      2. 5.3.2 Metrikberichte
      3. 5.3.3 Liste der zu ändernden Bausteine
      4. 5.3.4 Größenmaße des Auswirkungsbereiches
    4. 5.4 Systemanalyse ist nicht gleich Systemanalyse
  11. 6 Softwareevolutionsplanung
    1. 6.1 Die Notwendigkeit einer Evolutionsstatistik
      1. 6.1.1 Statistik aus der Produktanalyse
      2. 6.1.2 Statistik aus der Prozessanalyse
    2. 6.2 Die Schätzung eines neuen Release
      1. 6.2.1 Messung der gegenwärtigen Systemgröße
      2. 6.2.2 Hochrechnung der Systempflegekosten
      3. 6.2.3 Schätzung der Weiterentwicklungskosten
      4. 6.2.4 Kalkulation der Gesamtkosten des nächsten Release
    3. 6.3 Die Identifikation und Zuweisung der Evolutionsaufgaben
      1. 6.3.1 Evolutionsaufgaben
      2. 6.3.2 Zuweisung der Evolutionsaufgaben
      3. 6.3.3 Terminierung der Evolutionsaufgaben
      4. 6.3.4 Management by Contract
    4. 6.4 Werkzeuge für die Releaseplanung
  12. 7 Fehlerbehebungen
    1. 7.1 Die Fehlermeldung
    2. 7.2 Die Fehleranalyse
    3. 7.3 Fehlerursachenforschung
    4. 7.4 Fehlerbeseitigung
    5. 7.5 Fehlerkorrekturtest
    6. 7.6 Fehlerkorrekturdokumentation
    7. 7.7 Fehlerstatistik
  13. 8 Änderungen
    1. 8.1 Der Änderungsprozess
    2. 8.2 Der Änderungsantrag
    3. 8.3 Änderungsanalyse
    4. 8.4 Lokalisierung der zu ändernden Stellen
      1. 8.4.1 Analyse der Textdokumente
      2. 8.4.2 Analyse der Entwurfsdokumente
      3. 8.4.3 Analyse des Codes
      4. 8.4.4 Analyse der Datenstrukturen
      5. 8.4.5 Analyse der Testfälle
    5. 8.5 Änderungsfolge
    6. 8.6 Änderungsabschottung
    7. 8.7 Änderungsdurchführung
    8. 8.8 Änderungsvalidation
      1. 8.8.1 Aufbau der Integrationstestumgebung
      2. 8.8.2 Generierung der Integrationstestdaten
      3. 8.8.3 Instrumentierung des geänderten Codes
      4. 8.8.4 Ausführung des Integrationstests
      5. 8.8.5 Auswertung der Testergebnisse
    9. 8.9 Änderungsdokumentation
  14. 9 Sanierung
    1. 9.1 Messung als Voraussetzung der Sanierung
    2. 9.2 Sanierungsziele
    3. 9.3 Sanierungsverfahren
      1. 9.3.1 Einfrierungsstrategie
      2. 9.3.2 Gelegenheitsstrategie
    4. 9.4 Sanierungsmaßnahmen
      1. 9.4.1 Assembler-Sprachen
      2. 9.4.2 Prozedurale Sprachen
        1. 9.4.2.1 Reformatierung des Codes
        2. 9.4.2.2 Bereinigung des Codes
        3. 9.4.2.3 Umbenennung nicht sprechender Datennamen
        4. 9.4.2.4 Beseitigung inkompatibler Datentypen
        5. 9.4.2.5 Entfernung festverdrahteter Daten
        6. 9.4.2.6 Auslagerung der IO-Schnittstellen
        7. 9.4.2.7 Restrukturierung der Ablauflogik
        8. 9.4.2.8 Verflachung der Ablaufstruktur
        9. 9.4.2.9 Zerlegung des Codes in kleinere Bausteine
      3. 9.4.3 Objektorientierte Sprachen
        1. 9.4.3.1 Verflachung der Methodenlogik
        2. 9.4.3.2 Verflachung der Klassenhierarchie
        3. 9.4.3.3 Eliminierung redundanter Methoden
        4. 9.4.3.4 Ablösung komplexer Auswahlstrukturen
        5. 9.4.3.5 Verlagerung gemeinsamer Methoden und Attribute
        6. 9.4.3.6 Spaltung zu groß gewordener Klassen
        7. 9.4.3.7 Vereinfachung der Schnittstellen
        8. 9.4.3.8 Entfernung festverdrahteter Daten
        9. 9.4.3.9 Entfernung des toten Codes
        10. 9.4.3.10 Umbenennung der Bezeichner
        11. 9.4.3.11 Ergänzung der Kommentierung
        12. 9.4.3.12 Vereinheitlichung des Codeformats
      4. 9.4.4 Skriptsprachen
    5. 9.5 Sanierungsrevision
  15. 10 Softwareweiterentwicklung
    1. 10.1 Beauftragung einer Systemerweiterung
      1. 10.1.1 Anforderungsgetriebene Evolution
      2. 10.1.2 Modellgetriebene Evolution
      3. 10.1.3 Change-Request-getriebene Evolution
    2. 10.2 Analyse eines Erweiterungsantrages
      1. 10.2.1 Bestätigung des angegebenen Nutzens
      2. 10.2.2 Analyse der Funktionsspezifikation
      3. 10.2.3 Auswirkungsanalyse der beantragten Erweiterung
    3. 10.3 Aufwandsschätzung einer Erweiterung
      1. 10.3.1 Aufwandsschätzung in der anforderungsgetriebenen Evolution
      2. 10.3.2 Aufwandsschätzung in der modellgetriebenen Evolution
      3. 10.3.3 Aufwandsschätzung in der CR-getriebenen Evolution
    4. 10.4 Genehmigung einer Erweiterung
    5. 10.5 Aufstellung des Erweiterungsprojekts
    6. 10.6 Spezifikation der Erweiterung
    7. 10.7 Durchführung der Erweiterung
    8. 10.8 Test der Erweiterung
    9. 10.9 Dokumentation der Erweiterung
  16. 11 Systemregressionstest
    1. 11.1 Die Problematik der Testfallselektion
    2. 11.2 Notwendigkeit eines unabhängigen Testteams
    3. 11.3 Regressionstestwerkzeuge
      1. 11.3.1 Werkzeuge für die statische Analyse
        1. 11.3.1.1 Werkzeuge zur Prüfung der Anforderungsspezifikation
        2. 11.3.1.2 Werkzeuge zur Prüfung des Codes und des Entwurfsmodells
        3. 11.3.1.3 Werkzeuge zur Prüfung der Testdokumentation
      2. 11.3.2 Werkzeuge für die Verwaltung und Fortschreibung der Testfälle
      3. 11.3.3 Werkzeuge für die Testfallauswahl
      4. 11.3.4 Werkzeuge für die Testdatengenerierung
      5. 11.3.5 Werkzeuge für die Regressionstestausführung
      6. 11.3.6 Werkzeuge für die Verfolgung der Testabläufe
      7. 11.3.7 Werkzeuge für die Vermessung der Testüberdeckung
      8. 11.3.8 Werkzeuge für den Abgleich der Testergebnisse
      9. 11.3.9 Werkzeuge für die Fehlermeldung und Fehlerverfolgung
    4. 11.4 Regressionstestverfahren
      1. 11.4.1 Regressionstestplanung
      2. 11.4.2 Regressionstestvorbereitung
      3. 11.4.3 Regressionstestausführung
      4. 11.4.4 Regressionstestauswertung
    5. 11.5 Regressionstestergebnisse
  17. 12 Fortlaufende Dokumentation
    1. 12.1 Die Rechtfertigung der Systemdokumentation
    2. 12.2 Automatisierte Nachdokumentation
      1. 12.2.1 Analyse der Anforderungsdokumente
      2. 12.2.2 Analyse des Entwurfsmodells
      3. 12.2.3 Analyse des Codes
        1. 12.2.3.1 Prozedurale Sprachen
        2. 12.2.3.2 Objektorientierte Sprachen
        3. 12.2.3.3 Gemeinsame Strukturen aller Sprachen
    3. 12.3 Multiple Sichten auf ein Softwaresystem
      1. 12.3.1 Statische Sichten auf die Programmlogik
      2. 12.3.2 Visualisierungstechniken
        1. 12.3.2.1 Baumdiagramme
        2. 12.3.2.2 Netzdiagramme
        3. 12.3.2.3 Sequenzdiagramme
        4. 12.3.2.4 Ablaufdiagramme
        5. 12.3.2.5 Entity/Relationship Diagramme
      3. 12.3.3 Grenzen der grafischen Darstellung
      4. 12.3.4 Texte vs. Diagramme
    4. 12.4 Aufbau und Nutzung eines System-Repository
      1. 12.4.1 Aufbau eines Repository
      2. 12.4.2 Besichtigung der Repository-Inhalte
      3. 12.4.3 Abfragen der Repository-Inhalte
      4. 12.4.4 Generierung von Dokumenten
    5. 12.5 Fortschreibung der Dokumentation
      1. 12.5.1 Abgestimmte Evolution aller Softwareschichten
      2. 12.5.2 Software = Code + Dokumentation + Test
  18. Anhang
    1. A Glossar
    2. B Abkürzungen
    3. C Literaturverzeichnis
  19. Index