Software-Restrukturierung



Ähnliche Dokumente
3 Wie bekommen Sie Passwortlevel 3 und einen Installateurscode?

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Objektorientierte Programmierung

Informatik Kurs Simulation. Hilfe für den Consideo Modeler

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Konzentration auf das. Wesentliche.

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

Anleitung über den Umgang mit Schildern

1 Mathematische Grundlagen

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Sind Sie reif fürs ASSESSEMENT CENTER?

mobilepoi 0.91 Demo Version Anleitung Das Software Studio Christian Efinger Erstellt am 21. Oktober 2005

FH-SY Chapter Version 3 - FH-SY.NET - FAQ -

Statuten in leichter Sprache

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

RMeasy das SAP IS U Add On für Versorgungsunternehmen. Optimieren Sie Ihre Prozesse in Kundengewinnung und Kundenbindung.

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Thermoguard. Thermoguard CIM Custom Integration Module Version 2.70

Arbeiten mit UMLed und Delphi

Programmieren für Ingenieure Sommer Ein Rechner. Rechner sind überall. Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet.

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Arbeit zur Lebens-Geschichte mit Menschen mit Behinderung Ein Papier des Bundesverbands evangelische Behindertenhilfe e.v.

Ist Fernsehen schädlich für die eigene Meinung oder fördert es unabhängig zu denken?

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

13. Lineare DGL höherer Ordnung. Eine DGL heißt von n-ter Ordnung, wenn Ableitungen y, y, y,... bis zur n-ten Ableitung y (n) darin vorkommen.

Anleitung für die Version von online 1. Schritt: Rufen Sie die Website auf...

AutoTexte und AutoKorrektur unter Outlook verwenden

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Satzhilfen Publisher Seite Einrichten

Gezielt über Folien hinweg springen

Was ist das Budget für Arbeit?

Pädagogik. Melanie Schewtschenko. Eingewöhnung und Übergang in die Kinderkrippe. Warum ist die Beteiligung der Eltern so wichtig?

Mediator 9 - Lernprogramm

Übungen zur Softwaretechnik

Moni KielNET-Mailbox

1 topologisches Sortieren

Für uns ist es nicht nur ein Möbelstück.

Erfahrungen mit Hartz IV- Empfängern

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken.

Kurzanleitung RACE APP

Den Durchblick haben. VOLKSBANK BAD MÜNDER eg. Online aber sicher: Unsere Produkt- und Sicherheitshotline hilft und informiert

Schnellanleitung: Verbuchung von Studien- und Prüfungsleistungen

Informationen zum Ambulant Betreuten Wohnen in leichter Sprache

CAQ Software für Ihr Qualitätsmanagement. Ablauf für die Erfassung der Fehler in der Fertigung

Transaktionsempfehlungen im ebase Online nutzen

Terminabgleich mit Mobiltelefonen

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

Stift-Karussell in M-Plot einrichten

Protect 7 Anti-Malware Service. Dokumentation

Beispiel(unten ist der Spielfeldrand):

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

ECO-Manager - Funktionsbeschreibung

Glaube an die Existenz von Regeln für Vergleiche und Kenntnis der Regeln

ecaros2 - Accountmanager

