29
Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Embed Size (px)

Citation preview

Page 1: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Refactoring von Legacy Code

Michael KokonowskyjThomas Schissler

artiso AG

Page 2: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Ziele ?Was soll durch Refactoring verbessert werden

Page 3: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Aufwand für neue Features

Probleme in Legacy Code

Risiko durch Veränderung

Nutzung neuer Technologien & Methoden

Page 4: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Ziele moderner Architektur

Wartbar ErweiterbarTestbar

Page 5: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Wie ?Ansätze zur Verbesserung des Codes

Page 6: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Häufige Lösung - Greenfield

Page 7: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Refactoring – Renovierung des Codes

Page 8: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

ArchitekturAnti-Patterns und wie es sein sollte

Page 9: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

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

Page 10: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Trennung -Daten-Orchestrierung -Logik

Oberstes Ziel: Entkopplung

Sackgassen-methoden

Komponenten-orientierung IoCInterfaces

MVVM / MVC

Single Responsibility

POCOs

Page 11: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

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

Page 12: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Abhängigkeiten zu Ressourcen Problem: Wie kontrollieren wir die

Abhängigkeiten von Methoden Warum ist das überhaupt problematisch?

– Infrastrukturabhängigkeiten– Destruktive Tests– Hoher Initialisierungsaufwand– Simulation von Testfällen oft schwierig

Recognize1.) Aus File laden2.) Split3.) Recognize

FileUnit-Test

Page 13: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Komponentenorientierte Architektur

A B

Data Contract

Operation Contract

Page 14: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Contracts Data Contract

Operation Contract

Page 15: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Implementierung

Komponente

Page 16: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Klassische Struktur

SplitLine

DB

ReadData

Recognize

Integrations-TestSplitDigit

Recognize Digit Unit-Test

Integrations-Test

Integrations-Test

Integrations-Test

Page 17: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Entkoppelte Struktur durch Orchestrierung

SplitLine

DB

Unit-Test

ReadData

Recognize

Integrations-Test

Unit-Test

SplitDigit Recognize Digit

Unit-TestIntegrations-

Test

Page 18: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Inversion of Control (IoC)

Constructor Injection

Page 19: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

StrategienRefactoring in der Praxis

Page 20: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

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

Page 21: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Visualisierung

Kandidaten zu identifizieren Komplexität abzuschätzen Fortschritt transparent machen Notwendige Anpassungen erkennen

Code Maps / Dependency Graph / Layer Diagramm / Code Metrics

Page 22: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Demo

Page 23: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Tipps & TricksSo funktionierts mit dem Refactoring

Page 24: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Die Mikado-Methode

Refactoring-Ziel definieren

Refactoring implementieren

Fehler?

Fehler dokumentieren

Änderungen rückgängig machen

Nächste Anpassung identifizieren

Anpassungen übernehmen

Ziel erreicht?

Fertig

Start

Nein

Ja

Ja

Nein

Page 25: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Die Mikado-Methode

Grid ersetzen

Export Speichern-Methode

Neu berechnen

Validierung

Page 26: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

FazitWas sollten sie mitnehmen?

Page 27: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

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!

Page 28: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Noch Fragen?

Page 29: Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Kontakt

Vielen Dank für ihre Aufmerksam-keit

Thomas Schisslerartiso solutions GmbHOberer Wiesenweg 25D - 89134 Blaustein

+49 7304 / 803-180 [email protected]://www.artiso.comwww.artiso.com/problog