Software-Refactoring. 27. Mai 2015

Ähnliche Dokumente
Software-Refactoring. 29. Mai 2013

Refactoring. Vortrag im Rahmen des Softwareprojekts: Übersetzerbau. Referenten: Vivienne Severa Alpin Mete Sahin Florian Mercks. Datum:

Michael C. Feathers. Legacy Code. Effektives Arbeiten mit. Refactoring und Testen bestehender Software

Kapitel 3 Software Quality III

Design Patterns. 3. Juni 2015

Software-Restrukturierung

Refactoring. Programmiermethodik. Eva Zangerle Universität Innsbruck

Refactoring. Uschi Beck

Design Patterns. 5. Juni 2013

Softwaremetriken. 29. April 2015

Bad Code Smells. 20. Mai 2015

Effektives Arbeiten mit Legacy Code

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

Softwaremetriken. 15. Mai 2013

11. Funktionale Programmierung Advanced Programming Techniques Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

COPE COuPled Evolution of metamodels and models

Johannes Link.

Systematisches Testen der Funktionalität von Softwaresystemen. 17. Juni 2015

Behutsame Modernisierung

Objektorientiertes Programmieren II

Java Einführung Vererbung und Polymorphie. Kapitel 13

Software Technologie Refactoring. Nutzungsverhalten der Entwickler bzgl. des Refactoring. Nguyen Hung

Refaktorisierung des Eclipse- Plugins Saros für die Portierung auf andere IDEs. Verteidigung der Bachelorarbeit von Arndt Tigges

IT I: Heute. Nachbetrachtung Wissensüberprüfungen. Einführung Vererbung. Roboter in becker.robots IT I - VO 5 1

Modellgetriebene Softwareentwicklung: Zusammenfassung und Ausblick. 7. Februar 2013

Einführung in die Modelltransformation mit Xtend

Refactoring I. Nach Martin Fowler - Refactoring

Modellgetriebene Softwareentwicklung bei der IBYKUS AG

Software Engineering II (IB) Softwareevolution

Software Engineering II (IB) Softwareevolution

Objekte haben eine eigene Notation, also Schreibweise, beim Aufruf:

Algorithmen und Programmierung II

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Modulare Programmierung

Universität Karlsruhe (TH)

Kapitel 2 - Die Definitionsphase

11. Komponenten Grundlagen der Programmierung 1 (Java)

Softwarequalität. 20. Januar 2015

Javakurs für Anfänger

Rückblick: Entity-Relationship-Modell

11. Refactoring Advanced Programming Techniques. Wintersemester 2009/2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

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

Anwendung der Aspektorientierung: Design Patterns

Testen mit JUnit. Motivation

Validation und Quick Fixing mit Xtend. 3. Dezember 2014

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Clean Java Von Anfang an!

Evolution in objektorientierten Systemen. Dr. Thorsten Arendt Marburg, 28. Januar 2016

SmallTalk - Eine kurze Einführung

C++ - Objektorientierte Programmierung Vererbung

Refactoring Rails. Studienarbeit. Ravensburg. Studienbereich Wirtschaft. im Studiengang Wirtschaftsinformatik. an der Berufsakademie

MOF Meta Object Facility. Veranstaltungsvortrag im Rahmen der Projektgruppe ComponentTools

Objektorientierte Programmierung. Kapitel 12: Interfaces

Programmiermethodik Vorlesung und Praktikum SS 2001

Language Workbench. Aktuelle Themen der Softwaretechnologie. Vortrag von: Arthur Rehm Steven Cardoso. Betreut von: Prof. Dr.

Refactoring von Legacy Systemen. Jochen Winzen andrena objects ag

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

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Objektorientierte Programmierung. Kapitel 14: Interfaces

Web Engineering-Seminar Methoden zur Web Modellierung: Object-oriented Hypermedia Method (OO-H)

Klausur Grundlagen der Programmierung

Modellgetriebene Softwareentwicklung: Zusammenfassung und Ausblick. 11. Februar 2015

Testen von graphischen Benutzeroberflächen. 24. Juni 2015

Inhaltsverzeichnis. Literatur. 4 Rational Unified Process [JBR98, Kru03] und UML [BRJ02, FS00, Bal01]

