Legacy Code meistern in x einfachen Schritten

Ähnliche Dokumente
Struts 2 Das Imperium schlägt zurück?

Last- und Stresstest mit the Grinder 3

Atlassian Git Essentials Nahtlose Entwicklungsworkflows aus einer Hand

Effektiver Einsatz von Code-Reviews

Hibernate Search. Unterstützung laufender Java Projekte. Perfect Match Rent-a-team Coaching on the project Inhouse Outsourcing

Agile Ressourcenplanung

Refactoring von Legacy Systemen. Jochen Winzen andrena objects ag

Kontinuierliche Architekturdokumentation im agilen Umfeld

Issue Tracker & Wiki

Kapitel 3 Software Quality III

Design for Testability in der Praxis David Völkel, codecentric AG

Agile Ressourcenplanung

Agile Ressourcenplanung

Einbindung dynamischer Sprachen in Java

Große Versuchung, von Listenplanung abzuweichen

Iterativ. Inkrementell

BIRT in Enterprise Architekturen

SAP Software Engineering live Agile! Agiles Projektmanagement und Clean Code im SAP-Umfeld

IntelliJ IDEA. Gliederung. Was ist IntelliJ IDEA? Lizenzmodell Warum IntelliJ einsetzen? IntelliJ und Eclipse Demo. Blick über den Eclipse-Tellerrand

INTEGRATION TEST HELL ODER WIE INTEGRATIV SOLL ICH TESTEN?

Vorlesung Software-Reengineering

Jan Schumann, G+J Manuel Pichler, Trainer & Consultant - Qafoo. Statische Codeanalyse wirklich effektiv nutzen

Keynote Der offene Ansatz: Open Source basiertes ALM ganz praktisch

BIRT Best Practices. Java, XML und Open Source seit ) Software Factory ) Christian Brell. Schlüsselfertige Realisierung von Java Software

Testen von grafischen Benutzeroberflächen

Gerrit und Jenkins ein Traumpaar für Pre-Tested Commit

Gerrit und Jenkins ein Traumpaar für Pre-Tested Commit

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Vertretungsstunde Englisch 5. Klasse: Grammatik

Softwarequalität sicherstellen mit Sonar

TDD with Contracts. XP Days Germany 2013 Dr. Lars Alvincz, Hagen Buchwald. c4j.vksi.de

Ruby on Rails. Thomas Baustert Ralf Wirdemann Alternative zur Web-Entwicklung mit Java?

Langlebige Softwarearchitekturen

CONTINUOUS DELIVERY. Entmystifiziert. codecentric AG

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Mit Legacy-Systemen in die Zukunft. adviion. in die Zukunft. Dr. Roland Schätzle

Refactoring relationaler Datenbank. Shaoke Wu

Regelbasierte Systeme mit JBoss Drools. Paul Weinhold JUG Görlitz,

Test Driven Development

