Refactoring in kleinen und großen Projekten



Ähnliche Dokumente
Refactorings in großen Softwareprojekten

Think Agile Refactorings in großen Softwareprojekten

Dokumentenverwaltung im Internet

Statuten in leichter Sprache

Workshop. Zeitmanagement Hamburg, 24. November 2004

Projektmanagement in der Spieleentwicklung

Testen mit JUnit. Motivation

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Einführung in die Programmierung

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Nicht kopieren. Der neue Report von: Stefan Ploberger. 1. Ausgabe 2003

Welche Gedanken wir uns für die Erstellung einer Präsentation machen, sollen Ihnen die folgende Folien zeigen.

Buchhaltung mit WISO EÜR & Kasse 2011

Deutsches Rotes Kreuz. Kopfschmerztagebuch von:

Arbeiten mit UMLed und Delphi

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

Flyer, Sharepics usw. mit LibreOffice oder OpenOffice erstellen

Wie Sie mit Mastern arbeiten

Zwischenablage (Bilder, Texte,...)

Kapitel 4 Die Datenbank Kuchenbestellung Seite 1

Informationen zum neuen Studmail häufige Fragen

Protect 7 Anti-Malware Service. Dokumentation

Erfahrungen mit Hartz IV- Empfängern

4 Ideen zur Verbesserung des -Marketings!

Papierverbrauch im Jahr 2000

Anleitung über den Umgang mit Schildern

AutoCAD Dienstprogramm zur Lizenzübertragung

Info zum Zusammenhang von Auflösung und Genauigkeit

Speicher in der Cloud

Schuljahreswechsel im Schul-Webportal

Informationsblatt Induktionsbeweis

TESTEN SIE IHR KÖNNEN UND GEWINNEN SIE!

Lernerfolge sichern - Ein wichtiger Beitrag zu mehr Motivation

VibonoCoaching Brief -No. 18

Die SPD und die Grünen machen im Niedersächsischen Landtag. Alle Menschen sollen in der Politik mitmachen können.

ONLINE-AKADEMIE. "Diplomierter NLP Anwender für Schule und Unterricht" Ziele

Gesundheits-Coaching I Akut-Programme bei Erschöpfung I Gesunder Schlaf I Ernährungs-Umstellung I Mentale Stärke I Gutes Körpergefühl

Kurzanleitung für Verkäufer

Grundlagen der Theoretischen Informatik, SoSe 2008

Welches Übersetzungsbüro passt zu mir?

Persönliche Zukunftsplanung mit Menschen, denen nicht zugetraut wird, dass sie für sich selbst sprechen können Von Susanne Göbel und Josef Ströbl

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Mehr Transparenz für optimalen Durchblick. Mit dem TÜV Rheinland Prüfzeichen.

Wie melde ich meinen Verein bei BOOKANDPLAY an?

Österreichische Trachtenjugend

Serienbriefe mit Word. [Geben Sie den Untertitel des Dokuments ein] Computeria Rorschach

HANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG

Platinen mit dem HP CLJ 1600 direkt bedrucken ohne Tonertransferverfahren

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

Dokumentation Schedulingverfahren

Professionelle Seminare im Bereich MS-Office

AutoTexte und AutoKorrektur unter Outlook verwenden

SEP 114. Design by Contract

Welche Bereiche gibt es auf der Internetseite vom Bundes-Aufsichtsamt für Flugsicherung?

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

ecaros2 - Accountmanager

Ist Excel das richtige Tool für FMEA? Steve Murphy, Marc Schaeffers

Java: Vererbung. Teil 3: super()

Fotogalerie mit PWGallery in Joomla (3.4.0) erstellen

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

15 Social-Media-Richtlinien für Unternehmen!

Objektorientierte Programmierung

Version smarter mobile(zu finden unter Einstellungen, Siehe Bild) : Gerät/Typ(z.B. Panasonic Toughbook, Ipad Air, Handy Samsung S1):

Wie halte ich Ordnung auf meiner Festplatte?

Arbeitsblätter. Sinnvolle Finanzberichte. Seite 19

Informationssystemanalyse Problemstellung 2 1. Trotz aller Methoden, Techniken usw. zeigen Untersuchungen sehr negative Ergebnisse:

Einführung in die Java- Programmierung

Viele Bilder auf der FA-Homepage

GEVITAS Farben-Reaktionstest

Primzahlen und RSA-Verschlüsselung

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.)

