Reverse Engineering Neuentwicklung von Software ist die Ausnahme => Weiterentwicklung von Legacy-Systemen Designdokumentation veraltet Aufgabenstellung:

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Einführung in die Informatik: Programmierung und Software-Entwicklung
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Kapselung , toString , equals , Java API
Progwerkstatt JAVA Klasse, Objekte, Konstruktoren, Methoden
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Java: Grundlagen der Sprache
Java: Grundlagen der Objektorientierung
Konstruktoren.
Assoziationen (Beziehungen). Zwischen Objekten kann es eine Beziehung geben.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Rigi und Web2Rsf vorgestellt von Tobias Weigand. Inhalt Ziel von Web2Rsf und Rigi Vorstellung des Parsers Web2Rsf Vorstellung des Werkzeugs Rigi Analyse.
Brandenburgische Technische Universität Cottbus Program Profiling Andrzej Filipiak Übung Testen von Software SoSe 2006.
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 6. Story Driven Modeling Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University Projektplan: m : Anforderungsanalyse Dokument m :
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester.
Reverse Engineering K2 1 Ziele Heute Nachlese Volltextsuche Dokumentation in Quelltext einbetten JavaDoc Vorbereitung für Compileransatz.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
1 Reverse Engineering WS 07 / 08 A. Zündorf. Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University 2 Organisatorisches.
A. Zündorf, SE Group Reverse Engineering K2 1 Übersicht 1.Quelltextanalyse mit regulären Ausdrücken 2.Compilertechniken 3.Prozessanalyse 4.Dynamische Analyse.
A. Zündorf, SE Group Reverse Engineering K2 1 Reverse Engineering: Ziele Heute Compileransatz, die Zweite Findet UMLClass getName() Vorkommen Completion.
A. Zündorf, SE Group Reverse Engineering K2 1 Übersicht 1.Quelltextanalyse mit regulären Ausdrücken 2.Compilertechniken 3.Prozessanalyse 4.Dynamische Analyse.
A. Zündorf, SE Group Reverse Engineering K2 1 Übersicht 1.Quelltextanalyse mit regulären Ausdrücken 2.Compilertechniken 3.Prozessanalyse 4.Dynamische Analyse.
A. Zündorf, SE Group Reverse Engineering K2 1 Ziele Heute Compilerbau Nachlese Ausnutzung von Laufzeittypinformation.
Reverse Engineering 1 Reverse Engineering WS 04 / 05 A. Zündorf.
A. Zündorf, SE Group Reverse Engineering K2 1 Übersicht 1.Quelltextanalyse mit regulären Ausdrücken 2.Compilertechniken 3.Prozessanalyse 4.Dynamische Analyse.
A. Zündorf, SE Group Reverse Engineering K2 1 Übersicht 1.Quelltextanalyse mit regulären Ausdrücken 2.Compilertechniken 3.Prozessanalyse 4.Dynamische Analyse.
A. Zündorf, SE Group Reverse Engineering K2 1 Übersicht 1.Quelltextanalyse mit regulären Ausdrücken 2.Compilertechniken 3.Prozessanalyse 4.Dynamische Analyse.
A. Zündorf, SE Group Reverse Engineering K2 1 Ziele Heute Compilerbau Nachlese Ausnutzung von Laufzeittypinformation.
Vortrag III Hier in der Vorlesungszeit! Anwesenheitspflicht Jede Gruppe hat 6 Minuten! Stellt eure GUI vor –was ihr besonderes gemacht habt –Spektakuläre.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University Test Summary: m ein Fehler pro Tag m Test First m Funktionstests.
Model Driven Engineering SS 10 Prof. Albert Zündorf Fachgebiet für Software Engineering Wilhelmshöher Allee Kassel (Raum 1339)
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Einführung in die Programmierung Datensammlung
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 7 Sitzung 7: User Interfaces in Java.
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University Test Summary: m ein Fehler pro Tag m Test First m Funktionstests.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
20:00.
Die Geschichte von Rudi
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
HORIZONT 1 XINFO ® Das IT - Informationssystem Assembler HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 /
Dynamische Datentypen
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Das IT - Informationssystem
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
Test Summary: ein Fehler pro Tag Test First
 Präsentation transkript:

Reverse Engineering Neuentwicklung von Software ist die Ausnahme => Weiterentwicklung von Legacy-Systemen Designdokumentation veraltet Aufgabenstellung: „Ah prima, dass sie da sind, wir wollen für unser System (2 Millionen LOC) XML Support, bauen sie das doch mal ein“ Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Motivation Aufgaben: Wiedergewinnung von Design (Klassendiagramme, ...) Finden von Funktionalität Finden von Fehlerursachen (Benutzt viele Compilertechniken) Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Inhalt Volltextsuchtechniken (grep, google, find, ...) Compiler basierte Techniken (Cross-Referencing, ...) Dynamische Analysen Code Instrumentierung / Tracing Debugger Techniken Analyse der Versionshistorie Auswertung und Visualisierung (Clustering, ...) Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

1. Volltextsuche Low-Tech Ansätze: Compiler-Ansätze versagen oft: unterschiedliche (alte) Sprachversionen Mix aus vielen Sprachen zusätzliche Textdateien Sprachunabhängige Mechanismen Suchen mit regulären Ausdrücken Diff . . . Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Suchen in IDEs (Eclipse) suchen in aktueller Datei Edit -> Find (Ctrl-F) Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Suchen in IDEs (Eclipse) suchen in allen Dateien des Projekts Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

4. Suchen: TODO Edit class dialog File Save As Implementierung Unterklassen von UMLDiagram Fehlermeldung: Unnamed class diagram log4j: ERROR setFile(null,true) call failed. CFG-parse error during code generation for NewClass::m1 -> Abnormal termination in control flow java.lang.RuntimeException: Transition guards null and null are incompatible Alle anwendenden Vorkommen von getName() der Klasse UMLClass Wo wird "public" Flag für Klassen in der Codegenerierung erzeugt Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Aufgaben zur Volltextsuche: 4. Suchen: .... Alle anwendenden Vorkommen von getName() der Klasse UMLClass  Compilertechniken notwendig (nächste Woche) Die war gemein Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Aufgaben zur Volltextsuche: Resumee: Große Dateisysteme können schnell durchsucht werden Man muss "geschickt" suchen: Textstücke manchmal zusammengesetzt Manchmal Zeilenumbrüche  False Negatives: einige gesuchte Stellen werden nicht gefunden False Positives: es werden falsche Treffer angezeigt Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