1 Planung Migration UNIMOD collect (=neues Release

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Das Festkomitee hat die Abi-Seite neu konzipiert, die nun auf einem (gemieteten) Share Point Server

Die SPD und die Grünen machen im Niedersächsischen Landtag. Alle Menschen sollen in der Politik mitmachen können.

Handbuch für Redakteure

FRAGEBOGEN ANWENDUNG DES ECOPROWINE SELBSTBEWERTUNG-TOOLS

Serienbrieferstellung in Word mit Kunden-Datenimport aus Excel

SMS/ MMS Multimedia Center

Viele Bilder auf der FA-Homepage

Speicher in der Cloud

Gruppenrichtlinien und Softwareverteilung

5. Übung: PHP-Grundlagen

Softwaretechnik (Allgemeine Informatik) Überblick

Erweiterung AE WWS Lite Win: AES Security Verschlüsselung

Technical Note 0606 ewon

Österreichische Trachtenjugend

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Ist Excel das richtige Tool für FMEA? Steve Murphy, Marc Schaeffers

Zählen von Objekten einer bestimmten Klasse

Internationales Altkatholisches Laienforum

Haben Sie über elektronisches Schließfachmanagement nachgedacht? Ein Schließfach ist ohne ein solides Schloss nicht komplett.

Aspekte zur Sicherung der Wirtschaftlichkeit von. Sportboothäfen im Zeichen des demografischen Wandels

Objektorientierte Programmierung OOP

Erstellen von x-y-diagrammen in OpenOffice.calc

Seco Online Store! Einkauf per Mausklick!

Übersicht Programmablaufsteuerung

Wir arbeiten mit Zufallszahlen

1 Vom Problem zum Programm

Örtliche Angebots- und Teilhabeplanung im Landkreis Weilheim-Schongau

Lernerfolge sichern - Ein wichtiger Beitrag zu mehr Motivation

Effiziente Prozesse. Die Formel 1 und die Druckindustrie

Der BeB und die Diakonie Deutschland fordern: Gesundheit und Reha müssen besser werden. So ist es jetzt:

Wir machen neue Politik für Baden-Württemberg

Datenaufbereitung in SPSS. Daten zusammenfügen

Stammdatenanlage über den Einrichtungsassistenten

Dokumentation Bonuspunkteverwaltung. Verfasser(in) / Autor: Check it Consulting

Ein Vorwort, das Sie lesen müssen!

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Daten-Synchronisation zwischen dem ZDV-Webmailer und Outlook ( ) Zentrum für Datenverarbeitung der Universität Tübingen

Transkript:

0/24 Software-Restrukturierung Andreas Zeller Lehrstuhl Softwaretechnik Universität des Saarlandes, Saarbrücken

Restrukturierung 1/24 Restrukturierung ist nach dem Reverse Engineering (Programmverstehen) der zweite wesentliche Teil des Software-Reengineerings. Wir betrachten zwei Techniken Refactoring Restrukturierung von OO-Systemen Wrapping Verpacken eines Altsystems in OO-Schnittstelle

Refactoring 2/24 Refactoring ( Refaktorisieren ) = Aufspalten von Software in weitgehend unabhängige Faktoren Umstrukturieren von Software gemäß Zerlegungsregeln zur Modularisierung Es gibt keine allgemeine Methode des Refactorings aber einen Katalog von Methoden, ähnlich wie bei Entwurfsmustern

Ein Refactoring-Muster 3/24 Problem: Fallunterscheidungen innerhalb einer Klasse können fast immer durch Einführen von Unterklassen ersetzt werden. Das ermöglicht weitere Lokalisierung jede Klasse enthält genau die für sie nötigen Berechnungsverfahren.

Ein Refactoring-Muster (2) 4/24 Das Muster Replace Conditional Logic with Polymorphism hat die allgemeine Form: Eine Fallunterscheidung bestimmt verschiedenes Verhalten, abhängig vom Typ des Objekts. Bewege jeden Ast der Fallunterscheidung in eine überladene Methode einer Unterklasse. Mache die ursprüngliche Methode abstrakt.

Ein Refactoring-Muster (3) 5/24 Original-Code: double getspeed() { switch ( type) { case EUROPEAN: return getbasespeed(); case AFRICAN: return getbasespeed() - getloadfactor() * numberofcoconuts(); case NORWEGIAN BLUE: return ( isnailed)? 0 : getbasespeed( voltage); } }... und weitere ähnliche Fallunterscheidungen an zahlreichen Stellen im Code

Ein Refactoring-Muster (4) 6/24 Das Muster führt eine neue Klassenhierarchie ein: Bird +getspeed() European African Norwegian Blue +getspeed() +getspeed() +getspeed() Die Fallunterscheidung ist nun in die Unterklassen ausgelagert!

Wann wird restrukturiert? 7/24 Typische Code-Probleme können auffallen Beim Gegenlesen Durch Anwendung von Metriken Wir betrachten einige typische Probleme und die passenden Refactoring-Muster.

Wann wird restrukturiert? (2) 8/24 Mehrfach auftretender Code.

Wann wird restrukturiert? (2) 8/24 Mehrfach auftretender Code. Neu zusammenfassen (Extract Method, Extract Class)

Wann wird restrukturiert? (2) 8/24 Mehrfach auftretender Code. Neu zusammenfassen (Extract Method, Extract Class) Lange Methoden.

Wann wird restrukturiert? (2) 8/24 Mehrfach auftretender Code. Neu zusammenfassen (Extract Method, Extract Class) Lange Methoden. Neue Methoden bilden (Extract Method)

Wann wird restrukturiert? (2) 8/24 Mehrfach auftretender Code. Neu zusammenfassen (Extract Method, Extract Class) Lange Methoden. Neue Methoden bilden (Extract Method) Große Klassen.

Wann wird restrukturiert? (2) 8/24 Mehrfach auftretender Code. Neu zusammenfassen (Extract Method, Extract Class) Lange Methoden. Neue Methoden bilden (Extract Method) Große Klassen. In Klassen aufspalten (Extract Class)

Wann wird restrukturiert? (2) 8/24 Mehrfach auftretender Code. Neu zusammenfassen (Extract Method, Extract Class) Lange Methoden. Neue Methoden bilden (Extract Method) Große Klassen. In Klassen aufspalten (Extract Class) Lange Parameterlisten.

Wann wird restrukturiert? (2) 8/24 Mehrfach auftretender Code. Neu zusammenfassen (Extract Method, Extract Class) Lange Methoden. Neue Methoden bilden (Extract Method) Große Klassen. In Klassen aufspalten (Extract Class) Lange Parameterlisten. Parameter-Objekt (Introduce Parameter Object)

Wann wird restrukturiert? (2) 8/24 Mehrfach auftretender Code. Neu zusammenfassen (Extract Method, Extract Class) Lange Methoden. Neue Methoden bilden (Extract Method) Große Klassen. In Klassen aufspalten (Extract Class) Lange Parameterlisten. Parameter-Objekt (Introduce Parameter Object) Fremdgänger. Eine Methode benutzt mehr Dienste einer fremden Klasse als Dienste der eigenen

Wann wird restrukturiert? (2) 8/24 Mehrfach auftretender Code. Neu zusammenfassen (Extract Method, Extract Class) Lange Methoden. Neue Methoden bilden (Extract Method) Große Klassen. In Klassen aufspalten (Extract Class) Lange Parameterlisten. Parameter-Objekt (Introduce Parameter Object) Fremdgänger. Eine Methode benutzt mehr Dienste einer fremden Klasse als Dienste der eigenen Methode bewegen (Move Method) Three strikes and you refactor!

Wann wird restrukturiert? (3) 9/24 Datenklumpen. Dieselben Daten treten regelmäßig als Parameter auf

Wann wird restrukturiert? (3) 9/24 Datenklumpen. Dieselben Daten treten regelmäßig als Parameter auf (Parameter-)Klasse einführen (Extract Class, Introduce Parameter Object)

Wann wird restrukturiert? (3) 9/24 Datenklumpen. Dieselben Daten treten regelmäßig als Parameter auf (Parameter-)Klasse einführen (Extract Class, Introduce Parameter Object) Der Reiz des Primitiven. Häufiger Gebrauch von nicht-oo-datentypen wie Records

Wann wird restrukturiert? (3) Datenklumpen. Dieselben Daten treten regelmäßig als Parameter auf (Parameter-)Klasse einführen (Extract Class, Introduce Parameter Object) Der Reiz des Primitiven. Häufiger Gebrauch von nicht-oo-datentypen wie Records Durch Klassen ersetzen (Replace Data Value with Object, Replace Type Code with Class) 9/24

Wann wird restrukturiert? (3) Datenklumpen. Dieselben Daten treten regelmäßig als Parameter auf (Parameter-)Klasse einführen (Extract Class, Introduce Parameter Object) Der Reiz des Primitiven. Häufiger Gebrauch von nicht-oo-datentypen wie Records Durch Klassen ersetzen (Replace Data Value with Object, Replace Type Code with Class) Datenklassen. Eine Klasse enthält nur Daten 9/24

Wann wird restrukturiert? (3) Datenklumpen. Dieselben Daten treten regelmäßig als Parameter auf (Parameter-)Klasse einführen (Extract Class, Introduce Parameter Object) Der Reiz des Primitiven. Häufiger Gebrauch von nicht-oo-datentypen wie Records Durch Klassen ersetzen (Replace Data Value with Object, Replace Type Code with Class) Datenklassen. Eine Klasse enthält nur Daten Dienste der Klasse zuordnen (Move Method) 9/24

Wann wird restrukturiert? (3) Datenklumpen. Dieselben Daten treten regelmäßig als Parameter auf (Parameter-)Klasse einführen (Extract Class, Introduce Parameter Object) Der Reiz des Primitiven. Häufiger Gebrauch von nicht-oo-datentypen wie Records Durch Klassen ersetzen (Replace Data Value with Object, Replace Type Code with Class) Datenklassen. Eine Klasse enthält nur Daten Dienste der Klasse zuordnen (Move Method) Switch-Anweisungen. Meist Zeichen mangelnder Objektorientierung 9/24

Wann wird restrukturiert? (3) Datenklumpen. Dieselben Daten treten regelmäßig als Parameter auf (Parameter-)Klasse einführen (Extract Class, Introduce Parameter Object) Der Reiz des Primitiven. Häufiger Gebrauch von nicht-oo-datentypen wie Records Durch Klassen ersetzen (Replace Data Value with Object, Replace Type Code with Class) Datenklassen. Eine Klasse enthält nur Daten Dienste der Klasse zuordnen (Move Method) Switch-Anweisungen. Meist Zeichen mangelnder Objektorientierung Dynamische Bindung ausnutzen (Replace Conditional Logic with Polymorphism) 9/24

Wann wird restrukturiert? (4) 10/24 Temporäres Attribut. In einem Attribut werden temporäre Zwischenergebnisse gespeichert

Wann wird restrukturiert? (4) 10/24 Temporäres Attribut. In einem Attribut werden temporäre Zwischenergebnisse gespeichert Zwischenergebnisse in Klasse auslagern (Extract Class)

Wann wird restrukturiert? (4) 10/24 Temporäres Attribut. In einem Attribut werden temporäre Zwischenergebnisse gespeichert Zwischenergebnisse in Klasse auslagern (Extract Class) Nachrichtenketten. Beispiel: john.getgroup().getdepartment().getmanager()

Wann wird restrukturiert? (4) 10/24 Temporäres Attribut. In einem Attribut werden temporäre Zwischenergebnisse gespeichert Zwischenergebnisse in Klasse auslagern (Extract Class) Nachrichtenketten. Beispiel: john.getgroup().getdepartment().getmanager() Abkürzungsmethoden wie john.getmanager() einführen (Hide Delegate)

Wann wird restrukturiert? (4) Temporäres Attribut. In einem Attribut werden temporäre Zwischenergebnisse gespeichert Zwischenergebnisse in Klasse auslagern (Extract Class) Nachrichtenketten. Beispiel: john.getgroup().getdepartment().getmanager() Abkürzungsmethoden wie john.getmanager() einführen (Hide Delegate) Vermittler. Zu viele Abkürzungsmethoden (john.getmanager(), john.getmanagerlastname(), john.getdepartmentlocation()... ) 10/24

Wann wird restrukturiert? (4) Temporäres Attribut. In einem Attribut werden temporäre Zwischenergebnisse gespeichert Zwischenergebnisse in Klasse auslagern (Extract Class) Nachrichtenketten. Beispiel: john.getgroup().getdepartment().getmanager() Abkürzungsmethoden wie john.getmanager() einführen (Hide Delegate) Vermittler. Zu viele Abkürzungsmethoden (john.getmanager(), john.getmanagerlastname(), john.getdepartmentlocation()... ) Vermittler entfernen (Remove Middle Man) 10/24

Wann wird restrukturiert? (4) Temporäres Attribut. In einem Attribut werden temporäre Zwischenergebnisse gespeichert Zwischenergebnisse in Klasse auslagern (Extract Class) Nachrichtenketten. Beispiel: john.getgroup().getdepartment().getmanager() Abkürzungsmethoden wie john.getmanager() einführen (Hide Delegate) Vermittler. Zu viele Abkürzungsmethoden (john.getmanager(), john.getmanagerlastname(), john.getdepartmentlocation()... ) Vermittler entfernen (Remove Middle Man) Kommentare. Oft Hinweise auf schwer verständlichen Code 10/24

Wann wird restrukturiert? (4) Temporäres Attribut. In einem Attribut werden temporäre Zwischenergebnisse gespeichert Zwischenergebnisse in Klasse auslagern (Extract Class) Nachrichtenketten. Beispiel: john.getgroup().getdepartment().getmanager() Abkürzungsmethoden wie john.getmanager() einführen (Hide Delegate) Vermittler. Zu viele Abkürzungsmethoden (john.getmanager(), john.getmanagerlastname(), john.getdepartmentlocation()... ) Vermittler entfernen (Remove Middle Man) Kommentare. Oft Hinweise auf schwer verständlichen Code Methoden explizit machen (Extract Method, Introduce Assertion) 10/24

Gefahren der Restrukturierung 11/24 Änderungen am laufenden System sind stets gefährlich, da bestehende Funktionalität gefährdet sein könnte Never change a running system!

Voraussetzungen für Restrukturierung 12/24 Automatisierte Tests nach jeder Änderung

Voraussetzungen für Restrukturierung 12/24 Automatisierte Tests nach jeder Änderung Entwurfswerkzeuge, die einfache Änderungen am Entwurf ermöglichen

Voraussetzungen für Restrukturierung 12/24 Automatisierte Tests nach jeder Änderung Entwurfswerkzeuge, die einfache Änderungen am Entwurf ermöglichen Dokumentationswerkzeuge, mit denen die Dokumentation stets auf dem neuesten Stand gehalten werden kann

Voraussetzungen für Restrukturierung 12/24 Automatisierte Tests nach jeder Änderung Entwurfswerkzeuge, die einfache Änderungen am Entwurf ermöglichen Dokumentationswerkzeuge, mit denen die Dokumentation stets auf dem neuesten Stand gehalten werden kann Versionsverwaltung zum Erhalt früherer Versionen

Voraussetzungen für Restrukturierung 12/24 Automatisierte Tests nach jeder Änderung Entwurfswerkzeuge, die einfache Änderungen am Entwurf ermöglichen Dokumentationswerkzeuge, mit denen die Dokumentation stets auf dem neuesten Stand gehalten werden kann Versionsverwaltung zum Erhalt früherer Versionen Gute Kommunikation innerhalb des Teams, damit Mitglieder über Änderungen informiert werden

Voraussetzungen für Restrukturierung 12/24 Automatisierte Tests nach jeder Änderung Entwurfswerkzeuge, die einfache Änderungen am Entwurf ermöglichen Dokumentationswerkzeuge, mit denen die Dokumentation stets auf dem neuesten Stand gehalten werden kann Versionsverwaltung zum Erhalt früherer Versionen Gute Kommunikation innerhalb des Teams, damit Mitglieder über Änderungen informiert werden Systematisches Vorgehen etwa indem existierende und bekannte Refaktorisierungen eingesetzt werden, statt unsystematisch alles einmal zu überarbeiten.

Voraussetzungen für Restrukturierung 12/24 Automatisierte Tests nach jeder Änderung Entwurfswerkzeuge, die einfache Änderungen am Entwurf ermöglichen Dokumentationswerkzeuge, mit denen die Dokumentation stets auf dem neuesten Stand gehalten werden kann Versionsverwaltung zum Erhalt früherer Versionen Gute Kommunikation innerhalb des Teams, damit Mitglieder über Änderungen informiert werden Systematisches Vorgehen etwa indem existierende und bekannte Refaktorisierungen eingesetzt werden, statt unsystematisch alles einmal zu überarbeiten. Vorgehen in kleinen Schritten mit Tests nach jeder Überarbeitung.

Restrukturierungs-Werkzeuge 13/24 Zur Sicherheit tragen auch spezielle Refaktorisierungs-Werkzeuge, die auf Knopfdruck bestimmte Refaktorisierungen durchführen Ziel: Semantik des Programms erhalten! Leider derzeit noch in den Kinderschuhen

Software-Sanierung 14/24 Während Refactoring ein Verfahren für das Überarbeiten im Kleinen ist, spricht man bei großen Systemen von Sanierung. Eine Sanierung ist häufig Alternative zu einer Neuentwicklung oder dem Einsatz einer Standardsoftware. Zur Kosten/Nutzen-Analyse muß man wissen, was die derzeitige Wartung kostet was die Sanierung kosten wird wieviel durch eine Sanierung eingespart werden kann wann sich die Sanierungskosten amortisieren

Wann wird ein Altsystem saniert? 15/24 1. Altsystem ist häufig wegen Fehlern außer Betrieb 2. Code ist älter als 7 Jahre 3. Struktur zu komplex 4. Computersystem nicht mehr aktuell 5. Programme werden emuliert 6. Module sind zu groß geworden 7. Ressourcenbedarf ist zu groß 8. Fest eingebaute Konstanten müssen umgestoßen werden 9. Ausbildung der Wartungsmitarbeiter zu teuer 10. Technische Dokumentation unbrauchbar 11. Anforderungsdefinition mangelhaft

Wann wird ein Altsystem saniert? (2) 16/24 Sanierung ist nur dann attraktiv, wenn das Altsystem noch wenigstens drei Jahre zu leben hat und der Sanierungsaufwand nicht mehr als 50% des Aufwands einer Neuentwicklung beträgt. Sanierung ist ein Transformationsprozeß: Das Altsystem wird Schritt für Schritt in eine bessere Form gebracht

Wrapping 17/24 Wrapping = Verpacken eines Altsystems in objektorientierte Schnittstelle Grundidee: Altsoftware (oder Teile davon) werden durch eine Schicht nach außen so verpackt, daß objektorientierte Benutzung moglich ist Anwender merkt nicht, daß sich hinter der Verpackung ein Altsystem befindet Gut geeignet für Migration: Erst objektorientiert verpacken, dann durch Neuimplementierungen ersetzen

Objektorientierter Verpacker 18/24 Objekt verkapselt Altsoftware und transformiert funktionale Schnittstelle in objektorientierte Schnittstelle OO-Programm Aufruf Object Wrapper Operation 1 Operation 2... Aufruf Altsystem entry point Code des Altsystems bleibt unverändert Neue Teile können objektorientiert geschrieben werden Altsysteme finden ihren Weg in neue Anwendungen

Prozeduraler Verpacker 19/24 Ziel: Einsatz eines Objekts in Altsystem Altsystem ruft prozeduralen Verpacker auf, der die Aufrufe zum Objekt weiterleitet Altsystem Aufruf Procedural Wrapper entry point Aufruf Code des Altsystems bleibt nahezu unverändert OO-Programm Operation 1 Operation 2... Neue Teile können objektorientiert geschrieben werden OO-Programme können von beliebig vielen Altsystemen benutzt werden

Alle Verpackungsmöglichkeiten 20/24 Prozeßebene Kompletter Prozeß wird mit OO-Schnittstelle versehen; Erzeugen der Eingabe und Abfangen der Ausgabe Transaktionsebene OO-Schnittstelle simuliert Ein/Ausgaben am Bildschirm; Ausfüllen von Masken und Verarbeiten der Ausgabedaten Programmebene Starten eines Programms (wie Prozeß) Modulebene Aufruf eines Unterprogramms mit benötigten Eingabeparametern Prozedurebene Aufruf einer Prozedur des Altsystems; benötigt vorheriges Einrichten der globalen Daten Dateiebene Zugriff auf persistente Daten (= Dateien, Datenbanken) des Altsystems

Migration 21/24 Gegeben sei ein Altsystem, das objektorientiert verpackt werden soll Auf das Altsystem kann an drei Stellen zugegeriffen werden: 1. Simulation von Benutzer-Ein/Ausgaben Problem: Effizienz 2. Aufruf einzelner Funktionen Problem: Altsystem ist top-down aufgebaut 3. Zugriff auf Datenbank Problem: Implementierungsaufwand

Migration (2) 22/24 Komponentenbasierte Neuentwicklung Object Request Broker (ORB) Schnittstelle Neuimplementierung Wrapper Datenhaltung z.b. Lagerhaltung z.b. Kundenverwaltung Zugriffe auf das Altsystem Altsystem Komponenten können Stück für Stück neu entwickelt werden Gleichzeitig wird der Zugriff auf das Altsystem abgeschaltet

Praktische Probleme 23/24 Beim Binden von OO-Komponenten und funktionaler Komponenten können leicht Probleme auftreten: Sprachanbindung (z.b. COBOL/C++) Versorgen globaler Datenstrukturen im Altsystem Verwaltung mehrfacher Objekt-Instanzen Verwaltung unterschiedlicher Laufzeitumgebungen (Dateien, Freispeicher, Garbage collection, Exceptions, Lebensdauer von Objekten) Verpacken auf Prozeß- oder Programmebene ist am einfachsten!

Zusammenfassung 24/24 Software Reengineering = Reverse Engineering + Restrukturierung Refactoring ist das Umstrukturieren von Software im Kleinen gemäß Modularisierungskriterien Sanieren ist das Überarbeiten im Großen von Altsystemen Refactoring und Sanieren sind stets mit Risiken verbunden ( Läuft mein Programm noch? ) Wrapping hilft, Altsysteme in OO-Umgebungen einzusetzen und schrittweise nach OO zu migrieren