S/W mit PhotoLine. Inhaltsverzeichnis. PhotoLine

Mobile Intranet in Unternehmen

Excel Auswertungen in XAuftrag / XFibu

Einrichten einer mehrsprachigen Webseite mit Joomla (3.3.6)

Handbuch. Artologik EZ-Equip. Plug-in für EZbooking version 3.2. Artisan Global Software

Örtliche Angebots- und Teilhabeplanung im Landkreis Weilheim-Schongau

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

PocketPC.ch Review. SBSH ilauncher 3.1. Erstelldatum: 3. Dezember 2007 Letzte Änderung: 3. Dezember PocketPC.ch_Review_iLauncher.

Kulturelle Evolution 12

Diese Anleitung wurde erstellt von Niclas Lüchau und Daniel Scherer. Erste Anmeldung. Schritt 1: Anmeldung..2. Schritt 2: Passwort setzen 3

DIE SICHERE ENTSCHEIDUNG!

Pflegeberichtseintrag erfassen. Inhalt. Frage: Antwort: 1. Voraussetzungen. Wie können (Pflege-) Berichtseinträge mit Vivendi Mobil erfasst werden?

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Die Entwicklung eines Glossars (oder eines kontrollierten Vokabulars) für ein Unternehmen geht üblicherweise in 3 Schritten vor sich:

CAQ Software für Ihr Qualitätsmanagement. Ablauf für die Erfassung der Fehler in der Fertigung

Liebe Interessierte an technischen Lösungen für die Sicherheit zu Hause,

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Mediator 9 - Lernprogramm

Programmieren in Java

Interpretation des agilen Manifest

Feiertage in Marvin hinterlegen

Inhalt. 1. Einleitung Seite Schritt für Schritt Seite Tipps und Tricks Seite 6

Fehler und Probleme bei Auswahl und Installation eines Dokumentenmanagement Systems

teamsync Kurzanleitung

Wie Sie mit einer Website tausend Geräte bespielen und das auch tun sollten

Nützliche Tipps für Einsteiger

Zahlen auf einen Blick

Transkript:

Refactoring in kleinen und großen Projekten Dipl.-Informatiker Martin Lippert Senior IT-Berater martin.lippert@it-agile.de Dipl.-Informatiker Andreas Havenstein Softwareentwickler andreas.havenstein@it-agile.de http://www.it-agile.de

Über uns Martin Lippert martin.lippert@it-agile.de Senior IT-Berater bei it-agile GmbH in Hamburg Schwerpunkt-Gebiete Software-Architektur Agile Softwareentwicklung Eclipse-Technologie Refactoring Aspektorientierte Programmierung Andreas Havenstein andreas.havenstein@it-agile.de Softwareentwickler bei it-agile GmbH in Hamburg Schwerpunkt-Gebiete Agile Softwareentwicklung Refactoring J2EE WJAX 2005-16.11.2005 http://www.it-agile.de 2

Überblick Die Idee Eine kurze Einführung zum Thema Refactoring Sicherheitsnetze beim Refactoring Die Realität Refactoring in der Praxis Die Herausforderungen im Kleinen Das tägliche Refactoring Tipps & Tricks Die Herausforderungen im Großen Warum sind größere Refactorings anders als kleine? Best Practices Die Werkzeuge Probleme und Ergebnisse analysieren Das Geheimnis Fazit Think!!! - Refactorings zusammensetzen WJAX 2005-16.11.2005 http://www.it-agile.de 3

Was ist Refactoring? A change made to the internal structure of software to make it easier to unterstand and cheaper to modify without changing its observable behavior [Fowler 99] Häufig deuten Code-Smells auf nötige Refactorings hin. Code-Smells sind Defizite, die auf Schwachstellen hinweisen, z.b.: zu lange Methoden zu große Klassen zyklische Beziehungen WJAX 2005-16.11.2005 http://www.it-agile.de 4

Refactoring: Eine kurze Einführung Refactoring ist die Umstrukturierung eines Softwaresystems unter Beibehaltung seiner Funktionalität. Nicht jede Änderung ist ein Refactoring. Definition ist kontextabhängig. Beispielweise verändert fast jede Änderung am Code sein Laufzeitverhalten. Aber: Meistens liegt der Schwerpunkt auf der fachlichen Funktionalität (was der Benutzer an der Oberfläche sieht) Eine wichtige Frage: Wie stellen wir sicher, dass ein Refactoring nicht aus versehen die Funktionalität verändert? WJAX 2005-16.11.2005 http://www.it-agile.de 5

