Kapitel 9 - Reengineering und Programmierungskonzepte
- Legacy Systeme
- Reengineering und Wartung
- Programmierungskonzepte wir STL und Patterns
|
Legacy-Systeme - Charakteristik und Probleme
- Wurden mit Anahme einer kurzen Lebenszeit entwickelt, sind aber immernoch im
Einsatz
- Altsysteme sind Komplex und Austausch wäre sehr teuer
- Altsysteme verursachen hohe Wartungskosten
- Komplexe software, viel Support, wenig Dokumentation
- Bei Austausch gefahr, daß Geschäftswissen verloren geht
- Falsche Entscheidungen können schwere Folgen haben
Probleme mit der veralteten Softwarearchitektur
- Systeme bestehen aus vielen verschiedenen Einzelsystemem, welche Daten
gemeinsam nutzen
- Systeme benutzen Teilweise Files und keine DBMS
- Daten sind of Redundant
Reengineering - wann und warum?
- Software Evolution zwischen zwei Extremfällen der Systemersetzung und
weiterlaufender Wartung
- Reengineering meist billiger als Neuentwicklung eines Systems
- Ausgangspunkt für RE ist exisitierenedes System
- Geringeres Risiko (inkrementell) und Kosten
Methoden des Reengineerings
Source Code Translation
- Programmübersetzung in andere Programmiersprache
- Zielsprache in neue Version updaten (z.B. wenn alte Compiler nicht mehr
kompatibel)
Programm Neustrukturierung
- Programme mit "Spagetti"-Struktur schwer zu untersuchen
- Viele Automatische Neustrukturierungstools vorhanden
System Neustrukturierung
- Programm Neustrukturierung verbessert nicht die Systemarchitektur, da nur
isolierte Betrachtung
- System muss selbst Restrukturiert werden
Inkremental Evolution bei Systemersetzung weniger Riskobehaftet als Bing Bang
Wartung von Software - Ursachen, Methoden
- Um Guten Zustand eines Systemes aufrechterhalten
- Einbringen von Änderungen nachdem das System verkauft wurde
Die Drei Arten der Wartung
- Korrigierende (Fehler beheben)
- Adaptive (neues Umfeld in HW/SW)
- Perfektive (neue Anforderungen)
- Vorausschauende Wartung (vorher einfach und gut strukturieren, dass Wartung
billig wird)
- Kosten für Änderungen wärend Wartung extrem hoch
- Data Reengineering (Datenübernahme, Datenabgleich, Datenredefinition)
- Datenzentralisierung (RDBMS...)
Programmierungskonzepte
Generische Progammierung, Templates, Patterns und Frameworks...
Generische Progammierung und Templates
- Generische Units sind parametrisierte Templates
- Sie müssen initialisiert werden, um dem Compiler den verwendeten Datentypen
mitzuteilen
- DT kann auch abstrakt sein
- BSP: Sortierungsalgorithmus, Datentyp ist formeller Parameter
STL Library - die Idee
- Gemeinsame Komponenten zusammenfassen in Bibliothek
- STL mehrdimensionaler Raum (Alg, Containers / DS , DT) aus dem benötigte
Prozedure mit benötigtem Datentyp und Datenstrukturen (Array, Listen...) gewählt
werden kann
- STL verringert notwendige LOC, da ohne Templates i * j * k verschiedene
Codeversionen
- Mit Template-Funktionen nur noch j * k zu programmierende Codesstücke
- Mit Template-Klassen für Container sogar nur j + k
Patterns
- Viel Allgemeiner als Template
- Kein Softwarestück, sindern ein Konzept von bewährten Lösungen
Jedes Pattern besteht aus
Arten von Patterns
- Konzeptuelle
- Architektonische
- Entwurfsmuster
- Programmierungsmuster
- Dokumentationsmuster
Frameworks
- Idee ist Erweiterung der virtuellen Maschine
- Framework ist wiederverwendbare mini-Architektur welche generische Struktur
und Verhalten von Softwarefamilien abstrahiert
- Kontext spezifiziert Struktur
- In Klassen geteilt
- Wie Klassen und Objekte zusammenarbeiten
- Framework (Executable) ist eine Implementation von Design-Pattern
- Framework und Wiederverwendbarkeit
- Dynamisches Binden, z.B. dynamische Konfiguration von Features während
Laufzeit
Wiederverwendbar steigt, aber auch Nachteile:
- Schwer zu durchschauen und zu verstehen
- Erhöhte Komplexität
- Alle Features von Vater-Klassen werden geerbt, auch wenn nicht benötigt ->
somit steigende Größe
- Performancenachlass durch dynamisches Binden
Metaprogrammierung (generative Programmierung)
- Applikationen bei denen Kontext zur Kompilierungszeit bekannt, somit
statisches Binden anstatt von dynamischen möglich
- Meta-Programming benutzt Templatespezialisierungen (if-tool) und
Templaterekursion (loop-tool) zum schreiben von C++ programmen, welche zur
Komilierungszeit vom C++ Compiler interpretiert werden
- Compile Time Computation und Code Generation
Adaptive Programmierung
- OO Technologie kapselt Daten und Funktionen in Klassen
- Implementation ist geschützt gegen Änderungen an DS, da nur über
Schnittstellen Zugriff
- Mancha Applikationen leiden unter periodischen Änderungen in
Klassenstrukturen und Klassenhierachien
- Apdaptive Programmierung ermöglicht den Applikationen eine Schnittstelle zur
Klassenhierarchie
Aspektorientierte Programmierung
Funktionalität ist bei OO in Klassen gekapselt
Problem:
- Es gibt Dienste die nicht nur in einer Klasse gekapselt werden können (z.B.
Tracing)
- So ein Service ist auf viele Objekte verteilt
- Wie kann man einen solchen Dienst trotzdem zentralisiert Implementieren?
- Aspekte sind Funktionalitäten, Modelle solcher Dienste
- Asprekte werden in eigenen separaten Units gekapselt
- Während des Preprocessings werden die Aspekte durch einen WEAVER im Programm
verteilt
|
|
|
|
|
|
Kapitel 1
|
Einleitung
|
|
Einführung, Geschichte...
|
|
Kapitel 2
|
Eigenschaften
|
|
Filtern und Trennen, Modularisierung...
|
|
Kapitel 3
|
Strukturierte Analyse
|
|
Strukturierte und OO-Analyse, Petri-Netze
|
|
Kapitel 4
|
Spezifikation
|
|
Risikoanalyse, Modellierungshilfen, Spezifikationen
|
|
Kapitel 5
|
Entwurfsprozess
|
|
Entwurf, DFD, Tests, UI...
|
|
Kapitel 6
|
Prozessmodelle
|
|
Softwarekrise, Lebenszyklusmodelle...
|
|
Kapitel 7
|
CASE und PM
|
|
CASE, Projektmanagement...
|
|
Kapitel 8
|
Software-Metriken
|
|
Softwarequalität, Entwurfsmetriken...
|
|
Kapitel 9
|
Programmierungskonzepte
|
|
Legacy Systeme, Reengineering...
|
|
|
|
|
|
|
Quellen:
|
Petr Kroha
Softwaretechnologie
|
Prof. Kroha
Vorlesungsskript
|
L. Rosenhainer
Vorlesungsskript
|
Word Wide Web
Verschiedenste Seiten
|
|
|
|
|