GUI-Entwicklung 2: Windows Presentation Foundation

Statische Code-Analyse: Software-Metriken Fernstudium Master Wirtschaftsinformatik Formale Methoden

Übung 5. Implementierung einer Datenbank. Prof. Dr. Andreas Schmietendorf 1. Übung 5

Informatik II Übung 6 Gruppe 7

Programmierkurs Java. Vererbung. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck

Die Unified Modeling Language (UML)

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

Unified. Copyright Adriano Gesué UML 2.0 UML 1.4 UML 1.3 UML 1.2 UML 1.1 UML 1.0 UML 0.9. Method 0.8

Extreme Programming (XP)

Java für C++ Programmierer

Transkript:

Software-Refactoring 27. Mai 2015

Überblick Was ist Refactoring und wozu dient es? Welche Refactorings gibt es? Refactoring-Katalog: www.refactoring.com Wann, wo und wie führt man Refactorings durch? Wie definiert man neue Refactorings? offene Probleme bzgl. Refactoring Werkzeugunterstützung für Refactoring Refactoring in Eclipse Literatur: M. Fowler: Refactoring, Addison-Wesley, 2005 Taentzer Softwarequalität 2015 119

Was ist Refactoring? eine Technik im Rahmen der iterativen Softwareentwicklung Restrukturierung der Software nach jedem Iterationsschritt Refactoring ist der Prozess, ein Softwaresystem so zu verändern, dass das externe Verhalten unverändert bleibt, der Code aber eine bessere Struktur erhält. (Martin Fowler) Taentzer Softwarequalität 2015 120

Wozu dient Refactoring? Verbesserung der Software, wobei die Funktionalität unverändert bleibt aus Sicht des Benutzers nicht (oder kaum) bemerkbar Mögliche Qualitätsverbesserungen des Codes: Bessere Übersichtlichkeit und Verständlichkeit Verbesserte Lesbarkeit Vereinfachte Wartbarkeit und Erweiterbarkeit Bessere Modularität (bessere Wiederverwendbarkeit) Leichtere Testbarkeit Taentzer Softwarequalität 2015 121

Refactoring-Beispiel 1 Taentzer Softwarequalität 2015 122

Refactoring: Extrahiere eine Klasse Ziel: Zusammengehörige Felder und Methoden, die in einer Klassen zusammen auftreten, werden in eine separate Klasse extrahiert. Eingabeparameter: Felder und Methoden, die extrahiert werden sollen Name der neuen Klasse Effekt: Eine neue Klasse mit einer Referenz zu dieser wird angelegt. Alle markierten Felder und Methoden werden in diese neue Klasse verschoben. Taentzer Softwarequalität 2015 123

Refactoring-Beispiel 2 Ersetze Typkonstanten durch Unterklassen Taentzer Softwarequalität 2015 124

Refactoring: Ersetze Typkonstanten Ziel: durch Unterklassen Varianten werden in Unterklassen gekapselt. Eingabeparameter: Klasse Typ-Konstanten dieser Klasse Effekt: Für jede Konstante: Erzeuge Unterklasse mit Namen der Konstanten. Lösche alle Typ-Konstanten. Lösche Typ-Attribut. Taentzer Softwarequalität 2015 125

Welche Refactorings gibt es? Mittlerweile existiert ein umfangreicher Katalog. Typische Refactoring-Methoden: Umbenennungen (Felder, Methoden, Klassen, etc.) Entfernung von redundantem Code Verschiebung eines Elements in ein anderes Modul (z.b. Methode in andere Klasse) Aufteilung oder Zusammenlegung eines Moduls (z.b. Paket oder Klasse) Extraktion einer Methode Taentzer Softwarequalität 2015 126

Konkrete Refactoring-Methoden Eine Auswahl aus dem Katalog www.refactoring.com: Innerhalb von Methoden: Extract Method Inline Method Replace Temp With Query Inline Temp Vereinfachte Bedingungen: Decompose Conditional Introduce Assertion Replace Conditional With Polymorphism Verschiebung zwischen Klassen: Move Method / Field Extract Class Hide Delegate Datenorganisation: Replace Data Value With Object Encapsulate Field Replace Array with Object Taentzer Softwarequalität 2015 127