Sicherheitsnetz Unit-Tests Die Funktionalität wird durch Unit-Tests geprüft: Vor und nach einem Refactoring müssen alle Unit-Tests durchlaufen Unit-Tests fungieren als Sicherheitsnetz für das Refactoring Ohne Unit-Tests ist es sehr unsicher, Refactorings durchzuführen Unit-Tests sind eine Voraussetzung für Refactorings!!! Aber was tun, wenn keine Unit-Tests vorhanden sind? Zuerst schrittweise Unit-Tests implementieren Dann Refactoring durchführen WJAX 2005-16.11.2005 http://www.it-agile.de 6

Sicherheitsnetz IDE Automatisierte Refactorings von der IDE sichern zu, dass das Verhalten der Software nicht verändert wird. Eclipse oder IDEA sind diesbezüglich recht umfangreich Aber Vorsicht: Auch diese sehr fortgeschrittenen IDEs können Fehler enthalten, komplizierte Zusammenhänge ggf. nicht erkennen und nicht wirklich sicherstellen, dass sich das Verhalten der Software nicht verändert Rename und Move sind sicher Extract Method beispielsweise kann schon problematisch werden Beispiel WJAX 2005-16.11.2005 http://www.it-agile.de 7

Extract Method und Inner Classes Ein kleines Beispiel WJAX 2005-16.11.2005 http://www.it-agile.de 8

Sicherheitsnetz Akzeptanztests Unter Umständen müssen Unit-Tests an Veränderungen im Code angepasst werden. Wie können sie dann noch als Sicherheitsnetz fungieren? Wenn die Unit-Tests mit Laufe des Refactorings verändert werden müssen, können sich Fehler einschleichen Wir nutzen Akzeptanztests, um Refactorings auf höherer Ebene abzusichern. Z.B. Akzeptanztests mit FIT oder Fitnesse WJAX 2005-16.11.2005 http://www.it-agile.de 9

Generelle Prinzipien Refactoring wird in Mikro-Schritten ausgeführt. Diese Schritte können als Mechanics formuliert werden Siehe Mechanics in [Fowler 99] System ist nach jedem Mikro-Schritt lauffähig!!! Kontinuierliche Integration. Aber es gibt Ausnahmen (z.b. Rename Class ohne Automatisierung) Daher Sichere Refactorings - während der Mechanics können keine Compilefehler auftreten. Unsichere Refactorings - während der Mechanics kann das System zerbrechen. WJAX 2005-16.11.2005 http://www.it-agile.de 10

Refactoring in der Praxis Das Ideal: Bevor eine neue Anforderung implementiert wird, zuerst prüfen, ob die Struktur für die neue Anforderung geeignet ist. Wenn nicht: Refactoring Anforderung implementieren. Dabei ggf. weitere Refactorings. Nach Implementierung des Refactorings prüfen, ob die Struktur noch sauber ist. Wenn nicht: Refactoring. Beobachtung: Refactorings werden viel zu selten durchgeführt. Warum? Ist doch egal? Mangelnde Disziplin? Aufgeschobene Refactorings werden immer größer? Keine Testcases, um Refactorings zu überprüfen? Kein Sicherheitsnetz? WJAX 2005-16.11.2005 http://www.it-agile.de 11

Folgen Die Struktur des Systems degeneriert und es wird immer schwieriger, Refactorings durchzuführen Die nötigen Refactorings werden immer größer und damit auch risikoreicher Refactoring ist heute elementarer Bestandteil der Softwareentwicklung!!! WJAX 2005-16.11.2005 http://www.it-agile.de 12

Besser viele kleine Refactorings Häufig kleine Refactorings durchzuführen ist nicht schwer: Das braucht wenig Zeit Ist häufig gut unterstützt durch moderne IDEs Ist besser als selten größere Refactorings durchzuführen Refactorings möglichst durch die IDE erledigen lassen!!! WJAX 2005-16.11.2005 http://www.it-agile.de 13

No Refactoring by Copy&Paste Refactoring mit Copy&Paste gehört der Vergangenheit an!!! WJAX 2005-16.11.2005 http://www.it-agile.de 14

