Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Anelie Zeglin Geändert vor über 10 Jahren
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“ Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
2
Motivation Aufgaben: Wiedergewinnung von Design (Klassendiagramme, ...) Finden von Funktionalität Finden von Fehlerursachen (Benutzt viele Compilertechniken) Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
3
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 © 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 . . . Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
5
Suchen in IDEs (Eclipse)
suchen in aktueller Datei Edit -> Find (Ctrl-F) Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
6
Suchen in IDEs (Eclipse)
suchen in allen Dateien des Projekts Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
7
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 © Albert Zündorf, Kassel University
8
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 © 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 Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
10
JavaDoc zu File: Embedded Doku erlaubt gewisse Konsistenzprüfungen
/** * Tests whether the file denoted by this abstract pathname is a * directory * <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 * SecurityException * If a security manager exists and its * 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 © Albert Zündorf, Kassel University
11
Einsatz von Compilertechniken:
Symboltabellen Cross Referencing Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
12
Erweiterte Symboltabelle
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
13
Fachgebiet Software Engineering. Übersicht. © 27. 03
Fachgebiet Software Engineering Übersicht © 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 Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
15
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 © 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 Fachgebiet Software Engineering Übersicht © 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) Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
18
Ü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 © 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 Fachgebiet Software Engineering Übersicht © 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? ( ) Wieviele? In welchen Packages? Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
21
Ü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 © 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 Fachgebiet Software Engineering Übersicht © 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 Fachgebiet Software Engineering Übersicht © 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 . . . Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
25
Profiler statistische Auswertung zeilengenauer Traces
DAS Mittel zur Effizienzsteigerung Fachgebiet Software Engineering Übersicht © 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 Fachgebiet Software Engineering Übersicht © 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? Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
28
Graphische Darstellung von Laufzeitdaten
Datenlog Browser: Object Flipbook Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
29
Design Pattern Fachgebiet Software Engineering Übersicht © 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; } Fachgebiet Software Engineering Übersicht © 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); } Fachgebiet Software Engineering Übersicht © 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 Fachgebiet Software Engineering Übersicht © 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 Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
34
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 UMLProject einparsen und analysieren. Mit anderen Klassen experimentieren Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
35
Ü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 © Albert Zündorf, Kassel University
36
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 © Albert Zündorf, Kassel University
37
Ziele Heute Nachtrag Visualisierungstool Rigi Clustering mit Bunch
Poor Code Pattern Detection Fachgebiet Software Engineering Übersicht © 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 . . . Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
39
Fachgebiet Software Engineering. Übersicht. © 27. 03
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
40
Fachgebiet Software Engineering. Übersicht. © 27. 03
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
41
seeSoft CodeCrawler Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
42
Tarantula Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
43
Bunch Tool http://serg.cs.drexel.edu/projects/bunch/index.html
Module Dependency Graph MDG: Zeilen mit a b aus rigi/Rigi/db/list-d/rsf erste Spalte löschen Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
44
Poor Code Pattern Detection
code smells, z.B.: jcosmo google findbugs anwenden auf eueren Parser Fachgebiet Software Engineering Übersicht © 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 Fachgebiet Software Engineering Übersicht © 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 Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
47
Einordnung oft extrem praktisch
sehr viele unterschiedliche Refactorings vorstellbar Challenge: identifiziere "häufige" Umbauoperationen Benutzer muss die kennen Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.