Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat...

25
Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team: Lukas Felber Thomas Corbat Mirko Stocker Betreuung: Prof. Peter Sommerlad Experte: Dr. Dirk Bäumer

Transcript of Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat...

Page 1: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Ruby Refactoring Plug-Infür Eclipse

Präsentation Diplomarbeit

Team: Lukas FelberThomas CorbatMirko Stocker

Betreuung: Prof. Peter SommerladExperte: Dr. Dirk Bäumer

Page 2: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 2Lukas Felber, Mirko Stocker, Thomas Corbat

Übersicht

• Einführung

• Studienarbeit

• RefactoringsPro Refactoring:

• Demo• Erläuterungen

• Testen

• Fragen

Page 3: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 3Lukas Felber, Mirko Stocker, Thomas Corbat

Einführung - RDT

• Ruby Development Tools

• IDE basierend auf Eclipse

• Grundlage von RadRails

• Features wie:– TestUnit Runner– Debugging– Code Completion

Page 4: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 4Lukas Felber, Mirko Stocker, Thomas Corbat

Einführung - JRuby

• Ruby Implementierung in Java

• Stellt einen AST zur Verfügung – ohne Kommentare– optimiert für Interpretation

Page 5: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 5Lukas Felber, Mirko Stocker, Thomas Corbat

Studienarbeit

• Comment Handling

• Positions-Fehler

• AST-Rewriter

• Basis für Refactorings

Page 6: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 6Lukas Felber, Mirko Stocker, Thomas Corbat

Refactorings Studienarbeit

• Code Generators:– Generate Accessors– Generate Constructors Using Fields– Override Method

• Refactorings:– Push Down Method– Rename Local Variable

Page 7: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 7Lukas Felber, Mirko Stocker, Thomas Corbat

Refactoring Basis Komponenten

• Refactoring Wizard• Ruby Refactoring• Edit Provider• Document Provider• Condition Checker

RefactoringWizard

EditProvider

DocumentProvider ConditionChecker

MyRefactoring

RubyRefactoring

Page 8: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 8Lukas Felber, Mirko Stocker, Thomas Corbat

Refactorings

• Convert Local Variable to Field

• Encapsulate Field• Extract Method• Move Method• Move Field• Split Temporary Variable• Inline Method

• Inline Class• Inline Temp• Merge Class Parts• Rename Field• Rename Method• Rename Class• Rename Local Variable

Page 9: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 9Lukas Felber, Mirko Stocker, Thomas Corbat

Convert Local Variable to Field

• Alle vorkommen der angewählten lokalen Variable finden

• Falls gewünscht Deklaration der lokalen Variable entfernen und Deklaration des Feldes in Konstruktor einfügen.

• Lokale Variablen durch Feld ersetzen

Page 10: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 10Lukas Felber, Mirko Stocker, Thomas Corbat

Encapsulate Field

• Accessors für selektiertes Feld finden

• Entsprechende getter- und setter-Methoden generieren

• Bestehende Accessors löschen

Ruby Accessors:attr_accessor :myPublicFieldattr_reader :myReadableFieldattr_writer:myWritableField

Accessors ermöglichen den Zugriff aufFelder von ausserhalb einer Klasse.

Page 11: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 11Lukas Felber, Mirko Stocker, Thomas Corbat

Extract Method

• Falls nötig aktuelle Selektion sinnvoll erweitern• Selektierten Codeblock ermitteln• Lokale Variablen, welche als Argumente benötigt

werden, ermitteln.• Rückgabewerte ermitteln (in Ruby auch mehrere

möglich).• Selektierter Codeblock mit Methodenaufruf

ersetzen und neue Methodendefinition einfügen

Page 12: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 12Lukas Felber, Mirko Stocker, Thomas Corbat

Move Method

• movingMethod ermitteln und verschieben• Falls verlangt delegate-Method in SourceClass einfügen• Referenzen anpassen:

– Aufrufe von movingMethod in SourceClass– Aufrufe von SourceClass Methoden in movingMethod– Zugriffe auf Felder von SourceClass in movingMethod

• Accessoren und Methoden-Visibility anpassen, dass alle Referenzen gültig bleiben

movingMethod()

SourceClass TargetClass

Page 13: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 13Lukas Felber, Mirko Stocker, Thomas Corbat

Move Field

• Feld in eine andere Klasse verschieben:– Accessors in Zielklasse erstellen, in

Quellklasse durch Delegate-Methode ersetzen

– Verwendung innerhalb der Quellklasse auf Zielklasse delegieren