Interessante Effekte Z. B. Methode aus einem Interface umbenennen «Interface» ICustomerService getcustomer(int customerno) «Interface» IAccountService getcustomer(int customerno) CustomerService getcustomer(int customerno) AccountService getcustomer(int customerno) Rename Method an dieser Stelle verändert auch den Methodennamen WJAX 2005-16.11.2005 http://www.it-agile.de 15

Trotzdem große Refactorings? Viele kleine Refactorings sind gut und unersetzbar. Sie dienen uns auch dazu, die Architektur des Systems weiter zu entwickeln. Können trotzdem größere Refactorings nötig werden? Ja! Missverständnis: Um Architektur muss man sich bei agilen Methoden nicht kümmern. Zeitdruck. Aufgeschobene kleine Refactorings. Prototyp wird produktiv. Unvollständiges/inkonsistentes Bild der Anforderungen. System sehr groß und unübersichtlich. Zu viele Entwickler im Team. Jeder macht mal Fehler. WJAX 2005-16.11.2005 http://www.it-agile.de 16

Architektur-Smells und große Refactorings In größeren Projekten entstehen häufig strukturelle Probleme, so genannte Architektur-Smells. Architektur-Smells sind potenzielle Defizite in den Beziehungen zwischen Paketen, Modulen, Klassen. Unsere Erfahrung: Jedes größere Projekt hat Architektur-Smells. (Größeres Projekt: mehr als 6 Entwickler, länger als 6 Monate) Große Refactorings helfen, Architektur-Smells zu beseitigen. WJAX 2005-16.11.2005 http://www.it-agile.de 17

Beispiel für Architektur-Smell: Zyklen WJAX 2005-16.11.2005 http://www.it-agile.de 18

Weitere Architektur-Smells Parallele Vererbungshierarchien Falsche Verwendung von Vererbung Zyklen zwischen Klassen, Packages, Subsystemen, Schichten Technologie auf Vorrat, Übergeneralisierung Unbenutzter Code zu viele Abhängigkeiten zu Basisklassen keine Subsysteme, Schichten zu große Packages, Subsysteme, Schichten Subsystem-API umgangen Subsystem-API zu groß Schichtung durchbrochen... WJAX 2005-16.11.2005 http://www.it-agile.de 19

Architektur-Smells finden Selbst Entwickeln Was ist im Weg? Entwicklern zuhören: Das hier nervt, aber wir haben keine Zeit, das umzustellen. Das hier passt überhaupt nicht, aber wenn wir das umstellen, laufen wir Gefahr, alles kaputt zu machen. Tools zur Architekturanalyse, z.b. Sotograph (http://www.sotograph.de). XRadar (http://xradar.sourceforge.net) Dr. Freud (http://www.freiheit.com)... Weitere Tools, z.b. JDepend PMD Checkstyle... WJAX 2005-16.11.2005 http://www.it-agile.de 20

Große Refactorings: Charakterisierung dauern länger als ein Tag führen zu Änderungen an vielen Systemteilen betreffen mehr als einen Entwickler / ein Pair großes Refactoring muss zerlegt werden mehr als eine Liste kleiner Refactorings enthalten häufig unsichere Refactorings die Folgen der Einzelschritte lassen sich nur schwer absehen großes Refactoring muss explizit geplant werden Zwischenschritte müssen integriert werden zerbrechen häufig Unit-Tests es muss schlechter werden, bevor es besser werden kann (Umleitungen) WJAX 2005-16.11.2005 http://www.it-agile.de 21

Große Refactorings: Ein Schritt zurück, zwei vor :-) Design-Verbesserung Refactoring-Schritte WJAX 2005-16.11.2005 http://www.it-agile.de 22

Große Refactorings: Probleme man läuft schnell in Sackgassen wegen Interferenzen mit restlicher Entwicklung kann man nicht einfach so zurück man verliert schnell den Überblick die Planung ist sehr schwierig Sicherheit wg. Zerbrochenen Unit-Tests reduziert unter Projektdruck neigen Refactorings zum Versanden auf halbem Wege abgebrochene Refactorings verschlechtern die Systemstruktur statt sie zu verbessern WJAX 2005-16.11.2005 http://www.it-agile.de 23

Probleme lösen Best Practices: Immer schön refaktorisieren, wenn einem etwas auffällt Refactoring-Tools ausgiebig nutzen (da schlummern viele Features, die noch gar nicht richtig eingesetzt werden) Tools zum Identifizieren von Schwächen nutzen (möglichst auch ständig bei der Entwicklung) Nicht vor Refactorings zurückschrecken, aber vorher Tests bauen Refactorings im Team diskutieren Patterns und Practices für große Refactorings WJAX 2005-16.11.2005 http://www.it-agile.de 24