Source Code Konverter Online: (VB.net <-> C#) Kommerzielle Produkte (VB, C#, C++, Java) Code Nachbearbeitung in der Praxis...

How To: Wie entwickle ich mit SharpDevelop Anwendungen für die PocketPC-Platform

Funktionale Konzepte in objektorientierten Sprachen LAMBDAS / CLOSURES

PHP 6 Beliebte Webskriptsprache wird erwachsen. Linux User Group Bern René Moser <mail@renemoser.net>

Fabian Schmengler Pragmatisches Unit Testing. Meet Magento DE 2015

CONTINUOUS DELIVERY. codecentric AG

Scriptbasierte Testautomatisierung. für Web-Anwendungen

Karlsruher Entwicklertag Coding Dojos im Unternehmen

LIVE/11 - WEBSPECIAL. Andreas Förthner - Clemens Kalb

Buildsystem. Maven & Scons. Controls Entwicklungsforum Januar 2012

Architecture Blueprints

Bildverarbeitung und Algorithmen. Einführung in ImageJ

Frontend Migration from JSP to Eclipse Scout

Extreme Programming ACM/GI Regionalgruppe Bremen,

Model Driven Software Development

Debugging in Magento

Festlegungen für die Code Entwicklung Table of contents

Configuration Management mit Verbosy OSDC Eric Lippmann

Gelebte Architektur und ALM in der Praxis

Abschlussbericht. Erstellung eines automatisierten Build-Prozesses für Eclipse-RCP- Anwendungen am Fallbeispiel Control System Studio.

Software development with continuous integration

Selbstorganisiert ein Ziel erreichen Analyse, Architektur und Design in agilen Software-Projekten

.NET Softwareentwicklung

Android Testautomatisierung mit dem Framework Robotium

(und was wir davon lernen können!)

Refactoring in kleinen und großen Projekten

p^db=`oj===pìééçêíáåñçêã~íáçå=

Continuous Database Integration mit Flyway

Herkömmliche Softwareentwicklungsmodelle vs. Agile Methoden

Komponentenbasierte Softwareentwicklung

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Mobile Apps: Von der Entwicklung bis zum Test mit HP Software

Rethinking Software Migration im Zeitalter der Webanwendung

Code Quality. Steigerung der Codequalität mit Visual Studio & TFS

Echolot Qualitätssicherung mit Sonar

Testgetriebene Web-Entwicklung mit Ruby on Rails

The Art of Unit Testing

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

ZuuL - Entwicklung eines Adventures

Selbstbestimmtes Lernen. Proinformatik III Objektorientierte Programmierung. Format. Inhalt. Buzzwords

Open Source Compliance. RA Dr. Christian Laux, LL.M. OpenExpo 2010, Bern 25. März 2010

DIGICOMP OPEN TUESDAY AKTUELLE STANDARDS UND TRENDS IN DER AGILEN SOFTWARE ENTWICKLUNG. Michael Palotas 7. April GRIDFUSION

Software Engineering. 13. Automatische Code Analyse. Franz-Josef Elmer, Universität Basel, WS 2005/06

Programmentwicklung ohne BlueJ

Webentwicklung mit Vaadin 7. Theoretische und praktische Einführung in Vaadin 7. Christian Dresen, Michael Gerdes, Sergej Schumilo

brauchen wir eine lernende und agile organisation? Juli 2016

Softwarelizenzen und Open Source

Kontinuierliche Architekturanalyse. in 3D


Best Practices für RM/RE in einem Prozess Framework Thomas Schröder

Testen mit JUnit. Motivation

Comparing Software Factories and Software Product Lines

Übung 1: Von einer naiven JavaScript Applikation zu einem modernen Front-End Build:

IT-Sicherheit in Unternehmen: Typische Probleme und Lösungsmöglichkeiten OWASP The OWASP Foundation

Risiko Modellierung mit PillarOne PillarOne Risk Management meets Open Source

Open Source. Hendrik Ebbers 2015

Next generation open source BPM JBoss jbpm 4. Java Forum Stuttgart

Klausur Verteilte Systeme

Markus Wichmann. Testen von Java Code mit. JUnit

Created by Angelo Maron

CamelCaseCon 2011 Vortrag von Stefan Glase am Statische Code-Analyse für Groovy & Grails mit CodeNarc

Transkript:

Legacy Code meistern in x einfachen Schritten Version: 1.0 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de info@oio.de

Über mich Falk Sippach (@sippsack) Trainer, Berater, Entwickler Co-Organisator Schwerpunkte Architektur Agile Softwareentwicklung Codequalität 2016 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 2

Java, XML und Open Source seit 1998 ) Software Factory ) ) Object Rangers ) ) Competence Center) Schlüsselfertige Realisierung von Java Software Individualsoftware Pilot- und Migrationsprojekte Sanierung von Software Software Wartung Unterstützung laufender Java Projekte Perfect Match Rent-a-team Coaching on the project Inhouse Outsourcing Schulungen, Coaching, Weiterbildungsberatung, Train & Solve-Programme Methoden, Standards und Tools für die Entwicklung von offenen, unternehmensweiten Systemen 2016 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 3

Legacy Code meistern in x einfachen Schritten 12345678 Nur heute, nicht 1, nicht 2, 2016 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 kennenlernen möchte, ist in dieser Session genau richtig. 2016 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 5

Unser Thema heute: Refactoring Legacy Code Disclaimer: KEIN Projekterfahrungsbericht 6

Legacy Code Somebody else's code Jeder kennt ihn Was ist mit unserem eigenen Code? Keiner mag ihn 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) 8

Refactoring Legacy Code Annahmen Es gibt automatisierte Tests Quellcode ist schon testbar 2016 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 10

"Gimme Google, Stack Overflow, and this keyboard, and I'll program you anything. " Duplicated Code https://twitter.com/old_sound/status/650490638308409344 11

Refactoring Legacy Code Code without tests 12

LEGACY Vermächtnis Erbe Altlast Hinterlassenschaft Foto von smpcas, CC0 Public Domain Lizenz, https://pixabay.com/de/pula-kroatien-amphitheater-erbe-827909/ 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/ 14

Code without tests is bad code. Michael Feathers 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 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) 17

Was macht es dann schwierig? Hello World vs. 50.000++ LOC Disziplin (kleine Schritte, ) Aussagekräftige Testabdeckung 18

Legacy zu Clean Code? Clean Code ist NICHT das Ziel Hauptfokus: testbarer Code 19

Dann schreiben wir halt Tests viel zu teuer Code meist kaum/nicht testbar starke Kopplung, geringe Kohäsion 20

refactoren bräuchte man Tests, Tests würden helfen, Code zu verstehen, um Code zu verstehen könnte man Code refactoren, um Code zu refactoren bräuchte man Tests, Tests würden helfen, Code zu verstehen, um Code zu verstehen könnte man Code refactoren, um Code zu refactoren bräuchte man Tests, Tests würden helfen, Code zu verstehen, um Code zu verstehen könnte man Code refactoren, um Code zu refactoren bräuchte man Tests, Tests würden helfen, Code zu verstehen, um Code zu Henne-Eiverstehen könnte man Code refactoren, um Code zu refactoren bräuchte Problem man Tests, Tests würden helfen, Code zu verstehen, um Code zu verstehen könnte man Code refactoren, um Code zu refactoren bräuchte man Tests, Tests würden helfen, Code zu verstehen, um Code zu verstehen könnte man Code refactoren, um Code zu refactoren bräuchte man Tests, Tests würden helfen, Code zu verstehen, um Code zu verstehen könnte man Code refactoren, um Code zu refactoren bräuchte man Tests, Tests würden helfen, Code zu verstehen, um Code zu verstehen könnte man Code refactoren, um Code zu refactoren bräuchte man Tests, Tests würden helfen, Code zu 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 Die Katze müßtebeißt man refactoren, sich um zu refactoren könnte man Tests schreiben, in um den Tests Schwanz! 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 refact 22

Vorgehen 1. Identify what to change 2. Identify what to test 3. Break dependencies 4. Write the tests 5. Modify and refactoring 2016 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) 24

Dann mal her mit den x einfachen Schritten! 25

A Sicherheitsnetz + Tests Foto von bella67: https://pixabay.com/de/spinnennetz-mit-wasserperlen-netz-921039/ (CC0 Public Domain Lizenz) 26

B Sanierung Foto von KlausHausmann: https://pixabay.com/de/bauarbeiter-bau-bauen-bohrhammer-921224/ (CC0 Public Domain Lizenz) 27

1 Golden Master Foto von istara: https://pixabay.com/de/gold-bar-goldbarren-reich-geld-296115/ (CC0 Public Domain Lizenz) 28

29

Live-Coding Foto von StockSnap: https://pixabay.com/de/codierung-gesch%c3%a4ft-arbeiten-macbook-699318/ (CC0 Public Domain Lizenz) 30

1 Golden Master Vorsicht bei Zufallsgeneratoren Festlegen von Seeds (Pseudo-Random) 31

2 Subclass To Test Foto von chrisli8020: https://pixabay.com/de/auto-maschine-spielzeug-786315/ (CC0 Public Domain Lizenz) 32

2 Subclass To Test Seam (Nahtstelle) Ein Seam ist eine Stelle, an der man das Verhalten editieren kann, ohne direkt an dieser Stelle zu ändern. Aufbrechen stark gekoppelter Abhängigkeiten aka Extract and Override 33

Live-Coding Foto von StockSnap: https://pixabay.com/de/codierung-gesch%c3%a4ft-arbeiten-macbook-699318/ (CC0 Public Domain Lizenz) 34

3 Extract Pure Functions Foto von PublicDomainPictures: https://pixabay.com/de/wasser-tropfen-tr%c3%b6pfchen-grau-72879/ (CC0 Public Domain Lizenz) 35

3 Extract Pure Functions seiteneffektfrei keine Statusänderung "It's a classic, we call it a Klassiker" 36

3 Extract Pure Functions "pure function".substring(5); UrlEncoder.encode("pure function"); Math.max(x, y); System.out.println("unpure"); list.add(3); Collections.sort(list); 37

3 Extract Pure Functions Codestellen isolieren Ziele Separat testbar Duplikation reduzieren 38

Live-Coding Foto von StockSnap: https://pixabay.com/de/codierung-gesch%c3%a4ft-arbeiten-macbook-699318/ (CC0 Public Domain Lizenz) 39

4 Remove Duplication Don't Repeat Yourself Beachte: Rule of Three Foto von AdinaVoicu: https://pixabay.com/de/zwilling-schwestern-liebe-m%c3%a4dchen-948713/ (CC0 Public Domain Lizenz) 40

Live-Coding Foto von StockSnap: https://pixabay.com/de/codierung-gesch%c3%a4ft-arbeiten-macbook-699318/ (CC0 Public Domain Lizenz) 41

5 Extract Class Large class SRP verletzt Ziele Unabhängiges Testen einzelner Teile Sauberes OO-Design Foto von blickpixel: https://pixabay.com/de/weihnachtsdekoration-pakete-geschenk-570797/ (CC0 Public Domain Lizenz) 42

Live-Coding Foto von StockSnap: https://pixabay.com/de/codierung-gesch%c3%a4ft-arbeiten-macbook-699318/ (CC0 Public Domain Lizenz) 43

6 Dependency Inversion 7 Dependency Inversion Test non-public member Dependency Inversion 8 Mocking Framework 44

Zusammenfassung 45

1 Golden Master 47

2 3 5 6 7 8 Subclass To Test Extract Pure Functions Extract Class Dependency Inversion Test non-public member Mocking Framework 48

3 4 5 Extract Pure Functions Remove Duplication Extract Class 49

Tools Code Coverage Approval Tests Infinitest Eclipse Metrics 2016 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 50

Legacy Code Retreat https://github.com/jbrains/trivia Foto von Jmabel: https://commons.wikimedia.org/wiki/file:seattle_-_budokan_dojo_judo_demo_04.jpg?uselang=de (CC BY-SA 3.0 Lizenz) 51

Links Code-Beispiel der Live-Demo https://github.com/sippsack/badtelefon-refactoring-legacy-code anderes Code-Beispiel für Legacy Code https://github.com/jbrains/trivia Blog: Techniken zu Legacy Code-Retreat http://blog.adrianbolboaca.ro/2014/04/legacy-coderetreat/ 2016 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 52

Literaturhinweise Refactoring Sprache: Englisch Gebunden - 464 Seiten - Addison Wesely Erscheinungsdatum: 1. Juni 1999 ISBN: 0201485672 Working Effectively with Legacy Code Sprache: Englisch Gebunden 2016 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 53

??? Fragen?? Orientation in Objects GmbH? Weinheimer Str. 68 68309 Mannheim www.oio.de info@oio.de

Vielen Dank für ihre Aufmerksamkeit! Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de info@oio.de

Zusatzmaterial 6 Dependency Inversion 7 Dependency Inversion Test non-public member Dependency Inversion 8 Mocking Framework 2016 Orientation in Objects GmbH Legacy Code meistern in x einfachen Schritten 56

6 Dependency Inversion Entkoppeln durch explizites Setzen der Abhängigkeiten Foto von tatlin: https://pixabay.com/de/zigarette-rauch-tabak-106610/ (CC0 Public Domain Lizenz) 57

Live-Coding Foto von StockSnap: https://pixabay.com/de/codierung-gesch%c3%a4ft-arbeiten-macbook-699318/ (CC0 Public Domain Lizenz) 58

7 Test non-public member Wirklich? Gute Alternative bei Legacy Code! Foto von Guian Bolisay: https://www.flickr.com/photos/instantvantage/5151841152/ (CC BY-SA 2.0) 59

Live-Coding Foto von StockSnap: https://pixabay.com/de/codierung-gesch%c3%a4ft-arbeiten-macbook-699318/ (CC0 Public Domain Lizenz) 60

8 Mocking Subclass To Test on Steorids! Interaktion mit Umgebung testen Erwartete Parameter und Aufrufreihenfolge Foto von tatlin: https://pixabay.com/de/zigarette-rauch-tabak-106610/ (CC0 Public Domain Lizenz) 61

Live-Coding Foto von StockSnap: https://pixabay.com/de/codierung-gesch%c3%a4ft-arbeiten-macbook-699318/ (CC0 Public Domain Lizenz) 62