refactoring mit der mikado-methode - entwicklertag.de file2 © orientation in objects gmbh...

Post on 04-Aug-2019

230 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Orientation in Objects GmbH

Weinheimer Str. 68

68309 Mannheim

www.oio.de

info@oio.deVersion:

Refactoring mit der Mikado-Methode

1.0 1

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH

Abstract

2

Viele von uns haben tagtäglich mit Legacy-Code zu tun. Mal eben schnelletwas umzubauen, scheitert typischerweise an den fehlenden Tests,zudem ist der Quellcode oft überhaupt schlecht testbar.

In diesem Vortrag wird anhand von praktischen Codebeispielen gezeigt,wie man zunächst ein automatisiertes Sicherheitsnetz aufspannt.Anschließend werden komplexere Refactorings durchgeführt, ohnejedoch zu viele Baustellen gleichzeitig aufzureißen. Die Mikado-Methodehilft dabei, den Überblick zu behalten und in möglichst kleinen undnachvollziehbaren Schritten vorzugehen. Das Ziel ist das Aufbrechenstark gekoppelter Abhängigkeiten, um so neue Tests hinzufügen zukönnen. Zudem wird der Code besser lesbar sein und lässt sich so auchleichter warten und wiederverwenden.

2

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH

Ihr Sprecher

Trainer, Berater, Entwickler

3

Falk Sippach (@sippsack)

Architektur

Agile Softwareentwicklung

CodequalitätCo-Organisator

Commiter DukeCon

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 4

Foto von StockSnap: https://pixabay.com/de/codierung-gesch%C3%A4ft-arbeiten-macbook-699318/ (CC0 Public Domain Lizenz)

https://twitter.com/GeertjanW/status/796021888745144320

3

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 5

Legacy Code

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 6

Code ändern? Nur wie?

Brownfield-Projekt. Code von anderen.Fehlende Dokumentation, kaum Tests.Änderungen geraten außer Kontrolle.

4

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 7

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 8

Code

without tests

is bad code.Michael Feathers

5

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 9

Legacy code is valuable

code that we feel afraid to

change.

J. B. Rainsberger

Foto von PublicDomainPictures, CC0 Public Domain Lizenz, https://pixabay.com/de/menschen-abdeckung-schrei-314481/

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 10

Gründe für Refactoring

VerstehenFehler behebenNeues Feature

Optimierung

6

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 11

Toolunterstützung bei einfachen Refactorings

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 12

7

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 13

The Mikado Method is a structured way to make

significant changes to complex code.

… for performing changes to a system that's too large for analyze-then-edit, which means basically

any production system in the world.

(Ola Ellnestam, Daniel Brolund: "The Mikado Method")

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 14

8

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 15

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 16

9

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 17

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 18

10

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 19

Was ist die Mikado-Methode?

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 20

Mikado Methode für Dummies

Möbel rücken

11

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 21

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 22

12

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 23

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 24

13

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 25

The Mikado Method can help you visualize, plan, and

perform business value–focused improvementsover several iterations and increments of work, without ever having a broken codebase during the process.

(Ola Ellnestam, Daniel Brolund: "The Mikado Method")

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 26

Ola Ellnestam, Daniel Brolund: "The Mikado Method"

Ablauf im Großen:

14

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 27

Konkrete Aufgabe, z. B. User Story.

Auf Papier schreiben.

Mondscheinzeit-berechnungslogikverbessern

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 28

Direkt eine einfache Lösung ausprobieren.

Experimentieren statt analyisieren.

Hilfe durch Compiler und Tests.

15

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 29

Auftretende Fehler haben die Ursache in weiteren Abhängigkeiten.

Zu Schritt 8, wenn keine Fehler.

Vorsicht bei Laufzeitfehlern (Nullpointer).

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 30

Direkt sofortige Lösungen zu den Fehlern finden.

Überanalyisieren vermeiden.

Weiter zugrundeliegende Einschränkungen

werden in späteren Iterationen behandelt.

16

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 31

Lösung aufzeichnen und mit Vorgänger verbinden.

Wissen über das System aufbauen.

Mondscheinzeit-berechnungslogikverbessern

Unit-Test für Mondscheinzeit-berechnung schreiben

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 32

Bei Fehlern immer zurückrollen.

Weitere Bearbeitung auf kaputten Zustand sehr fehleranfällig.

Zurückgerollte Informationen stecken im Graph.

17

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 33

Nächste Vorbedingung auswählen und zu Schritt 2.

Immer mit sauberen System starten.

Nächste Vorbedingung naiv implementieren …

Mondscheinzeit-berechnungslogikverbessern

Unit-Test für Mondscheinzeit-berechnung schreiben

Mondscheinzeit-berechnung in eine eigene Methode

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 34

Vorbedingung abhaken, wenn keine Fehler mehr.

Committen, wenn es Sinn ergibt.

18

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 35

Mikado-Goal und alle Vorbedingungen erfüllt?

Fertig!

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 36

Ziel festlegen

Aus-probieren

Visua-lisieren

Rückgängigmachen

Mikado Driven Refactoring

1 2

3

4

19

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 37

Ziel festlegen

=

Startpunkt der Änderung.

Erfolgskriterium für Ende.

1

Mondscheinzeit-berechnungslogikverbessern

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 38

Ausprobieren

=

Experimentieren.

Hypothesen prüfen.

Sehen, was kaputt geht.

2

20

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 39

Visualisieren

=

Ziel und notwendige Vorbedingungen aufschreiben.

Mikado Graph erstellen.

3

Mondscheinzeit-berechnungslogikverbessern

