fachgebiet software engineering Übersicht © 22.01.2014 albert zündorf, kassel university 1...

47
Fachgebiet Software Engineering Übersicht © 26.06.22 Albert Zündorf, Kassel University 1 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“

Upload: anelie-zeglin

Post on 05-Apr-2015

108 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 1

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“

Page 2: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 2

Motivation

Aufgaben:

Wiedergewinnung von Design(Klassendiagramme, ...)

Finden von Funktionalität

Finden von Fehlerursachen

(Benutzt viele Compilertechniken)

Page 3: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 3

Inhalt

1. Volltextsuchtechniken (grep, google, find, ...)

2. Compiler basierte Techniken (Cross-Referencing, ...)

3. Dynamische Analysen

1. Code Instrumentierung / Tracing

2. Debugger Techniken

4. Analyse der Versionshistorie

5. Auswertung und Visualisierung (Clustering, ...)

Page 4: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 4

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 . . .

Page 5: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 5

Suchen in IDEs (Eclipse)

Edit -> Find(Ctrl-F)

• suchen in aktueller Datei

Page 6: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 6

Suchen in IDEs (Eclipse)

• suchen in allen Dateien des Projekts

Page 7: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 7

4. Suchen:

1. TODO

2. Edit class dialog

3. File Save As Implementierung

4. Unterklassen von UMLDiagram

5. Fehlermeldung:

1. Unnamed class diagram

2. log4j: ERROR setFile(null,true) call failed.

3. CFG-parse error during code generation for NewClass::m1-> Abnormal termination in control flow

4. java.lang.RuntimeException: Transition guards null and null are incompatible

6. Alle anwendenden Vorkommen von getName() der Klasse UMLClass

7. Wo wird "public" Flag für Klassen in der Codegenerierung erzeugt

Page 8: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 8

Aufgaben zur Volltextsuche:

4. Suchen:

....

6. Alle anwendenden Vorkommen von getName() der Klasse UMLClass

Compilertechniken notwendig(nächste Woche)

Die war gemein

Page 9: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 9

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

Page 10: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 10

JavaDoc zu File: /**

* 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

Page 11: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 11

Einsatz von Compilertechniken:

Symboltabellen

Cross Referencing

Page 12: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 12

Erweiterte Symboltabelle

Page 13: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 13

Page 14: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 14

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

Page 15: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 15

Compilerbau Nachlese

reguläre Ausdrücke: einfach aber ungenau

Compilerbau: 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

Page 16: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 16

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

Page 17: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 17

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)

Page 18: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 18

Übersicht1. Quelltextanalyse mit regulären Ausdrücken

2. Compilertechniken

3. Prozessanalyse

4. Dynamische Analyse

5. Datenanalyse

6. Design Pattern Erkennung

7. Analyse- und Visualisierungstechniken

1. Clustering

2. Plagiatserkennung

3. Refactoring

4. Hot Spots

5. Designmetriken

6. ...

Page 19: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 19

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

Page 20: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 20

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?

Page 21: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 21

Übersicht

1. Quelltextanalyse mit regulären Ausdrücken

2. Compilertechniken

3. Prozessanalyse

4. Dynamische Analyse

5. Datenanalyse

6. Design Pattern Erkennung

7. Analyse- und Visualisierungstechniken

1. Clustering

2. Plagiatserkennung

3. Refactoring

4. Hot Spots

5. Designmetriken

6. ...

Page 22: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 22

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

Page 23: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 23

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

Page 24: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 24

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

. . .

Page 25: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 25

Profiler

statistische Auswertung zeilengenauer Traces

DAS Mittel zur Effizienzsteigerung

Page 26: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 26

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

Page 27: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 27

Graphische Darstellung von Laufzeitdaten

JSpider

Dobs / Edobs

Aufgabe:

über welche Pointer findet man den Typ eines Attributs in einer Attributbedingung in einem Storydiagramm heraus?

Page 28: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 28

Graphische Darstellung von Laufzeitdaten

Datenlog Browser: Object Flipbook

Page 29: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 29

Design Pattern

Page 30: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 30

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;

}

Page 31: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 31

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);

}

Page 32: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 32

Identifizierung von bidirektionalen Assocs

finde paarweise auftretende add Operationen:

...x.addToN1 (y);y.setN2 (x);...

Achtung: das kann manchmal fuzzy sein

Page 33: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 33

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

Page 34: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 34

Design Pattern Erkennung Probleme Performance:

Parserbaum für Gesamtprogramm meist zu groß, dauert ewiglazy 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

Page 35: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 35

Übersicht1. Quelltextanalyse mit regulären Ausdrücken

2. Compilertechniken

3. Prozessanalyse

4. Dynamische Analyse

5. Datenanalyse

6. Analyse- und Visualisierungstechniken

1. Rigi

2. Clustering

3. Plagiatserkennung

4. Refactoring

5. Hot Spots

6. Designmetriken

7. ...

Page 36: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 36

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

Page 37: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 37

Ziele Heute

Nachtrag Visualisierungstool Rigi

Clustering mit Bunch

Poor Code Pattern Detection

Page 38: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 38

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

. . .

Page 39: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 39

Page 40: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 40

Page 41: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 41

seeSoft CodeCrawler

Page 42: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 42

Tarantula

Page 43: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 43

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

Page 44: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 44

Poor Code Pattern Detection

code smells, z.B.: jcosmo

google findbugs

anwenden auf eueren Parser

Page 45: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 45

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

Page 46: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 46

Probleme

Extract Method:

ersetze markierten Text durch Methode

bestimme Ausschnitt aus den Kontrollstrukturen

bestimme Parameter

eventuell bestimme Rückgabewert

Ablehnen bei mehreren Rückgabewerten

Page 47: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University 47

Einordnung

oft extrem praktisch

sehr viele unterschiedliche Refactorings vorstellbar

Challenge: identifiziere "häufige" Umbauoperationen Benutzer muss die kennen