Home  Sitemap  Kontakt 





 


TZI

---------------
 
 
Home
Software-Reengineering

Vorlesungsnummer 03-05-H-706.01

3+1 SWS, 6 ECTS, Vertiefungsmodul

Termine

Die Termine der Vorlesung und der Übung sind wie folgt:
  • erste Vorlesung am 14. Oktober 2013
  • montags, 10:30 - 12:00 Uhr, MZH 1450, und donnerstags, 14:00 s.t. - 15:30 Uhr, MZH 1450

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?

Die Vorlesung gibt darauf eine Antwort. Sie zeigt, wie man (teilautomatisch) Programme analysieren und verändern kann.

Lehrform

Zu dieser Vorlesung gibt es ein ausformuliertes Skriptum, das allen Teilnehmern als PDF frei zur Verfügung gestellt wird. Dieses ausführliche Skript bietet die Chance, die Veranstaltung in abgewandelter Form zu organisieren. Statt der klassischen Form des Vortrags und den anschließenden Übungen können wir dank des Skripts komplett auf den Vortrag verzichten. Statt dessen können wir die Zeit für praktische Übungen nutzen. Alle Teilnehmer müssten dazu vorab bestimmte Abschnitte des Skripts lesen. Im Rahmen der Vorlesungszeit werden wir dann dazu gemeinsam vertiefende Übungsaufgaben und ein kleines praktisches Projekt bearbeiten. Diese Form des Lernens haben wir das letzte Jahr bereits erfolgreich angewandt. So werden alle Teilnehmer wesentlich aktiver eingebunden. Außerdem können wir Eclipse um weitere Analysen und Refactorings erweitern.

Ob wir diese Form anwenden wollen oder doch lieber die klassische Form, werden wir in der ersten Vorlesung gemeinsam festlegen.

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.

Themen dieser Vorlesung sind:

  • allgemeiner Überblick über das Thema sowie Beziehung des Reengineerings zu verwandten Gebieten der Software-Wartung, Wrapping, etc.
  • Zwischendarstellungen für statische Programmanalysen (abstrakte Syntaxbäume, Program Dependency Graph, Single Static Assignment), Datenfluss-/Kontrollflussanalysen
  • Dynamische Analyse
  • Program Slicing
  • Klonerkennung
  • Mustersuche
  • automatische Code-Transformationen und Refactoring
  • Begriffsanalyse
  • Merkmalsuche
  • Analyse und Restrukturierung von Vererbungshierarchien
  • Software-Visualisierung
  • Architekturrekonstruktion und Software-Clustering
  • Planung und Durchführung von Reengineering-Projekten, Prozessmodelle des Reengineerings

Übungen

Bei der klassischen Form der Vorlesung werden die Übungen zweiwöchig stattfinden. Neben der Wiederholung und praktischen Vertiefung des Vorlesungsinhalts werden dabei auch existierende Reengineering-Werkzeuge vorgestellt. Bei der neuen Form werden ausschließlich Papier-Übungen und praktische Programmierübungen (Entwicklung eines Refactoring-Tools) im Rahmen der Vorlesungszeit bearbeitet.

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.

Video

Die Vorlesung wurde auf Video in einem früheren Durchlauf aufgezeichnet. Das Video findet man hier Natürlich ist die Vorlesung seit damals nicht stehen geblieben und die Inhalte haben sich zu einem gewissen Teil verändert.

Literatur

Zur Vorlesung gibt es ein ausführliches Skript, das jeder Teilnehmer als PDF frei erhält. Des Weiteren hilft die folgende Literaturliste:

