Refactoring von Legacy Code
Download
Report
Transcript Refactoring von Legacy Code
Refactoring von
Legacy Code
Michael Kokonowskyj
Thomas Schissler
artiso AG
Probleme in Legacy Code
Risiko durch
Veränderung
Aufwand für
neue Features
Nutzung
neuer
Technologien
& Methoden
Ziele moderner Architektur
Wartbar
Testbar
Erweiterbar
Häufige Lösung - Greenfield
Refactoring – Renovierung des Codes
Anti-Patterns
Redundanzen
UI-Componenten (z.B. Message-Boxen) im
Code verwenden
Zugriffe auf Ressourcen (z.B. Files) nicht
isolierbar
Zu viel Funktionalität in einer Methode
Starke Bindung zwischen Klassen
Oberstes Ziel: Entkopplung
Single
Responsibility
MVVM / MVC
POCOs
Sackgassenmethoden
Trennung
-Daten
-Orchestrierung
-Logik
Komponentenorientierung
IoC
Interfaces
Single Responsibility
Methoden sollten nur ein Funktionalität
implementieren
Es sollte genau einen Grund geben, eine
Methode zu ändern
Tests können diese atomare Logik gut
abprüfen
Abhängigkeiten zu Ressourcen
Problem: Wie kontrollieren wir die Abhängigkeiten
von Methoden
Warum ist das überhaupt problematisch?
Recognize
Unit-Test
–
–
–
–
1.) Aus File laden
2.) Split
3.) Recognize
Infrastrukturabhängigkeiten
Destruktive Tests
Hoher Initialisierungsaufwand
Simulation von Testfällen oft schwierig
File
Komponentenorientierte Architektur
Data Contract
Operation Contract
Contracts
Data Contract
Operation Contract
Implementierung
Komponente
Klassische Struktur
IntegrationsTest
Recognize
IntegrationsTest
SplitLine
IntegrationsTest
ReadData
DB
SplitDigit
Recognize Digit
IntegrationsTest
Unit-Test
Entkoppelte Struktur durch Orchestrierung
Integrations-Test
Recognize
DB
ReadData
SplitLine
SplitDigit
Recognize Digit
IntegrationsTest
Unit-Test
Unit-Test
Unit-Test
Inversion of Control (IoC)
Constructor Injection
Refactoring Best Practices
Kleine Schritte
– Häufig lauffähige Stände anstreben
– Mit einfachen und schnellen Ergebnissen beginnen
(Pfadfinder-Regel)
– Aus kleinen Bereichen lernen statt alles auf ein Mal umstellen
Testautomatisierung sofort mit umsetzen
– Überprüfung der Refaktoring-Ziele
– Sicherheit
Patterns extrahieren
– Für neue Funktionen lernen und im gesamten Team
kommunizieren
– Einheitliche Strukturen
Visualisierung
Kandidaten zu identifizieren
Komplexität abzuschätzen
Fortschritt transparent machen
Notwendige Anpassungen erkennen
Code Maps / Dependency Graph / Layer
Diagramm / Code Metrics
Demo
Die Mikado-Methode
Start
Refactoring
implementieren
Refactoring-Ziel
definieren
Anpassungen
übernehmen
Nein
Fehler?
Ja
Ziel
erreicht?
Nein
Fehler
dokumentieren
Ja
Fertig
Änderungen
rückgängig machen
Nächste Anpassung
identifizieren
Die Mikado-Methode
Export
Grid
ersetzen
SpeichernMethode
Validierung
Neu
berechnen
Zusammenfassung
Unit-Testing ist essentiell
Refactoring muss gewollt werden, von allen
Beteiligten
Refactoring ist eine kontinuierliche Aufgabe
Refactoring ist eine Investition, lohnt sich
aber
Dem Greenfield-Impuls wiederstehen,
Refactoring heute starten!
Kontakt
Vielen Dank
für ihre
Aufmerksamkeit
Thomas Schissler
artiso solutions GmbH
Oberer Wiesenweg 25
D - 89134 Blaustein
+49 7304 / 803-180
[email protected]
http://www.artiso.com
www.artiso.com/problog