Methodische und Praktische Grundlagen der Informatik 3 Reengineering und Refactoring von Softwarearchitekturen Steffen Helke Technische Universität Berlin Fachgebiet Softwaretechnik WS 2008/2009
Lernziele? Wann sind Software-Architekturen veraltet? Wie wird ein Reengineering durchgeführt? Wobei kann Refactoring helfen?
Legacy-Systeme Reengineering Renovierung Neubau... umfaßt Aktivitäten zum Verstehen und Ändern eines Software-Systems, um es in neuer Form zu implementieren. Kosten vs. Nutzen Risikoabschätzung Aufwandsanalyse Kompromisse zwischen beiden Varianten Steffen Helke: MPGI-3 im WS0809 1 Reengineering Steffen Helke: MPGI-3 im WS0809 2 Reengineering-Prozess... umfaßt Aktivitäten zum Verstehen und Ändern eines Software-Systems, um es in neuer Form zu implementieren. Beispiel: Migration Anforderungen Modifizierte Anforderungen Windows-Umstellung Design Code Implementierung Code Steffen Helke: MPGI-3 im WS0809 2 Steffen Helke: MPGI-3 im WS0809 3
Reengineering-Prozess Architektur- Extraktion aus Quellcode Anforderungen Modifizierte Anforderungen Basis: Statische Mikro und Makro-Sicht Design Architektur Code Implementierung Code Steffen Helke: MPGI-3 im WS0809 3 Architektur- Steffen Helke: MPGI-3 im WS0809 4 Metriken und Visualisierung Extraktion aus Quellcode Basis: Statische Mikro und Makro-Sicht Modelle schnell unübersichtlich Interpretation über Metriken Veranschaulichung durch Visualisierung Beispiel: Bauhaus (Spin-Off Universität Stuttgart) Call-View (Methoden und deren Aufrufbeziehungen) Steffen Helke: MPGI-3 im WS0809 4 Steffen Helke: MPGI-3 im WS0809 5
Metriken und Visualisierung Refactoring Modelle schnell unübersichtlich Interpretation über Metriken Veranschaulichung durch Visualisierung... beschreibt die Veränderung der internen Struktur einer Software ohne das beobachtbare Verhalten zu ändern. Area Of Interest (AOIs) Vertrauenswürdige Komponenten Neue Komponenten (z.b. Version 2.3) Verbrauch > 1 MB Arbeitsspeicher Byelas et al. Proc. ACM SOFTVIS 06, ACM, 2006 Steffen Helke: MPGI-3 im WS0809 5 Refactoring Steffen Helke: MPGI-3 im WS0809 6 Einsatz von Refactoring... beschreibt die Veränderung der internen Struktur einer Software ohne das beobachtbare Verhalten zu ändern. Beispiel Restrukturierung Refactoring auf Architektur und Code-Ebene möglich Design Implementierung Restrukturierung Restrukturierung Ziel: Beseitigung von Bad Smells Zentrale Aktivität im extreme Programming Steffen Helke: MPGI-3 im WS0809 6 Steffen Helke: MPGI-3 im WS0809 7
Einsatz von Refactoring Bad Smells Beschreibung schlechter Strukturen in der Software Design Implementierung Restrukturierung Refactoring Refactoring Refactoring auf Architektur und Code-Ebene möglich Ziel: Beseitigung von Bad Smells Zentrale Aktivität im extreme Programming Gerüche existieren in Klassen, Packages, Subsystemen und Schichten Beispiele Zu große Module Unnötige Vererbung Zyklische Abhängigkeiten Zu starke Kopplung Zerbrochene Schichten Steffen Helke: MPGI-3 im WS0809 7 Bad Smell: Zu große Module Steffen Helke: MPGI-3 im WS0809 8 Bad Smell: Zu große Module Wann ist ein Modul zu groß? Sind Klassen mit 2000 Methoden sinnvoll? Student 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 Schreibt Klausur 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 Verleiht_Stipendium Benutzt Braucht Reserviert_für Konferenz 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 Benötigt Hörsaal 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 Qualität des Moduls Wann ist ein Modul zu groß? Sind Klassen mit 2000 Methoden sinnvoll? Verständlichkeit Wiederverwendbarkeit Größe des Moduls Student 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 Schreibt Klausur 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 Verleiht_Stipendium Benutzt Braucht Reserviert_für Konferenz 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 Benötigt Hörsaal 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 Steffen Helke: MPGI-3 im WS0809 9 Steffen Helke: MPGI-3 im WS0809 9
Modulgröße Modulgröße 30er Daumenregel (Obergrenze) Modul Elemente LOC Methode 30 30 Klasse 30 900 Package 30 27.700 Subsystem 30 810.000 System 30 24.3 Mio 30er Daumenregel (Obergrenze) Modul Elemente LOC Methode 30 30 Klasse 30 900 Package 30 27.700 Subsystem 30 810.000 System 30 24.3 Mio Beispiel Eclipse Modul Elemente LOC Methode 8 8 Klasse 7,2 60 Package 27 1641 Subsystem 9,6 15.552 System 48 746.496 Zahlen Durchschnittswerte von Eclipse 2.1 mit Default-Plug-ins Quelle: Rock et al. Refactoring in großen Softwareprojekten,dpunkt, 2004 Steffen Helke: MPGI-3 im WS0809 10 Bad Smell: Unnötige Vererbung Steffen Helke: MPGI-3 im WS0809 10 Bad Smell: Zyklische Abhängigkeiten Fehlende Redefinitionen reine Implementationsvererbung Refactoring: Ersetzen der Vererbung durch Delegation List +add +getsize +get OrderList Zyklen zwischen Submodulen Behindern Verständlichkeit, Testbarkeit und Entwurfsklarheit Refactoring: Verschieben von Klassen B A C +addorder +getorder Steffen Helke: MPGI-3 im WS0809 11 Steffen Helke: MPGI-3 im WS0809 12
Refactoring: Verschieben von Klassen Bad Smell: Zerbrochene Schichten Customer Order Defekte Aufgebrochene Hierarchie GUI Schicht Bestseller Product Zu starke Kopplung Zu viele Schichten Lösung: Einsatz großer Refactorings ( 1) Logische Schicht ( 3) ( 2) Customer Order Datenschicht Product Bestseller Steffen Helke: MPGI-3 im WS0809 13 Steffen Helke: MPGI-3 im WS0809 14 Durchführung großer Refactorings Durchführung großer Refactorings Herausforderungen Herausforderungen Auswirkung auf viele Systemteile Auswirkung auf viele Systemteile Dauer der Umsetzung oft mehrere Monate Qualität der Architektur Dauer der Umsetzung oft mehrere Monate Qualität der Architektur Qualitätsverlust temporär möglich Qualitätsverlust temporär möglich Refactoring Schritte Best Practices Dekomposition in feinere Refactorings Sorgfältige Planung im Projektteam Rücknahme von Refactorings einplanen Prüfen, ob Reenginierung für Teile sinnvoll ist Refactoring Schritte Steffen Helke: MPGI-3 im WS0809 15 Steffen Helke: MPGI-3 im WS0809 15
Können Sie diese Fragen beantworten? Was versteht man unter Reengineering? Nennen Sie Beispiele für Bad Smells in einer Software-Architektur? Wie können Bad Smells durch Refactoring behoben werden? Literatur M.Fowler: Refactoring: Improving the Design of Existing Code. Addison-Wesley, 2004. S.Rock, M.Lippert: Refactorings in großen Softwareprojekten. dpunkt-verlag, 2004. S.Demeyer, S.Ducasse, O.Nierstrasz: Object-Oriented Reengineering Patterns. Elsevier Science, 2003. Steffen Helke: MPGI-3 im WS0809 16