Reverse Engineering 1
Reverse Engineering
WS 04 / 05
A. Zündorf
Reverse Engineering 2
Organisatorisches
Termine:• Montags 14:00 - ...
(Beginn 25.10.2004)Raum: CIP Pool unter der Mensa
• 15 Minuten Vorlesung, 75+ Minuten Übung am Rechner
• Klausur: Computerklausur am ?
Reverse Engineering 3
Motivation
• 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“
Reverse Engineering 4
Motivation
Aufgaben:• Wiedergewinnung von Design
(Klassendiagramme, ...)
• Finden von Funktionalität
• Finden von Fehlerursachen
• . . .
Reverse Engineering 5
Inhalt
1. Volltextsuchtechniken (grep, ...)
2. Compiler basierte Techniken (Cross-Referencing, ...)
3. Dynamische Analysen1. Code Instrumentierung / Tracing
2. Debugger Techniken
4. Analyse der Versionshistorie
5. JavaDoc und Google
6. Datenanalyse
7. Auswertung und Visualisierung (Clustering, ...)
Reverse Engineering 6
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
– . . .
Reverse Engineering 7
Suchen mit regulären Ausdrücken
Suchen in einer Datei/ im Texteditor:
grep –nH 'System.out.println' FujabaApp.java
Reverse Engineering 8
Suchen mit regulären Ausdrücken
Suchen in vielen Dateien:
grep –nH 'Welcome' *.java
Suchen in Dateibäumen:
find –name "*.java" | xargs grep –nHi "welcome"
Reverse Engineering 9
Suchen in IDEs (Eclipse)
Edit -> Find(Ctrl-F)
• suchen in aktueller Datei
Reverse Engineering 10
Suchen in IDEs (Eclipse)
• suchen in allen Dateien des Projekts
Reverse Engineering 11
Aufgaben zur Volltextsuche:
1. Studentpackage1 runterladen von:http://www.se.eecs.uni-kassel.de/se/index.php?re0405
2. In „Eigene Dateien“ entpacken
3. Eclipse starten1. Doppelclick auf Eclipse.exe
2. Welcome schließen
3. File -> New -> Project: Java Project
4. Project name: Fujaba
5. o Create Project at external location Browse (Fujaba Tool suite)
6. Compilieren lassen
7. Window -> Preferences: Java -> Compiler: Tab Advanced: Usage of deprecated API: Ignore
8. Alles sollte fehlerfrei durchcompilieren
Reverse Engineering 12
Reguläre Suchausdrücke in Eclipse
• Normaler Text: Hallo• Wort ...... Wort: This .* to
Reverse Engineering 13
Aufgaben zur Volltextsuche:
4. Suchen:1. TODO
2. Edit class dialog
3. File Save As Implementierung
4. Unterklassen von UMLDiagram
5. 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
6. Alle anwendenden Vorkommen von getName() der Klasse UMLClass
7. Wo wird "public" Flag für Klassen in der Codegenerierung erzeugt