Slide 1

Slide 1 text

.consulting .solutions .partnership Kontinuierliches Refactoring Markus Hanses

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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]

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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 … …

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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.

Slide 20

Slide 20 text

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“

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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)

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

.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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

1. [Fowler] 2. [Kerievsky] Empfehlenswerte Literatur © msg | Juni 2015 | Kontinuierliches Refactoring | Markus Hanses 31