Reengineering

  • Reengineering - Eine Einführung, Bernd Müller, B.G. Teubner Verlag Stuttgart, 1997. Eines der ersten Bücher überhaupt zu diesem Thema. Ein kurze Einführung aller wichtiger Begriffe, deren Beschreibung sich mit meiner Vorlesung deckt. Geht auch kurz auf kognitive Aspekte ein. Beschreibt gängige Metriken und erörtert die Frage, inwieweit Wartbarkeit messbar ist. Kapitel 9 zur Kosten-/Nutzenanalyse nach Harry Sneed ist auch Teil meiner Vorlesung.
  • Object Oriented Reengineering Patterns, Serge Demeyer, Stephane Ducasse, Oscar Nierstrasz, 2007. Dieses Buch gibt es umsonst als PDF! Beschreibt Best Practices beim Reengineering von objektorientierten Systemen in Form von Prozessmustern.
  • Refactoring: Improving the Design of Existing Code, Martin Fowler, Addison-Wesley, 2000. Das Standardwerk zu Refactorings. Refactorings sind Restrukturierungen (Reengineering) des Quellcodes, um die Wartbarkeit zu verbessern, ohne Änderung der Funktionalität.
  • Modernizing Legacy Systems , Robert C. Seacord, Daniel Plakosh, and Grace A. Lewis. Addison-Wesley, 2003. Beschreibt Prozesse zur Modernisierung von Software.
  • Anti Patterns: Entwurfsfehler erkennen und vermeiden, William J. Brown (Autor), Raphael C. Malveau, Mitp-Verlag; zweite überarbeitete Auflage, 2007. Ein Anti-Pattern ist ein negatives Pattern. Das Buch betrachtet Anti-Pattern sowohl in Prozessen als auch in Architekturen.

Wartung und Evolution

Wartbarkeit

Programmanalyse

  • Advanced Compiler Design and Implementation, Steven S. Muchnick, Morgan Kaufmann, 1997. Ein sehr gutes Buch zur statischen Programmanalyse von Compilern. Die Front- und Middleendtechniken spielen auch für die Programmanalyse für das Reengineering eine bedeutende Rolle.
  • Principles of Program Analysis, Flemming Nielson, Hanne Riis Nielson, Chris Hankin, Springer Verlag, Auflage: 2., 2004. Ein (relativ theoretisches) Buch zu vier Formen der Programmanalyse: Data Flow Analysis, Constraint Based Analysis, Abstract Interpretation und Type Inference.

Software-Visualisierung

  • Software Visualization, Stephan Diehl, Springer Verlag, 2007. Ein Buch zur Visualisierung von Software. Enthält alle Themen, die ich in der Vorlesung zur Software-Visualisierung vorstelle, und darüber hinaus noch Arbeiten zur Animation von Software. Nicht zu verwechseln mit dem gleichnamigen Buch zum Dagstuhl-Seminar Software Visualization: International Seminar Dagstuhl Castle, das Stephan Diehl herausgegeben hat und Beiträge vieler Forscher zusammenfasst.

Debugging



Alle Folien zur VorlesungPDFDer gesamte Foliensatz der Vorlesung in Form eines druckerfreundlicheren Handouts.
1. ÜbungsblattPDFÜbungsblatt zur statischen Analyse; wird am 21. Oktober 2013 gemeinsam bearbeitet.
2. ÜbungsblattPDFÜbungsblatt zu Kontrollfluss; wird in der Woche vom 2. November 2013 gemeinsam bearbeitet.
3. ÜbungsblattPDFÜbungsblatt zu Datenfluss; wird in der Woche vom 18. November 2013 gemeinsam bearbeitet.
4. ÜbungsblattPDFÜbungsblatt zu SSA und dynamische Analyse; wird am 25. November 2013 gemeinsam bearbeitet.
5. ÜbungsblattPDFÜbungsblatt zu Program-Slicing; wird am 5. Dezember 2013 gemeinsam bearbeitet.
6. ÜbungsblattPDFÜbungsblatt zu Metriken; wird am 12. Dezember 2013 gemeinsam bearbeitet.
7. ÜbungsblattPDFÜbungsblatt zu Klonen; wird am 17. Dezember 2013 gemeinsam bearbeitet.
8. ÜbungsblattPDFÜbungsblatt zu Softwareklonen; wird am 6. Januar 2013 gemeinsam bearbeitet.
9. ÜbungsblattPDFÜbungsblatt zu Clustering.
10. ÜbungsblattPDFÜbungsblatt zur formalen Begriffsanalyse
11. ÜbungsblattPDFÜbungsblatt zur Software-Visualsierung
12. ÜbungsblattPDFÜbungsblatt zur Code-Transformation
 



zurück  






Arbeitsgruppe

Forschung

Lehre

Publikationen

Service

Kontakt

 

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


SEITENINHALT DRUCKEN

LESEZEICHEN SETZEN

ENGLISH VERSION  






  SEITENANFANG
Hier geht es zur Homepage des Fachbereiches 03 der Universität Bremen Hier geht es zur Homepage der Informatik des Fachbereiches 03 der Universität Bremen Hier geht es zur Homepage der Universität Bremen