Legacy Code meistern in x einfachen Schritten Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 1.0 www.oio.de [email protected] Java Forum Nord Hannover, 06.10.2015 Über mich Falk Sippach (@sippsack) Trainer, Berater, Entwickler Co-Organisator © 2015 Orientation in Objects GmbH Schwerpunkte Architektur Agile Softwareentwicklung Codequalität Legacy Code meistern in x einfachen Schritten 2 Java, XML und Open Source seit 1998 ) Software Factory ) ) Object Rangers ) • Schlüsselfertige Realisierung von Java Software • Unterstützung laufender • Individualsoftware • Pilot- und Migrationsprojekte • Sanierung von Software • Software Wartung • Perfect Match • Rent-a-team • Coaching on the project • Inhouse Outsourcing © 2015 Orientation in Objects GmbH Java Projekte ) Competence Center) • Schulungen, Coaching, Weiterbildungsberatung, Train & Solve-Programme • Methoden, Standards und Tools für die Entwicklung von offenen, unternehmensweiten Systemen Legacy Code meistern in x einfachen Schritten 3 Legacy Code meistern in 5 6 2 4 3 1 x einfachen Schritten Nur heute, nicht 1, nicht 2, … © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 4 Legacy Code meistern in x einfachen Schritten In einer idealen Welt würden wir nur "neuen" Code schreiben, der natürlich perfekt und wunderschön ist. Wir müssten nie wieder unseren Code anschauen, geschweige denn 10 Jahre alte Projekte warten. Ende des Tagtraums ... Leider ist unsere Welt nicht so ideal, unser Code von gestern ist heute schon Legacy. Diesen im Nachhinein zu verstehen, zu erweitern oder darin Fehler zu beheben, ist immer eine Herausforderung, insbesondere wenn Tests fehlen. Trotzdem gibt es einfache Möglichkeiten, wie man die Qualität von Legacy-Code verbessern kann. Das Wichtigste ist das Einziehen von Fangnetzen, sodass man trotz fehlender Tests guten Gewissens Änderungen durchführen kann. Wer Golden Master, Subclass to Test und Extract Pure Functions an konkreten Beispielen kenne nlernen möchte, ist in dieser Session genau richtig. © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 5 Unser Thema heute: Refactoring Legacy Code Disclaimer: KEIN Projekterfahrungsbericht © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 6 Legacy Code Somebody else's code Jeder kennt ihn … Was ist mit unserem eigenen Code? Keiner mag ihn … © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 7 Refactoring Legacy Code Warum? Verstehen Erweitern Bugfixing Optimierung Grafik von ClkerFreeVectorImages: https://pixabay.com/de/vitamine-tabletten-pillen-medizin-26622/ (CC0 Public Domain Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 8 Refactoring Legacy Code Annahmen Es gibt automatisierte Tests … Quellcode ist schon testbar … © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 9 Refactoring Legacy Code Code Smells Temporary Field Long Method Feature Envy … Code Comments https://twitter.com/petecheslock/status/646507209413775360/photo/1 © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 10 "Gimme Google, Stack Overflow, and this keyboard, and I'll program you anything. " Duplicated Code https://twitter.com/old_sound/status/650490638308409344 © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 11 Refactoring Legacy Code "Code without tests" © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 12 LEGACY Vermächtnis Erbe Altlast Hinterlassenschaft Foto von smpcas, CC0 Public Domain Lizenz, https://pixabay.com/de/pula-kroatien-amphitheater-erbe-827909/ © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 13 J. B. Rainsberger Legacy code is valuable code that we feel afraid to change. Foto von PublicDomainPictures, CC0 Public Domain Lizenz, https://pixabay.com/de/menschen-abdeckung-schrei-314481/ © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 14 "Code without tests is bad code." Michael Feathers © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 15 Es ist egal, wie … … gut geschrieben der Code ist … schön der Code ist … objektorientiert der Code ist … entkoppelt der Code ist Tests lassen unser Verhalten schnell und verifizierbar ändern Ohne Tests wissen wir nicht, ob der Code besser oder schlechter wird © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 16 Die gute Nachricht … Keine Wissenschaft Gesunder Menschenverstand Foto von Engel62: https://pixabay.com/de/daniel-d%C3%BCsentrieb-helferlein-123206/ (CC0 Public Domain Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 17 Was macht es dann schwierig? Hello World vs. 50.000++ LOC Disziplin (kleine Schritte, …) Aussagekräftige Testabdeckung © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 18 Legacy zu Clean Code? Clean Code ist NICHT das Ziel Hauptfokus: testbarer Code © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 19 Dann schreiben wir halt Tests … viel zu teuer Code meist kaum/nicht testbar starke Kopplung, geringe Kohäsion © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 20 refactoren bräuchte man Tests, Tests bräuchte man, um Code zu verstehen könnte man Code refactoren, um Code zu refactoren bräuchte man Tests, Tests bräuchte man, um Code zu verstehen könnte man Code refactoren, um Code zu refactoren bräuchte man Tests, Tests bräuchte man, um Code zu verstehen könnte man Code refactoren, um Code zu refactoren bräuchte man Tests, Tests bräuchte man, um Code Henne-Ei-Problem zu verstehen könnte man Code refactoren, um Code zu refactoren bräuchte man Tests, Tests bräuchte man, um Code zu verstehen könnte man Code refactoren, um Code zu refactoren bräuchte man Tests, Tests bräuchte man, um Code zu verstehen könnte man Code refactoren, um Code zu refactoren bräuchte man Tests, Tests bräuchte man, um Code zu verstehen könnte man Code refactoren, um Code zu refactoren bräuchte man Tests, Tests bräuchte man, um Code zu verstehen könnte man Code refactoren, um Code zu refactoren bräuchte man Tests, Tests bräuchte man, um Code zu verstehen könnte man Code refactoren, um Code zu refactoren bräuchte man Tests, Tests bräuchte man, um Code zu verstehen könnte man Code refactoren, um Code zu © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 21 um Tests zu schreiben muß der Code testbar sein, um testbaren Code zu erhalten müßte man refactoren, um zu refactoren könnte man Tests schreiben, um Tests zu schreiben muß der Code testbar sein, um testbaren Code zu erhalten müßte man refactoren, um zu refactoren könnte man Tests schreiben, um Tests zu schreiben muß der Code testbar sein, um testbaren Code zu erhalten müßte man refactoren, um zu refactoren könnte man Tests schreiben, um Tests zu schreiben muß der Code testbar sein, um testbaren Code zu erhalten müßte man refactoren, um zu refactoren könnte man Tests schreiben, um Tests zu schreiben muß der Code testbar sein, um testbaren Code zu erhalten müßte beißt man refactoren, um zu refactoren könnte man Tests Die Katze sich schreiben,in um zu schreiben muß der Code testbar sein, um denTests Schwanz! testbaren Code zu erhalten müßte man refactoren, um zu refactoren könnte man Tests schreiben, um Tests zu schreiben muß der Code testbar sein, um testbaren Code zu erhalten müßte man refactoren, um zu refactoren könnte man Tests schreiben, um Tests zu schreiben muß der Code testbar sein, um testbaren Code zu erhalten müßte man refact © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 22 Vorgehen • Identify what to change • Identify what to test • Break dependencies • Write the tests • Modify and refactoring © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 23 No Silver Bullet Jedes Projekt individuell Vorsicht beim Beheben von offensichtlichen Fehlern Foto von stevepb: https://pixabay.com/de/kugel-patrone-munition-kriminalit%C3%A4t-408636/ (CC0 Public Domain Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 24 A Sicherheitsnetz Foto von bella67: https://pixabay.com/de/spinnennetz-mit-wasserperlen-netz-921039/ (CC0 Public Domain Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 25 B Sanierung Foto von KlausHausmann: https://pixabay.com/de/bauarbeiter-bau-bauen-bohrhammer-921224/ (CC0 Public Domain Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 26 1 Golden Master Foto von istara: https://pixabay.com/de/gold-bar-goldbarren-reich-geld-296115/ (CC0 Public Domain Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 27 © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 28 Live-Coding Foto von StockSnap: https://pixabay.com/de/codierung-gesch%C3%A4ft-arbeiten-macbook-699318/ (CC0 Public Domain Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 29 1 Golden Master Vorsicht bei Zufallsgeneratoren Festlegen von Seeds (Pseudo-Random) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 30 2 Subclass To Test Foto von chrisli8020: https://pixabay.com/de/auto-maschine-spielzeug-786315/ (CC0 Public Domain Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 31 2 Subclass To Test Seam A seam is a place where you can alter behavior in your program without editing in that place. Aufbrechen stark gekoppelter Abhängigkeiten aka Extract and Override © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 32 Live-Coding Foto von StockSnap: https://pixabay.com/de/codierung-gesch%C3%A4ft-arbeiten-macbook-699318/ (CC0 Public Domain Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 33 3 Extract Pure Functions Foto von PublicDomainPictures: https://pixabay.com/de/wasser-tropfen-tr%C3%B6pfchen-grau-72879/ (CC0 Public Domain Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 34 3 Extract Pure Functions seiteneffektfrei keine Statusänderung IDEMPOTENT! © 2015 Orientation in Objects GmbH "It's a classic, we call it a Klassiker" Legacy Code meistern in x einfachen Schritten 35 3 Extract Pure Functions "pure function".substring(5); UrlEncoder.encode("pure function"); Math.max(x, y); System.out.println("unpure"); list.add(3); Object.hashcode() © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 36 3 Extract Pure Functions Ziele Codestellen isolieren Separat testen Duplikation reduzieren © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 37 Live-Coding Foto von StockSnap: https://pixabay.com/de/codierung-gesch%C3%A4ft-arbeiten-macbook-699318/ (CC0 Public Domain Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 38 4 Remove Duplication DRY Aber: Rule of three Foto von AdinaVoicu: https://pixabay.com/de/zwilling-schwestern-liebe-m%C3%A4dchen-948713/ (CC0 Public Domain Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 39 Live-Coding Foto von StockSnap: https://pixabay.com/de/codierung-gesch%C3%A4ft-arbeiten-macbook-699318/ (CC0 Public Domain Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 40 5 Extract Class Large class SRP verletzt Unabhängiges Testen einzelner Teile Foto von blickpixel: https://pixabay.com/de/weihnachtsdekoration-pakete-geschenk-570797/ (CC0 Public Domain Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 41 Live-Coding Foto von StockSnap: https://pixabay.com/de/codierung-gesch%C3%A4ft-arbeiten-macbook-699318/ (CC0 Public Domain Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 42 6 Dependency Inversion Entkoppeln durch explizite Abhängigkeiten Foto von tatlin: https://pixabay.com/de/zigarette-rauch-tabak-106610/ (CC0 Public Domain Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 43 Live-Coding Foto von StockSnap: https://pixabay.com/de/codierung-gesch%C3%A4ft-arbeiten-macbook-699318/ (CC0 Public Domain Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 44 1 Golden Master 2 Subclass To Test 3 Extract Pure Functions 4 Remove Duplication 5 Extract Class 6 Dependency Inversion © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 45 Tools Code Coverage Approval Tests Infinitest Eclipse Metrics © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 46 Legacy Code Retreat Foto von Jmabel: https://commons.wikimedia.org/wiki/File:Seattle_-_Budokan_Dojo_judo_demo_04.jpg?uselang=de (CC BY-SA 3.0 Lizenz) © 2015 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 47 ? ? ? ? ? Fragen ? Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de [email protected] Vielen Dank für ihre Aufmerksamkeit ! Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de [email protected]
© Copyright 2025 ExpyDoc