Software-Refactoring. 29. Mai 2013

Ähnliche Dokumente
Software-Refactoring. 27. Mai 2015

Refactoring. PG Reclipse Seminar: Refactoring Jan-Christopher Bals (1/30)

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

Vorlesung Software-Reengineering

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

Kapitel 3 Software Quality III

Software-Restrukturierung

Vorlesung Software-Reengineering

Refactoring. Programmiermethodik. Eva Zangerle Universität Innsbruck

Seminar: CASE-Tools WS 06/ Refactoring. Thomas Löffler

Vorlesung Software-Reengineering

Design Patterns. 3. Juni 2015

Vorlesung Software-Reengineering

Design Patterns. 5. Juni 2013

Refactoring. Uschi Beck

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

Refactoring Transformationen. Martin Freund Januar 2003 Seminar Refactoring in extreme Programming AG Kastens Universität Paderborn

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

Effektives Arbeiten mit Legacy Code

Softwarequalität. 20. Januar 2015

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

Testen mit JUnit. Motivation

Klassen sollten nicht Wissen über die ganze Hierarchie, sondern nur über Nachbarklassen haben. Dies reduziert die Kopplung!

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

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

Klassen sollten nicht Wissen über die ganze Hierarchie, sondern nur über Nachbarklassen haben. Dies reduziert die Kopplung!

Javakurs für Anfänger

0/100. Refactoring. Andreas Zeller. Lehrstuhl Softwaretechnik Universität des Saarlandes, Saarbrücken

Software-Evolution. 27. Januar 2015

Advanced Software Engineering WS0910 Kapitel3. Dr. Dominik Haneberg

Verbesserung der Architektur und Dokumentation der DPP-Software Saros. Slawa Belousow Institut für Informatik FU Berlin

Entwicklung von domänenspezifischen Sprachen. 23. Januar 2013

Modularisierung. Klausur. Evaluation. Andreas Zeller. Objektorientierung C++ Sonstiges 33% 33% 33%

Softwaremetriken. 29. April 2015

Verwendung, Nichtgebrauch und Missbrauch von automatischer Restrukturierung

86 Software Engineering, SoSe 07, WSI, D. Huson, (Original Author: A. Zeller), 2. Juli 2007

Johannes Link.

Modellgetriebene Softwareentwicklung bei der IBYKUS AG

C++ Templates - eine kleine Einführung. Funktionstemplates. Fabian Scheler, Peter Ulbrich, Niko Böhm. 20. Oktober 2008

Einführung in die Modelltransformation mit Xtend

COPE COuPled Evolution of metamodels and models

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

Bad Code Smells. 20. Mai 2015

Validation und Quick Fixing mit Xtend. 3. Dezember 2014

Softwaremetriken. 15. Mai 2013

Advanced Software Engineering WS0910 Kapitel3. Dr. Dominik Haneberg

Modellgetriebene Softwareentwicklung: Zusammenfassung und Ausblick. 7. Februar 2013

Model Querys zur Überprüfung von sicherheitsrelevanten Eigenschaften

Vorlesung Software Engineering

Definition von domänenspezifischen Sprachen mit Xtext: Einführung

MOF Meta Object Facility. Veranstaltungsvortrag im Rahmen der Projektgruppe ComponentTools

Universität Karlsruhe (TH)

Kapitel 2 - Die Definitionsphase

Java Einführung Vererbung und Polymorphie. Kapitel 13

Objektorientierte Programmierung Studiengang Medieninformatik

Behutsame Modernisierung

Anwendung der Aspektorientierung: Design Patterns

11. Komponenten Grundlagen der Programmierung 1 (Java)

MDA-Praktikum, Einführung

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

Iterative Softwareentwicklung. Ullrich Köthe 19. April 2001

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

Programmverstehen 3: Detailliertes Verständnis. Dr. Thorsten Arendt Marburg, 10. Dezember 2015

DR. MICHAEL EICHBERG. Einführung in Software Eingineering

Algorithmen und Programmierung II

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

Datenbanken Datenbanken 1 Belegnummer Belegnummer

SmallTalk - Eine kurze Einführung

Die Unified Modeling Language (UML)

Extreme Programming (XP)

Reengineering und Refactoring von Softwarearchitekturen

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

Benchmarking von Bilddatenstrukturen

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 14: Interfaces

Requirements Engineering I

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

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

Software Engineering II (IB) Softwareevolution

Buchvorstellung Domain-Driven Design

Testen von graphischen Benutzeroberflächen. 24. Juni 2015

Software Engineering II (IB) Softwareevolution

Open Source IDE - eclipse ETIS SS04

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

Refactoring relationaler Datenbank. Shaoke Wu

Langlebige Softwarearchitekturen

Vererbung. Florian Adamsky, B. Sc. (PhD cand.) Softwareentwicklung im WS 2014/15.

Modellgetriebene Softwareentwicklung: Zusammenfassung und Ausblick. 11. Februar 2015

Übung Einführung in die Softwaretechnik

Die Verwendung der Object Constraint Language (OCL) in UML-Modellen

C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17

Clean Java Von Anfang an!

Qualität von Software und Softwaremodellen Seminar der AG Softwaretechnik im Sommer-Semester 2013

Javakurs für Anfänger

Software Wartung und Evolution

GUI-Entwicklung 2: Windows Presentation Foundation

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

Einführung in die Objektorientierung

Transkript:

Software-Refactoring 29. Mai 2013

Ü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 2013 112

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 2013 113

Wozu dient Refactoring? Verbesserung der Software, wobei die Funktionalität unverändert bleibt aus Sicht des Benutzers nicht (oder kaum) bemerkbar Erhöhung der Übersichtlichkeit und Verständlichkeit vereinfachte Wartbarkeit und Erweiterbarkeit verbesserte Lesbarkeit leichter testbar bessere Modularität (bessere Wiederverwendbarkeit) Taentzer Softwarequalität 2013 114

Refactoring-Beispiel 1 Taentzer Softwarequalität 2013 115

Refactoring-Beispiel 2 Ersetze Typkonstanten durch Unterklassen Taentzer Softwarequalität 2013 116

Ziel: Beispiel: Ersetze Typkonstanten durch Unterklassen Varianten sind 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 2013 117

Welche Refactorings gibt es? mittlerweile ein umfangreicher Katalog typische Refactoring-Methoden: Umbenennungen (Felder, Methoden, Klassen, etc.) Entfernung von redundantem Code Verschiebung eines Symbols 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 2013 118

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

Konkrete Refactoring-Methoden 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 2013 120

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 2013 121

Wo führt man Refactorings durch? Problem: Wie findet man die Stellen, an den Refactorings durchgeführt werden sollten? Bad Code Smells: Anzeichen schlechter Programmstruktur Katalog über Bad Code Smells und passende Refactorings: http://www.industriallogic.com/blog/smells-torefactorings-cheatsheet/ Einführung von Design Patterns Taentzer Softwarequalität 2013 122

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 2013 123

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 2013 124

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 2013 125

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. IntelliJ IDEA Offene Fragen: Wie weist man Verhaltensbewahrung von Refactorings nach? Wie führt man kohärentes Refactoring von Model und Code durch? Taentzer Softwarequalität 2013 126

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. IntelliJ IDEA Offene Fragen: Wie weist man Verhaltensbewahrung von Refactorings nach? Wie führt man kohärentes Refactoring von Model und Code durch? Taentzer Softwarequalität 2013 127

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. IntelliJ IDEA Offene Fragen: Wie weist man Verhaltensbewahrung von Refactorings nach? Wie führt man kohärentes Refactoring von Model und Code durch? Taentzer Softwarequalität 2013 128