Konkrete Refactoring-Methoden (2) Vereinfachte Methoden: Rename Method Add/Remove Parameter Introduce Parameter Object Remove Setting Method Replace Error Code with Exception Replace Exception with Test Änderungen an der Vererbungshierarchie: Pull up Field / Method Push Down Field /Method Extract Superclass / Subclass Replace Inheritance With Delegation Größere Refactorings: Tease Apart Inheritance Convert Procedural Design to Objects Taentzer Softwarequalität 2015 128

Durchführung von Refactorings nach einem Iterationsschritt auf funktionsfähigem Code fortlaufend in kleinen Schritten Tests nach jedem Schritt: Funktionalität muss erhalten bleiben Veränderung soll zu einem effektiveren System führen Komplexe Refactorings werden in mehrere kleine Refactorings zerteilt. Taentzer Softwarequalität 2015 129

Wo führt man Refactorings durch? Problem: Wie findet man die Stellen, an den Refactorings durchgeführt werden sollten? Bad Code Smells: Anzeichen auf schlechte Programmstruktur Katalog über Bad Code Smells und passende Refactorings: https://refactoring.guru/catalog Einführung von Design Patterns Taentzer Softwarequalität 2015 130

Refactoring-Beispiel 3 Student familienname:string matrikelnr: int addresse: String teilnehmer 3..* Lehrveranstaltung * titel: String * Dozent nachname: String alter: int giballelvs() gib AlleTeilnehmer() 1..* dozent Vorlesung Welche Refactorings sollten hier durchgeführt werden? Taentzer Softwarequalität 2015 131

Definition von Refactorings Refactoring als Programm- und Modelltransformation Definition von Refactorings mit einer Programmiersprache implementiert mit einer Skriptsprache beschrieben mit der Object Constraint Language (OCL) beschrieben mit Query/View/Transformation (QVT) beschrieben mit Graphtransformation beschrieben Refactoring für eine spezielle Anwendungsdomäne eine neue Sprache Taentzer Softwarequalität 2015 132

Qualität von Refactorings Verhaltensbewahrung: Was ist das Verhalten eines Systems? Auch wenn die Funktionalität gleich bleibt, kann sich der Zeit- oder Speicherplatzbedarf ändern. Wie weist man die Bewahrung von Verhalten nach? Strukturverbesserung: Wie misst man den Effekt eines Refactorings auf die Softwarequalität? Taentzer Softwarequalität 2015 133

Empirische Studien zu Refactoring In Windows7 konzentriert sich der Refactoring-Aufwand auf Module mit den meisten Abhängigkeiten. Nach dem Refactoring zeigen diese Module weniger Code-Komplexität, mehr Code- Zeilen und mehr klassenübergreifende Änderungen. [KZN14] Erfahrene Entwickler führen mehr automatisierte Refactorings aus. [NCV+13] Umbenennungen und Herausziehen von Variablen und Methoden sind die populärsten Refactorings. [NCV+13] Taentzer Softwarequalität 2015 134

Zusammenfassung Refactoring heißt Verbesserung der Software, wobei die Funktionalität unverändert bleibt. konstruktive Qualitätssicherungsmaßnahme umfangreicher Katalog an konkreten Refactoring- Methoden Werkzeugunterstützung: Eclipse Refactoring-Werkzeug weitere IDEs, wie z.b. IntelliJIDEA Offene Fragen: Wie weist man Verhaltensbewahrung von Refactorings nach? Wie führt man kohärentes Refactoring von Model und Code durch? Taentzer Softwarequalität 2015 135

Literatur [MT04] Tom Mens, Tom Tourwé: A Survey of Software Refactoring. IEEE Trans. Software Eng. 30(2): 126-139 (2004) [KZN14] Miryung Kim, Thomas Zimmermann, Nachiappan Nagappan: An Empirical Study of Refactoring Challenges and Benefits at Microsoft. IEEE Trans. Software Eng. 40(7): 633-649 (2014) [NCV+13] Stas Negara, Nicholas Chen, Mohsen Vakilian, Ralph E. Johnson, Danny Dig: A Comparative Study of Manual and Automated Refactorings. ECOOP, LNCS 7920, Springer 2013: 552-576 Taentzer Softwarequalität 2015 136