Best Practices: Einplanung von großen Refactorings Refactorings explizit in den Planungsprozess einbeziehen Refactoring-Budget pro Iteration Refactoring-Iterationen bei Bedarf Regelmäßige Refactoring-Iterationen WJAX 2005-16.11.2005 http://www.it-agile.de 25

Best Practices: Refactoring-Planungs- Session Refactoring-Planungs-Session Größere Refactorings mit dem gesamten Team diskutieren und planen Spannungsfeld: Upfront-Design vs. Refactoring-Planung WJAX 2005-16.11.2005 http://www.it-agile.de 26

Best Practices: Refactoring-Pläne Refactoring-Pläne erstellen Refactoring-Route aufschreiben Refactoring-Plan prominent veröffentlichen Refactoring-Plan als Tracking-Instrument nutzen Unsichere Refactoring-Schritte kennzeichnen Unsichere Refactoring-Schritte nach Möglichkeit an den Anfang stellen WJAX 2005-16.11.2005 http://www.it-agile.de 27

Best Practices: Umleitungen Umleitungen Um ein Refactoring in kleine Schritte zu zerlegen, müssen häufig Umleitungen in den Code eingebaut werden. So kann ein Refactoring schrittweise durchgeführt werden und das System ist trotzdem immer lauffähig. Umleitungen müssen aber als solche gekennzeichnet werden. Z.B. mit deprecated Tag. WJAX 2005-16.11.2005 http://www.it-agile.de 28

Best Practices: Safe-Points Safe-Points Refactoring in kleine Schritte zerlegen Nicht nach jedem kleinen Schritt wird die Struktur des Systems besser (Umleitungen) Safe-Point definieren: nach welchen Schritten hat das System einen verbesserten Stand erreicht, aber noch nicht das endgültige Design Design-Verbesserung Refactoring-Schritte WJAX 2005-16.11.2005 http://www.it-agile.de 29

Best Practices: Branches Branches und Safe-Points Branches nicht für das komplette Refactoring (Merge-Aufwände würden zu groß werden) Stattdessen Branches jeweils bis zu einem definieren Safe-Point durchführen und dann mergen WJAX 2005-16.11.2005 http://www.it-agile.de 30

Best Practices: Inline Method 1/3 Inline Method Wir können uns das von vielen IDEs automatisierte Inline-Method-Refactoring zu Nutze machen, um Umleitungen (teilweise) aufzulösen Neue Struktur steht neben der alten Struktur. Die alte Struktur wird auf Basis der neuen Struktur implementiert. Anschließend wird diese Implementation inlined. Siehe: Tammo Freese: Inline Method Considered Helpful. WJAX 2005-16.11.2005 http://www.it-agile.de 31

Best Practices: Inline Method 2/3 /** * @deprecated use druckedokument instead */ public void drucke (String dok) { druckedokument(new Dokument(dok)); } public void druckedokument (Dokument obj) {... implementation... }... String meindokument =...;... meindrucker.drucke(meindokument);... WJAX 2005-16.11.2005 http://www.it-agile.de 32

Best Practices: Inline Method 3/3 /** * @deprecated use druckedokument instead */ public void drucke (String dok) { druckedokument(new Dokument(dok)); } public void druckedokument (Dokument obj) {... implementation... }... String meindokument =...;... meindrucker.druckedokument(new Dokument(meinDokument));... WJAX 2005-16.11.2005 http://www.it-agile.de 33

Toolunterstützung für große Refactorings Mit XRadar die Architektur definieren und kontrollieren ( keep the graph green to keep the code clean ) <radar-config> <subsystems> <subsystem id= Automat level= 1 > <included-packages> <package-root value= myprj.automat /> </included-packages> <legal-subordinates> <subsystem id= Services /> </legal-subordinates> </subsystem> <subsystem id= Services level= 2 > <included-packages> <package-root value= myprj.services /> </included-packages> <legal-subordinates> </legal-subordinates> </subsystem>... WJAX 2005-16.11.2005 http://www.it-agile.de 34

Toolunterstütztes Refactoring: Einfaches Beispiel Mit Move-Refactorings eine saubere Architektur herstellen Drag & Drop-Refactoring in Eclipse WJAX 2005-16.11.2005 http://www.it-agile.de 35