JavaDoc zu File: Embedded Doku erlaubt gewisse Konsistenzprüfungen /** * Tests whether the file denoted by this abstract pathname is a * directory. * * @return <code>true</code> if and only if the file denoted by this * abstract pathname exists <em>and</em> is a directory; * <code>false</code> otherwise * * @throws SecurityException * If a security manager exists and its <code>{@link * java.lang.SecurityManager#checkRead(java.lang.String)}</code> * method denies read access to the file */ public boolean isDirectory() { Embedded Doku erlaubt gewisse Konsistenzprüfungen  Doku wird mitgewartet  Doku ist aktueller Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Einsatz von Compilertechniken: Symboltabellen Cross Referencing Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Erweiterte Symboltabelle Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Fachgebiet Software Engineering. Übersicht. © 27. 03 Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Tipps zur Completion Methode proposeCompletions ließt Attribut toBeCompleted schreibt Vorschläge in possibleCompletions  CompletionSnipIt.txt von der Web Seite holen Testen mit FWT GUI Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Compilerbau Nachlese reguläre Ausdrücke: einfach aber ungenau genaue Analyse der Struktur von Texten Analyse von "statischer" Semantik per Symboltabelle (Cross Reference Table) Datenflussanalyse: "read-from" Beziehung Kontrollflulssanalyse: Ausführungsreihenfolgen Slicing: wer hat hier zum Wert der Variablen X beigetragen? Übung zu Hause: Importe mit Berücksichtigen Unbekannte Klassen per ClassLoader suchen Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Slicing Backward Slicing: was trägt zur aktuellen Zeile bei? Forward Slicing wo werden die Ergebnisse der aktuellen Zeile weiter verwendet Eigentlich toll Probleme: Fallunterscheidungen / Schleifen Vererbung Points-To-Analysis praktisch bisher nur selten verwendbar Hauptsächlich für C verbreitet Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Ausnutzung von Laufzeittypinformation schreibt Methode ClassFinder.addDotClassToSymbolTable() benutz java.lang.reflect Class.forName (String) Class. getDeclaredMethods () Method.getName () . . . Class.getDeclaredFields () Field.getName() Class.getInterfaces () Class.getSuperClass () testet im Dobs ClassFinder.addDotClassToSymbolTable ("java.lang.System"), ... Berücksichtigt im Parser die Importe Versucht unbekannte Klassen per ClassLoader zu laden (inklusive Attribute und Methoden) Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Übersicht Quelltextanalyse mit regulären Ausdrücken Compilertechniken Prozessanalyse Dynamische Analyse Datenanalyse Design Pattern Erkennung Analyse- und Visualisierungstechniken Clustering Plagiatserkennung Refactoring Hot Spots Designmetriken ... Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Versionsgeschichte Delta basierte Speicherung Pro Chunk: File und Zeile alter und oder neuer Text Datum der Änderung Autor Alte Zustände rekonstruierbar Letzter Autor einer Zeile Beitrag eines Autors (pro Zeitraum) . . . Delta Debugging Related Change Analysis Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Prozessanalyse Aufgabe: Wer hat wann die Methode getName der Klasse UMLClass gebaut? (Im Navigator – Contextmenu – Team – Show Annotation) Was wurde seit Donnerstag in UMLClass geändert? (Team – Compare With – By Date, New Date) Was wurde gleichzeitig noch verändert? Von wem? Wer hat die meisten Zeilen zum Fujaba Kern beigetragen? (http://www.se.eecs.uni-kassel.de/~cvscheck/repositories/Fujaba/statcvs-xml-out/ ) Wieviele? In welchen Packages? Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Übersicht Quelltextanalyse mit regulären Ausdrücken Compilertechniken Prozessanalyse Dynamische Analyse Datenanalyse Design Pattern Erkennung Analyse- und Visualisierungstechniken Clustering Plagiatserkennung Refactoring Hot Spots Designmetriken ... Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Debugger schrittweise Ausführung step over / step into conditional breakpoints manuell ein mühsames Geschäft JDI Programmierschnittstelle zur "Fernsteuerung" eines Debuggers Aufgabe: setzt einen Conditional Breakpoint auf System.out.println und findet Welcome To Fujaba Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Code Instrumentierung System.out.println am Anfang und am Ende jeder Methode => alle Methodenaufrufe und Rücksprünge nachvollziehbar (Auswertung durch zusätzliches Programm) noch genauer System.out.println bei jedem If und jeder Schleife => Statement Abfolge eindeutig rekonstruierbar Quellcodeinstrumentierung mit Compilertechniken (Aspektorientierte Techniken) Bei Java oft Byte-Code Instrumentierung Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Code Instrumentierung (2) Unzählige Anwendungen: Logging (für sporadisch auftretende Fehler) Profiling (kommt gleich) Code Coverage Differenzanalyse Probleme: Trace wächst irrsinnig schnell (Meist Einschränkungen auf bestimmte Packages nötig) Programm Slow-Down . . . Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Profiler statistische Auswertung zeilengenauer Traces DAS Mittel zur Effizienzsteigerung Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Aufgaben Conditional Breakpoint auf System.out.print, findet Welcome to Fujaba eclemma installieren Aspect zum Tracen aller Method Calls schreiben Fujaba einmal normal starten und schließen Fujaba einmal starten und Projekt anlegen Alten und neuen Trace verlgeichen Welche Zeilen realisieren die AboutBox? Das gleiche noch mal mit den Easter Egg Bugs ausprobieren  Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Graphische Darstellung von Laufzeitdaten JSpider Dobs / Edobs Aufgabe: über welche Pointer findet man den Typ eines Attributs in einer Attributbedingung in einem Storydiagramm heraus? Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Graphische Darstellung von Laufzeitdaten Datenlog Browser: Object Flipbook Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Design Pattern Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Identifizierung von Zugriffsfunktionen Namenskonventionen: setXY, getXY Parameter- und Rückgabetypen müssen passen Im Rumpf Zugriff auf das ensprechende Attribut void setName (String value) { this.name = value; } Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Identifizierung von (zu-n) Assocs Problem: Speicherung in Container: Vector () neighbors; Eintragstyp unklar (wird mit Java 1.5 besser) Lösung: suche add Operationen und bestimme Eintragstyp: void addToNeighbors(C2 value) { this.neighbors.add (value); } Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Identifizierung von bidirektionalen Assocs finde paarweise auftretende add Operationen: ... x.addToN1 (y); y.setN2 (x); ... Achtung: das kann manchmal fuzzy sein Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Design Pattern Erkennung: Singleton privates, statisches Attribut vom Typ der eigenen Klasse public static get-Operation zur Initialisierung und zum Zugriff darauf public static get () { if (theInstance == null) { theInstance = new C (); } return theInstance; } eventuell private Konstruktor Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Design Pattern Erkennung Probleme Performance: Parserbaum für Gesamtprogramm meist zu groß, dauert ewig lazy Parsing der Methodenrümpfe Viele Implementierungsvarianten:  Fuzzy Pattern Detection: Kein 1 zu 1 Match von Code Fragmenten Vorkommen von z.B. Attributzugriff reicht (Dis Jörg Niere) Statische Analyse allein reicht nicht:  Traces analysieren (Current Work by Lothar Wendehals) Siehe Fujaba Reverse Engineering Tool Suite 4.2 www.fujaba.de UMLProject einparsen und analysieren. Mit anderen Klassen experimentieren Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Übersicht Quelltextanalyse mit regulären Ausdrücken Compilertechniken Prozessanalyse Dynamische Analyse Datenanalyse Analyse- und Visualisierungstechniken Rigi Clustering Plagiatserkennung Refactoring Hot Spots Designmetriken ... Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

http://www.rigi.csc.uvic.ca/ Rigi ist DAS Reverse Engineering Visualisierungstool Rigi scales Performante Layouts Rigi Standard Format RSF Rigi Command Language Many "Fact Extractors" Many "Fact Users" Clones wie Shrimp Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Ziele Heute Nachtrag Visualisierungstool Rigi Clustering mit Bunch Poor Code Pattern Detection Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Clustering Gruppierung von Knoten mit dem Ziel: großer Zusammenhang im Cluster wenig Zusammenhang zwischen Clustern Anzahl möglicher Partitionierungen riesengroß Heuristiken Hill Climbing Simulated Anealing Genetische Algorithmen Interaktive Verfahren . . . Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Fachgebiet Software Engineering. Übersicht. © 27. 03 Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Fachgebiet Software Engineering. Übersicht. © 27. 03 Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

seeSoft CodeCrawler Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Tarantula Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Bunch Tool http://serg.cs.drexel.edu/projects/bunch/index.html http://www.graphviz.org/About.php Module Dependency Graph MDG: Zeilen mit a b aus rigi/Rigi/db/list-d/rsf erste Spalte löschen Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Poor Code Pattern Detection code smells, z.B.: jcosmo google findbugs anwenden auf eueren Parser Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Refactoring Editor-Makros für komplexe Umbauoperationen Restrukturierung von Programmen Semantik erhaltend Beispiele: Extract Method Push Up Method / Push Down Method Change Method Signature Extract Interface Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Probleme Extract Method: ersetze markierten Text durch Methode bestimme Ausschnitt aus den Kontrollstrukturen bestimme Parameter eventuell bestimme Rückgabewert Ablehnen bei mehreren Rückgabewerten Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University

Einordnung oft extrem praktisch sehr viele unterschiedliche Refactorings vorstellbar Challenge: identifiziere "häufige" Umbauoperationen Benutzer muss die kennen Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University