Page 14: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 14Lukas Felber, Mirko Stocker, Thomas Corbat

Split Temporary Variable

• Jeder Verwendung einer lokalen Variablen einen neuen Namen zuweisen

• Prinzipiell wie Rename Local Variable, nur in anderem Scope

Page 15: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 15Lukas Felber, Mirko Stocker, Thomas Corbat

Inline Method

• Ersetzt Methodenaufruf durch Definiton– Parameter umbenennen oder neu einführen– Aufrufe von self auf Referenz umbiegen– returns entfernen und Werte zuweisen– auf Wunsch Definition löschen

• Bedingungen:– Höchstens ein return-Aufruf– return muss am Ende stehen

Page 16: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 16Lukas Felber, Mirko Stocker, Thomas Corbat

Inline Class

• Integrieren der Funktionalität einer Klasse in eine andere.

• Restriktion:

– Aufnehmende Klasse muss eine Instanz der Ziel-Klasse in ihrem Konstruktor anlegen.

– Dieser Aufruf des nicht mehr existierenden Konstruktors wird durch die eigene Instanz ersetzt.

• Ablauf:

– Auswahl der Zielklasse

– Verschieben der Methoden und Felder

– Umbenennen der Methoden und Felder bei Konflikten

– Verschieben und Umbenennen des Konstruktors

– Löschen der integrierten Klasse

Page 17: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 17Lukas Felber, Mirko Stocker, Thomas Corbat

Inline Temp

• Ersetzt eine lokale Variable durch deren Wert.

• Ersetzung durch Methodenaufruf möglich.• Restriktionen:

– Nur eine Zuweisung der Variable– Keine Selbstzuweisung– Keine Parameter

• Problem:– Veränderung von mathematischen Ausdrücken

Code: Nach Ersetzung: Besser wäre:

summe = 5 + 5produkt = summe * 5 produkt = 5 + 5 * 5 produkt = (5 + 5) * 5

--------------------------------- -------------------------------- ---------------------------produkt hat den Wert 50 produkt hat den Wert 30 produkt: 50

Page 18: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 18Lukas Felber, Mirko Stocker, Thomas Corbat

Merge Class Parts

• Zusammenziehen von Klassenteilen• Zwei Refactorings für Teile in derselben

Datei und Teile in mehreren Dateien• Ablauf:

– Selektion der Klassen-Teile– Auswahl der Ziel-Definition– Verschieben der Teile ans Ende der Ziel-

Definition

Page 19: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 19Lukas Felber, Mirko Stocker, Thomas Corbat

Rename Field

• Umbenennen eines Feldes• Vorgehen:

– Der Cursor muss auf einem Feld platziert werden

– Eingabe eines neuen gültigen Namens– Vorschlag der umzubenennenden Vorkommen– Auswahl der umzubenennenden Vorkommen– Umbenennen der Accessors

Page 20: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 20Lukas Felber, Mirko Stocker, Thomas Corbat

Rename Method

• Umbenennen einer Methode• Vorgehen:

– Selektion einer Methoden-Definition– Eingabe eines neuen gültigen Namens– Vorschlag der umzubenennenden Aufrufe– Auswahl der umzubenennenden Aufrufe

Page 21: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 21Lukas Felber, Mirko Stocker, Thomas Corbat

Rename Class

• Klasse umbenennen:– Instanzierungen– andere Definitonen derselben Klasse– Subklassen

Page 22: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 22Lukas Felber, Mirko Stocker, Thomas Corbat

Rename Local Variable

• Lokale Variablen beinhaltet:– “normale”, lokale Variablen– Methodenargumente– Variablen in Blöcken, |foo, bar|

Page 23: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 23Lukas Felber, Mirko Stocker, Thomas Corbat

Testen

• JUnit-Tests

• File Driven Tests– Dateien für Original und erwartetem Resultat– Konfiguration für Refactoring in Property-File– Keine Änderungen an Java-Code für neue

Tests

• Continuous Integration mit Cruise Control

Page 24: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 24Lukas Felber, Mirko Stocker, Thomas Corbat

Ausblick

• Integration in RDT / JRuby

• Weiterentwicklung– Weiter Refactorings– Adaption an neue Versionen (Ruby/JRuby/RDT)– Erweiterung bestehender Refactorings

• Comment Handling

Page 25: Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Team:Lukas Felber Thomas Corbat Mirko Stocker Betreuung:Prof. Peter Sommerlad Experte:Dr.

Page 25Lukas Felber, Mirko Stocker, Thomas Corbat

Ende

Fragen