Toolunterstütztes Refactoring: Komplexeres Beispiel Zyklische Package-Beziehungen lassen sich wegen starker Kopplung meist nicht mit einfachen Move-Refactorings auflösen. Auflösen verbotener Beziehungen durch lose Kopplung Mechanics: 1. Extract Interface auf EditorNumberConverter 2. Move Interface: Das NumberConverterInterface verschieben ins Service-Package 3. Introduce Factory auf dem Konstruktor von EditorNumberConverter 4. Factory-Methode auf Lookup ändern 5. Inline Method: Lookup 6. Move Class: SAPHelper verschieben WJAX 2005-16.11.2005 http://www.it-agile.de 36

1. Extract Interface Extract Interface auf EditorNumberConverter ausführen. WJAX 2005-16.11.2005 http://www.it-agile.de 37

2. Move Interface Beziehung zu der konkreten Implementationsklasse ist auch nach Extract Interface und Move Interface vorhanden. Struktur temporär schlechter als vor dem Refactoring! public class SAPHelper { public SAPHelper() { _nc = new EditorNumberConverter(); } } NumberConverter _nc; WJAX 2005-16.11.2005 http://www.it-agile.de 38

3. Introduce Factory Eine Factory-Methode hilft, das Erzeugen von der konkreten Erzeugungsstrategie zu entkoppeln. public class EditorNumberConverter implements NumberConverter { public static NumberConverter createnumberconverter(){ return new EditorNumberConverter(); } } private EditorNumberConverter(){ } public class SAPHelper { public SAPHelper() { _nc = EditorNumberConverter.createNumberConverter(); } } NumberConverter _nc; WJAX 2005-16.11.2005 http://www.it-agile.de 39

4. Lookup-Erzeugungsstrategie Vollständige Entkopplung von der konkreten Implementationsklasse wird erreicht durch Verwendung eines Registry/Container-Lookups. Registries stellen beispielsweise das PicoContainer- oder Spring-Framework bereit. Konkrete Implementationen zu Interfaces können dort registriert werden. public class EditorNumberConverter implements NumberConverter { public static NumberConverter createnumberconverter(){ return (NumberConverter)Container.lookup(NumberConverter.class); } } private EditorNumberConverter(){ } WJAX 2005-16.11.2005 http://www.it-agile.de 40

5. Inline Method Die Aufrufe an der konkreten Factory können jetzt ersetzt werden durch die entkoppelten Lookups. Durch Inline Method wird der Factory-Methoden-Aufruf durch den auf den Interfaces basierenden Lookup ersetzt. public class SAPHelper { public SAPHelper() { _nc = (NumberConverter)Container.lookup(NumberConverter.class); } } NumberConverter _nc; WJAX 2005-16.11.2005 http://www.it-agile.de 41

6. Move Class Abschließend kann die entkoppelte Klasse einfach verschoben werden. WJAX 2005-16.11.2005 http://www.it-agile.de 42

Ergebniskontrolle XRadar zeigt, ob das Refactoring erfolgreich war. Bemerkenswert: Bis auf Schritt 4 (Lookup einführen) sind alle Schritte sicher automatisiert mit Eclipse durchführbar! WJAX 2005-16.11.2005 http://www.it-agile.de 43

Fazit Code zu refaktorisieren ist wichtiger als Code zu schreiben. Oder: Refactoring is more important than coding. Wir verbringen viel mehr Zeit damit, bereits vorhandenem Code zu bearbeiten, als neuen Code zu implementieren. Nutzen Sie Refactoring-Tools intensiv!!! Refactorings sind nur mit Unit-Tests wirklich sicher durchführbar! Besonders wichtig: Refactorings dürfen nicht aufgeschoben werden! Refactorings müssen im Team kommuniziert werden! Fragen Sie die Experten! ;-) WJAX 2005-16.11.2005 http://www.it-agile.de 44

Ein wenig Werbung ;-) Refactoring-Einführung Architektur-Smells Charakteristika großer Refactorings Bausteine großer Refactorings Prozess-Aspekte Datenbanken und Refactoring APIs und Refactoring WJAX 2005-16.11.2005 http://www.it-agile.de 45

Vielen Dank Fragen und Feedback jederzeit gerne! Martin Lippert: martin.lippert@it-agile.de Andreas Havenstein: andreas.havenstein@it-agile.de WJAX 2005-16.11.2005 http://www.it-agile.de 46