Vortrag 11: Reengineering - Refactoring Referenten: Christian Ecke, Joscha Menzel Univ.-Prof. em. Dr. H.-J. Hoffmann TU Darmstadt, Fachbereich Informatik 10.02.2002
Zum Inhalt Einleitung Was ist Reengineering? Forward Engineering Reverse Engineering Reengineering Einordnung in den Lebenszyklus von Software Wann ist Reengineering sinnvoll? Ziele Voraussetzungen
Einleitung Das erste Gesetz von Lehman Software, welche in einer realen Umgebung benutzt wird, muss verändert werden oder sie wird nach und nach unbrauchbar. Das zweite Gesetz von Lehman Bei der Weiterentwicklung einer Software wird deren Struktur immer komplexer, falls keine Maßnahmen ergriffen werden um dies zu vermeiden. Die Weiterentwicklung und Wartung von Software ist von entscheidender Bedeutung!
Was ist Reengineering? Forward Engineering Traditioneller Prozess der Entwicklung von einem hohen Abstraktionsniveau zu der fertigen Implementierung der Software Reverse Engineering Analyse einer vorhandenen Software um: Die einzelnen Komponenten und ihre Beziehungen festzustellen Neue Repräsentationen der Software auf höherem Abstraktionsniveau zu erstellen Der Startpunkt dieses Prozesses muss nicht die fertige Software sein Die Software selbst wird nicht verändert
Was ist Reengineering? Definition Unter Reengineering versteht man die Analyse und Modifizierung einer bestehenden Software mit dem Ziel diese zu erneuern und zu verbessern. Benutzte Verfahren Reverse Engineering (um eine abstraktere Beschreibung zu erhalten) Forward Engineering Refactoring
Einordnung in den Lebenszyklus
Wann ist Re-Engineering sinnvoll? Generell bei Wartung/Aktualisierung von großen Softwareprojekten Die Entwickler der Software sind nicht erreichbar, um Funktionalität zu erklären Hier ist besonders Software zu nennen, welche sich regelmäßig ändert Die Geschäftsmodelle vieler Unternehmen sind heute in Software implementiert (z.B.: Datenbanksysteme, etc.) Diese Modelle ändern sich in bestimmten Zeitintervallen und somit auch die Software
Ziele des Re-Engineering Anpassung des Systems an neue Anforderungen, welche zuvor nicht erfüllt waren Ein besseres Verständnis der Software erlangen, um einerseits die Wartung als auch andererseits die Weiterentwicklung zu vereinfachen Leichterer Umgang mit hoch komplexer Software Risiken der Softwareentwicklung verringern Senken von hohen Wartungs- und Entwicklungskosten (normalerweise 50-90% der Gesamtkosten)
Anforderungen für Re-Engineering Hilfe von Tools ist unverzichtbar Um abstraktere Beschreibungen einer Software zu erhalten (Disassembler, Recompiler, etc.) Um Refactoring durchzuführen Gut ausgebildetes Personal Einsatz von Regressionstests, um evtl. neu entstandene Fehler zu finden