|
|

Home
|
Software-Reengineering
Vorlesungsnummer 03-05-H-706.01
Video
Die Vorlesung wurde auf Video aufgezeichnet. Das Video findet man
hier
Warum Sie diese Vorlesung interessieren sollte
Die Pflege und Weiterentwicklung existierender Software verschlingt 50-80% der
Kosten im Software-Life-Cycle. Aus empirischen Untersuchungen ist bekannt,
dass Wartungsprogrammierer 50-60% ihrer Zeit nur mit der Analyse der
Implementierung verbringen, bevor sie eine Änderung tatsächlich durchführen
und testen können.
Für sich persönlich können Sie diese Zahl so interpretieren: Mit sehr großer
Wahrscheinlichkeit werden sie die meiste Zeit ihres späteren beruflichen
Daseins mit der Pflege und Weiterentwicklung existierender Software
verbringen. Darauf sollten Sie sich vorbereiten.
Und wetten, dass die Software, die sie ändern sollen, alles andere als gut
strukturiert und dokumentiert ist? Erschwerend kommt hinzu, dass Sie
nicht der einzige Entwickler dieses riesigen und unübersichtlichen
System sein werden. Was machen Sie nun?
Lernziele
In dieser Vorlesung lernen Sie,
- auf welchen Ebenen Sie Code analysieren können,
- wie Sie Schwachstellen des Codes finden,
- wie Sie duplizierten Code automatisch aufspüren,
- wie Sie Abhängigkeiten zwischen Anweisungen nachverfolgen können,
- wie Sie Code-Muster finden,
- wie Sie den Code automatisch transformieren können,
- wie Sie die Stellen im Code finden, die eine bestimmte
Funktionalität implementieren,
- wie Sie Vererbungshierarchien restrukturieren können,
- wie Sie Software visualisieren können
- und wie Sie Reengineering-Projekte organisieren.
Inhalt
Software Reengineering beschäftigt sich mit Wiedergewinnung
verlorener Informationen über existierende Software-Systeme
(Reverse Engineering), Restrukturierung der Beschreibung des
Systems (Restructuring) und der nachfolgenden Implementierung der
Änderungen (Alteration). Reengineering hat es dabei nicht nur
mit alter Software zu tun; gerade neuere objekt-orientierte Systeme
erfordern oft schon bald eine Restrukturierung, weshalb sich ein guter
Teil der Vorlesung speziell objekt-orientierter Software widmet
(Restrukturierung von Klassenhierarchien, automatisches
Refactoring). Auch im Kontext neuerer Ansätze des Software
Engineerings zur Entwicklung ähnlicher Produkte als Produktlinie
findet Reengineering Einsatz.
Über Inhalte und Erfahrungen der Vorlesung im Wintersemester 1999/2000
an der Uni Stuttgart berichtet dieser Artikel im PDF-Format.
Themen dieser Vorlesung sind:
-
allgemeiner Überblick über das Thema
sowie Beziehung des Reengineerings zu verwandten Gebieten der Software-Wartung,
Wrapping, etc.
-
Zwischendarstellungen für Programmanalysen (abstrakte Syntaxbäume, Program Dependency Graph, Single Static Assignment),
Datenfluss-/Kontrollflussanalysen
- Program Slicing
- Klonerkennung
- Mustersuche
-
automatische Code-Transformationen
und Refactoring
- Begriffsanalyse
- Merkmalsuche
- Analyse und Restrukturierung von Vererbungshierarchien
- Software Visualisierung
- Planung und Durchführung von
Reengineering-Projekten, Prozessmodelle des Reengineerings
Übungen
Die Übungen werden zweiwöchig stattfinden. Neben der Wiederholung
und praktischen Vertiefung des Vorlesungsinhalts werden auch existierende
Reengineering-Werkzeuge vorgestellt.
Voraussetzungen Die Vorlesung richtet sich an
Informatikstudentinnen und -studenten im Hauptstudium sowie an
Studierende anderer Fachrichtungen, die über
Informatikgrundkenntnisse verfügen. Kenntnisse im Compilerbau und
Software Engineering wären hilfreich, sind aber keine notwendige
Voraussetzung.
Termine
Die geplanten Termine der Vorlesung und der Übung sind wie folgt.
- Vorlesung: Montags, 10:15 - 11:45 Uhr, Raum MZH 5210,
und Donnerstag, 8:15 - 9:45 Uhr, Raum MZH 5210
- erste Vorlesung am 26. Oktober 2006
- Übung: zweiwöchig alternierend zur Vorlesung
Weiterführende Informationen
Weitere Informationen zu Reengineering sind in der Reengineering-Bibliographie
erhältlich.
Literatur
| Einführung |   | Motivation; wichtige Begriffe: Wartung
Reverse Engineering, Restrukturierung,
Reengineering, Wrapping, Business Process Reengineering;
Ziele und Aufgaben;
Unterschiede zur Vorwärtsentwicklung;
|
| Statische Programmanalyse und Programmrepräsentationen |   | Statische Programmanalyse, Programmrepräsentationen, Kontroll- und Datenfluss |
| Program-Slicing |   | statisches Program-Slicing, Forward-/Backward-Slicing, intra-/interprozedural, Program Dependency Graph, System Dependency Graph, weitere Slicing-Varianten. |
| Refactoring |   | Refactoring, Bad Smells, Prozess, Beispiele |
| Software-Metriken |   | Größenmetriken,
Komplexitätsmetriken,
Kopplung und Kohäsion,
Objektorientierte Metriken,
Empirische Studien
|
| Klonerkennung |   | Software-Redundanz, Klonerkennung, verschiedene Verfahren |
| Software-Visualisierung |   | Visualisierung statischer und dynamischer Information über Software und ihre Versionsgeschichte. |
| Automatische Code-Transformation |   | |
| Dynamische Analyse |   | Probleme statischer Analysen,
Information durch dynamische Analyse,
Testfälle,
Instrumentierung,
Probleme der Instrumentierung,
Weiterverarbeitung dynamischer Information,
Anwendungsbeispiele,
Vergleich mit statischer Analyse
|
| Formale Begriffsanalyse |   | |
| Merkmalsuche |   | Lokalisierung von Produktfunktionen (Merkmale, Features) im Code; statische, dynamische, hybride Analyse mit formaler Begriffsanalyse; inkrementelle Begriffsanalyse. |
| Architekturrekonstruktion |   | Architekturrekonstruktion mit der Reflektionsmethode und Software-Clustering |
| Durchführung von Reengineering-Projekten |   | |
| Übungsblatt 1 |  | Einfache Werkzeuge; Programmrepräsentationen;
wird am 9.11.06 besprochen. |
| Notizen der Besprechung von Übungsaufgabe 1 |  | |
| Übungsblatt 2 |  | Statische Programmanalyse und Slicing; wird am 23. November besprochen. |
| Notizen der Besprechung der Übungsaufgabe 2 |  | |
| Übungsblatt 3; wird am 25.1.07 besprochen. |  | |
| |
|
|



---------
BEDIENUNG
---------




|

|
|