Download - Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG.

Transcript
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