29
Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG

Refactoring von Legacy Code

  • Upload
    paulos

  • View
    61

  • Download
    0

Embed Size (px)

DESCRIPTION

Refactoring von Legacy Code. Michael Kokonowskyj Thomas Schissler artiso AG. Ziele ?. Was soll durch Refactoring verbessert werden. Probleme in Legacy Code. Risiko durch Veränderung. Aufwand für neue Features. Nutzung neuer Technologien & Methoden. Ziele moderner Architektur. Wartbar. - PowerPoint PPT Presentation

Citation preview

Page 1: Refactoring von Legacy Code

Refactoring von Legacy Code

Michael KokonowskyjThomas Schissler

artiso AG

Page 2: Refactoring von Legacy Code

Ziele ?Was soll durch Refactoring verbessert werden

Page 3: Refactoring von Legacy Code

Aufwand für neue Features

Probleme in Legacy Code

Risiko durch Veränderung

Nutzung neuer Technologien & Methoden

Page 4: Refactoring von Legacy Code

Ziele moderner Architektur

Wartbar ErweiterbarTestbar

Page 5: Refactoring von Legacy Code

Wie ?Ansätze zur Verbesserung des Codes

Page 6: Refactoring von Legacy Code

Häufige Lösung - Greenfield

Page 7: Refactoring von Legacy Code

Refactoring – Renovierung des Codes

Page 8: Refactoring von Legacy Code

ArchitekturAnti-Patterns und wie es sein sollte

Page 9: Refactoring von Legacy Code

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

Trennung -Daten-Orchestrierung -Logik

Oberstes Ziel: Entkopplung

Sackgassen-methoden

Komponenten-orientierung IoCInterfaces

MVVM / MVC

Single Responsibility

POCOs

Page 11: Refactoring von Legacy Code

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

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

Komponentenorientierte Architektur

A B

Data ContractOperation Contract

Page 14: Refactoring von Legacy Code

Contracts Data Contract

Operation Contract

Page 15: Refactoring von Legacy Code

Implementierung Komponente

Page 16: Refactoring von Legacy Code

Klassische Struktur

SplitLine

DB

ReadData

Recognize

Integrations-TestSplitDigit

Recognize Digit Unit-Test

Integrations-Test

Integrations-Test

Integrations-Test

Page 17: Refactoring von Legacy Code

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

Inversion of Control (IoC)

Constructor Injection

Page 19: Refactoring von Legacy Code

StrategienRefactoring in der Praxis

Page 20: Refactoring von Legacy Code

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

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

Demo

Page 23: Refactoring von Legacy Code

Tipps & TricksSo funktionierts mit dem Refactoring

Page 24: Refactoring von Legacy Code

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

Die Mikado-MethodeGrid

ersetzen

Export Speichern-Methode

Neu berechnen

Validierung

Page 26: Refactoring von Legacy Code

FazitWas sollten sie mitnehmen?

Page 27: Refactoring von Legacy Code

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

Noch Fragen?

Page 29: Refactoring von Legacy Code

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