Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kontinuierliches Refactoring

Kontinuierliches Refactoring

Eine Präsentation mit Live Coding Session. Gehalten am 11. Juni 2015 bei dem Workshop des Geschäftsbereich Travel & Logistics der msg.

Markus Hanses

June 14, 2015
Tweet

More Decks by Markus Hanses

Other Decks in Programming

Transcript

  1. Agenda © msg | Juni 2015 | Kontinuierliches Refactoring |

    Markus Hanses 2 1. Code Smell 2. Refactoring 3. Kontinuierliches Refactoring 4. Qualitätsinvestition 5. Live Coding 6. Fazit 7. Fragen und Diskussion
  2. 1 - 2 - 3 - 4 - 5 -

    6 - 7 Code Smell © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 3 Code Smell Refactoring Clean Code
  3. 1 - 2 - 3 - 4 - 5 -

    6 - 7 Was ist Code Smell? © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 4 1. Redundanter Code 2. Unklarer Code 3. Komplizierter Code “Wer gelernt hat seine Worte mit kritischem Abstand zu betrachten, wird feststellen, das selbst nach fünf- oder sechsmaligem Lesen jeder Zeile immer wieder neue Problembereiche zum Vorschein kommen.” [Barzun]
  4. 1 - 2 - 3 - 4 - 5 -

    6 - 7 1. [Kerievsky] Code Smell – Under Engineering1 © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 5 • Wie äußert sich das? − Datenstruktur und Entscheidungslogik ist schwer zu erkennen − Variablen und Funktionen haben irreführende Namen − Jeder spricht mit Jedem • Warum ist das so? − Geringes Wissen über Softwaredesign im Team vorhanden − Nicht genügend Zeit für durchdachtes Design
  5. 1 - 2 - 3 - 4 - 5 -

    6 - 7 1. [Kerievsky] Code Smell – Over Engineering1 © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 6 • Wie äußert sich das? − Kompliziertes Design erschwert das Hinzufügen neuer Features − Design dient keinem ersichtlichen Zweck • Warum ist das so? − Falsche Vorhersagen zur Notwendigkeit eines Designs sind gemacht worden − Teammitglieder sind Patternoholics / Patterns Happy
  6. 1 - 2 - 3 - 4 - 5 -

    6 - 7 Refactoring © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 7 Code Smell Refactoring Clean Code
  7. 1 - 2 - 3 - 4 - 5 -

    6 - 7 1. [WikiEvolvier] Was ist Refactoring? © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 8 • Was macht das? − Verändert die Struktur des Codes − Externes Verhalten bleibt unverändert • Wie macht es das? − Entfernen von Duplikaten − Vereinfachen komplizierter Logik und Datenstrukturen • Was habe ich davon? − Komplexität des Codes wird reduziert − Evolvierbarkeit1 wird gesteigert
  8. 1 - 2 - 3 - 4 - 5 -

    6 - 7 1. [Kerievsky] Refactoring weg von Code Smell, hin zu einem Pattern1 © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 9 Pattern No Pattern Code Smell Pattern
  9. 1 - 2 - 3 - 4 - 5 -

    6 - 7 1. [Kerievsky] Refactoring weg von einem Pattern, hin zu einem Anderen1 © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 10 Pattern No Pattern Code Smell Pattern
  10. 1 - 2 - 3 - 4 - 5 -

    6 - 7 1. [Kerievsky] Refactoring weg von einem Pattern1 © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 11 Pattern No Pattern Code Smell Pattern
  11. 1 - 2 - 3 - 4 - 5 -

    6 - 7 1. [Kerievsky] Typen des Refactorings1 © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 12 • Elementare Refactorings − Methode extrahieren − Methode verschieben − Algorithmus ersetzen − uvm. • Zusammengesetzte Refactorings − Bestehen aus einer Kombination elementarer Refactorings • Testgesteuerte Refactorings − Refactorings nach dem Prinzip von Test-driven Development
  12. 1 - 2 - 3 - 4 - 5 -

    6 - 7 1. [LosTechies] Refactoring Katalog1 © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 13
  13. 1 - 2 - 3 - 4 - 5 -

    6 - 7 1. [WikiTechDebt] Was ist kontinuierliches Refactoring? © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 14 • Was macht das? − Führt Refactorings regelmäßig durch • Wie macht es das? − Refactorings beschränken sich nicht auf den neu erwirtschafteten Code − Stellt das vorhandene Design in Frage • Was habe ich davon? − Reduziert die technischen Schulden1 im Code
  14. 1 - 2 - 3 - 4 - 5 -

    6 - 7 Kontinuierliches Refactoring – Ablauf © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 15 Feature realisiert Feature realisiert mit Code Smell Refactoring der Software (Beispielhafter Ablauf im Projekt) Code Smell Refactoring Clean Code Code Smell Refactoring Clean Code Code Smell Refactoring Clean Code … …
  15. 1 - 2 - 3 - 4 - 5 -

    6 - 7 1. [StatSVN] Kontinuierliches Refactoring – Statistik eines Softwaremoduls © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 16
  16. 1 - 2 - 3 - 4 - 5 -

    6 - 7 Qualitätsinvestition1 - Die neue Metapher © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 17 • Technische Schulden! Na und? − Es wurde ein Qualitätskompromiss eingegangen − Schulden sind nur dann ein Problem, wenn man sie zurückzahlen muss • Qualitätsinvestition − Sanierungskosten • Aufwand zur Beseitigung der Schulden − Nichtsanierungskosten • Aufwand zur Vermeidung einer Sanierung
  17. 1 - 2 - 3 - 4 - 5 -

    6 - 7 1. [MüllerWolf] Qualitätsinvestition1 – Beispielhafte Situationen im Projekt © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 18 SK NSK SK NSK SK - Sanierungskosten NSK - Nichtsanierungskosten ohne Refactorings mit Refactorings
  18. 1 - 2 - 3 - 4 - 5 -

    6 - 7 1. [Kerievsky] Live Coding – Von lange Methode hin zu Methode komponieren1 © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 19 Vorteile und Probleme + Teilt auf effiziente Weise mit, was eine Methode tut und wie sie es tut + Vereinfacht eine Methode, indem sie diese in wohlbenannte Verhaltensabschnitte desselben Detaillierungsgrads aufbricht - Kann zu einer Überzahl kleiner Methoden führen - Kann das Debuggen erschweren, da die Logik auf viele kleine Methoden verstreut ist.
  19. 1 - 2 - 3 - 4 - 5 -

    6 - 7 Live Coding – Von lange Methode hin zu Methode komponieren © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 20 „festhalten Leute“
  20. 1 - 2 - 3 - 4 - 5 -

    6 - 7 Live Coding – Von lange Methode hin zu Methode komponieren © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 21
  21. 1 - 2 - 3 - 4 - 5 -

    6 - 7 Live Coding – Verwendete Funktionen von Eclipse © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 22 • Unit Tests − Alle Tests laufen lassen (Alt+Shift+X, T) − Die letzten Tests noch einmal laufen lassen (Alt+Strg+R) • Refactoring − Code-Block nach unten bewegen (Alt+Pfeiltaste-Runter) − Konstante extrahieren (Alt+Shift+C) − Inline stellen (Alt+Shift+I) − Methode extrahieren (Alt+Shift+M) − Formatiere den Code (Strg+Shift+F) • Auswahl − Nächstes Element auswählen (Alt+Shift+Pfeiltaste-Rechts)
  22. 1 - 2 - 3 - 4 - 5 -

    6 - 7 1. [WikiTechDebt] 2. [WikiBroken] 3. [MüllerWolf] 4. [WikiEvolvier] 5. [WikiEvolution] Fazit - Was bringt mir kontinuierliches Refactoring? © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 23 • Sauberer Code wird geschrieben (Theorie der zerbrochenen Fenster)2 • Verständlicher Code wird geschrieben • Technische Schulden1 werden reduziert • Evolvierbarkeit4 der Software wird gesteigert • Sanierungskosten3 werden reduziert
  23. 1 - 2 - 3 - 4 - 5 -

    6 - 7 1. [WikipediaBroken] Fazit - Was macht kontinuierliches Refactoring erfolgreich? © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 24 • Wissen in folgenden Themenbereichen − Code Smells − Design Patterns (Verantwortungsvoller Umgang) − Refactoring Strategien − Funktionen der Entwicklungsumgebung • Common Code Ownership • Ausreichende Testabdeckung
  24. 1 - 2 - 3 - 4 - 5 -

    6 - 7 1. Quellle: https://twitter.com/agile_memes/status/579943058893991936 Fragen und Diskussionen © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 25
  25. .consulting .solutions .partnership Markus Hanses Senior IT Consultant +49 (0)

    173 / 6172920 [email protected] msg systems ag (Headquarters) Robert-Buerkle-Str. 1, 85737 Ismaning Germany www.msg-systems.com
  26. Glossar © msg | Juni 2015 | Kontinuierliches Refactoring |

    Markus Hanses 27 Englisch Deutsch Bugfixing Fehlverhalten beseitigen Code Smell Schwer zu verstehende und wartende Abschnitte im Quelltext Design Softwarearchitektur Design Pattern Entwurfsmuster Feature Funktionalität Over-engineered Unnötig komplexe Lösung Patternoholics / Patterns Happy Entwickler mit übertriebenem Bedürfnis zur Anwendung von Entwurfsmustern Refactoring Refaktorisierung Under-engineered Schlecht gestaltete Lösung
  27. Bibliografie 1/3 © msg | Juni 2015 | Kontinuierliches Refactoring

    | Markus Hanses 28 [97ThingsHunger] Michael Hunger, 97 Things Every Programmer Should Know (Continuous Refactoring), http://programmer.97things.oreilly.com/wiki/index.php/Continuous_Refactoring [Barzun] Jacques Barzun. Simple and Direct, vierte Auflage. HarperCollins, 2001 [Fowler] Martin Fowler. Refactoring. Addison-Wesley Verlag 2005 [FowlerRefactoring] Martin Fowler. Catalog of Refactorings. http://refactoring.com/catalog/ [Kerievsky] Joshua Kerievsky. Refactoring to Patterns. ADDISON-WESLEY. 2005
  28. Bibliografie 2/3 © msg | Juni 2015 | Kontinuierliches Refactoring

    | Markus Hanses 29 [LosTechies] Jimmy Bogard. Smells to refactorings quick reference guide. https://lostechies.com/jimmybogard/2007/09/10/smells-to-refactorings-quick-reference-guide/ [MüllerWolf] Felix Müller, Eberhard Wolff. Die neue Metapher. Heise 2013 http://www.heise.de/developer/artikel/Qualitaetsinvestitionen-statt-technischer-Schulden-2063864.html [StatSVN] StatSVN, Werkzeug zum Generieren von Statistiken für Subversion http://www.statsvn.org [WikiBroken] Wikipedia, Broken-Windows-Theorie, http://de.wikipedia.org/wiki/Broken-Windows-Theorie [WikiEvolution] Wikipedia. Evolutionäres Design, http://de.wikipedia.org/wiki/Evolution%C3%A4res_Design
  29. Bibliografie 3/3 © msg | Juni 2015 | Kontinuierliches Refactoring

    | Markus Hanses 30 [WikiEvolvier] Wikipedia. Evolvierbarkeit, http://de.m.wikipedia.org/wiki/Evolvierbarkeit [WikiRefactoring] Wikipedia. Refactoring. http://de.wikipedia.org/wiki/Refactoring [WikiTechDebt] Wikipedia. Technische Schuld. http://de.wikipedia.org/wiki/Technische_Schuld [WikiXP] Wikipedia. Extreme Programming, Praktiken. http://de.wikipedia.org/wiki/Extreme_Programming#Praktiken
  30. 1. [Fowler] 2. [Kerievsky] Empfehlenswerte Literatur © msg | Juni

    2015 | Kontinuierliches Refactoring | Markus Hanses 31