Unit-Test für Mondscheinzeit-berechnung schreiben

Mondscheinzeit-berechnung in eine eigene Methode

Temporäre Variable verschieben

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 40

Rückgängig machen

=

Vorherigen funktionierenden

Stand wiederherstellen.

4

21

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 41

Ziel festlegen

Vorbedingungen

Ablauf im Kleinen:

1

2

3

4

Rückspulen (Redo)

Fertig

Start

x-mal

<<

Mondscheinzeit-berechnungslogikverbessern

Unit-Test für Mondscheinzeit-berechnung schreiben

Mondscheinzeit-berechnung in eine eigene Methode

Temporäre Variable verschieben

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 42

package de.oio.refactoring.badtelefon;

public class Kunde {

double gebuehr = 0.0;

Tarif tarif;

public Kunde(int tarifArt) {

this.tarif = new Tarif(tarifArt);

}

public void account(int minuten, int stunde, int minute)

{

boolean mondschein = false;

double preis = 0;

// Mondscheinzeit ?

if (stunde < 9 || stunde > 18)

mondschein = true;

// Gespraechspreis ermitteln

switch (tarif.tarif) {

case Tarif.PRIVAT:

[…]

}

gebuehr += preis;

}

public double getGebuehr() {

return gebuehr;

}

}

package de.oio.refactoring.badtelefon;

public class Tarif {

public final static int PRIVAT = 0;

public final static int BUSINESS = 1;

public final static int PROFI = 2;

int tarif = 0;

public Tarif(int tarif) {

this.tarif = tarif;

}

}

package de.oio.refactoring.badtelefon;

import java.util.Arrays;import java.util.Random;

public class TarifeRunner {public static void main(String args[]) {

Random random = new Random();for(Integer tarif : Arrays.asList(Tarif.PRIVAT, Tarif.BUSINESS, Tarif.PROFI)) {

System.out.println(String.format("\nVerarbeitung von Tarif %s", tarif));Kunde k = new Kunde(tarif);[..]

}}

22

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 43

Foto von StockSnap: https://pixabay.com/de/codierung-gesch%C3%A4ft-arbeiten-macbook-699318/ (CC0 Public Domain Lizenz)

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 44

Mondscheinzeit-berechnungslogikverbessern

Unit-Test für Mondscheinzeit-berechnung schreiben

Mondscheinzeit-berechnung in eine eigene Methode

Temporäre Variable verschieben

Mikado-Ziel festlegen

Experimentieren

VisualisierenZurückrollen

Experimentieren

Visualisieren

Experimentieren

Visualisieren

Zurückrollen

Zurückrollen

Experimentieren

Zurückspulen

23

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH

Mondscheinzeit-berechnungslogikverbessern

Unit-Test für Mondscheinzeit-berechnung schreiben

Mondscheinzeit-berechnung in eine eigene Methode

Temporäre Variable verschieben

45

Vorbedingungen

Rückspulen (Redo)

<<

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 46

Reale Legacy Projekte

24

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 47

Einfach loslegen?

Es fehlen automatisierte Tests!

Machen wir auch nichts kaputt?

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 48

25

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 49

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 50

public static void main(String... args) throws Exception {

WebDriver driver = new FirefoxDriver();

driver.get("http://www.retest.de");

while (true) {

List<WebElement> links = driver.findElements(By.tagName("a"));

links.get(random.nextInt(links.size())).click();

Thread.sleep(500);

List<WebElement> fields =

driver.findElements(By.xpath("//input[@type='text']"));

WebElement field = fields.get(random.nextInt(fields.size()));

field.sendKeys(randomString());

Thread.sleep(500);

}

}https://entwicklertag.de/frankfurt/2016/sites/entwicklertag.de.frankfurt.2016/files/slides/Bei%20uns%20testen%20lauter%20Affen_0.pdf

1

23

4

26

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 51

Foto von StockSnap: https://pixabay.com/de/codierung-gesch%C3%A4ft-arbeiten-macbook-699318/ (CC0 Public Domain Lizenz)

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 52

27

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 53

Fazit

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 54

Vorteile

Stabiles System trotz Änderungen.

Bessere Kommunikation und Zusammenarbeit.

Leichtgewichtig und fokussiert.

28

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 55

Wann nutzen?

Architektur im Betrieb verbessern.

Brownfield Entwicklung.

Refactoring Projekt.

1

2

3

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH

1

56

Architektur im Betrieb verbessern

In kleinen Schritten verbessern.

Im gleichen Branch neue Features kontinuierlich ausliefern.

29

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH

2

57

Brownfield Entwicklung

Häufige Situation.

Existierende Anwendungen verbessern.

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH

3

58

Refactoring Projekt

Langdauernde Verbesserung.

Eigener Branch.

30

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 59

Angst vorm Revert:

Reverting scheint wie Wegwerfen.

Aber Mikado-Graph enthält Infos.

Wissensaufbau/-transfer überSystem, Domäne, Technologie.

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 60

Stash (Git)

Patch-File (SVN, …)

Angst vorm Revert: Änderungen doch aufheben

31

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 61

Arbeitsmittel:

Whiteboard/Flipchart/Papier

Mindmap

Visio, yEd

1

2

3

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 62

1

32

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 63

2

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 64

3

33

Refactoring mit der Mikado-Methode© Orientation in Objects GmbH 65

Orientation in Objects GmbH

Weinheimer Str. 68

68309 Mannheim

www.oio.de

info@oio.de

Vielen Dank für Ihre

Aufmerksamkeit!

34

Code Quality in Practice© Orientation in Objects GmbH

top related