Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme."—  Präsentation transkript:

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

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

3 Fachgebiet Software Engineering Übersicht © 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,...)

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

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

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

7 Fachgebiet Software Engineering Übersicht © 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

8 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

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

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

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

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

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

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

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

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

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

18 Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University 18 Ü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....

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

20 Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University 20 Prozessanalyse Aufgabe: m Wer hat wann die Methode getName der Klasse UMLClass gebaut? (Im Navigator – Contextmenu – Team – Show Annotation) m Was wurde seit Donnerstag in UMLClass geändert? (Team – Compare With – By Date, New Date) m Was wurde gleichzeitig noch verändert? m Von wem? m Wer hat die meisten Zeilen zum Fujaba Kern beigetragen? ( out/ ) out/ m Wieviele? m In welchen Packages?

21 Fachgebiet Software Engineering Übersicht © 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....

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

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

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

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

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

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

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

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

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

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

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

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

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

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

36 Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University 36 m Rigi ist DAS Reverse Engineering Visualisierungstool m Rigi scales m Performante Layouts m Rigi Standard Format RSF m Rigi Command Language m Many "Fact Extractors" m Many "Fact Users" m Clones wie Shrimp

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

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

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

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

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

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

43 Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University 43 Bunch Tool m m m Module Dependency Graph MDG: Zeilen mit a b m aus rigi/Rigi/db/list-d/rsf erste Spalte löschen

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

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

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

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


Herunterladen ppt "Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University 1 Reverse Engineering m Neuentwicklung von Software ist die Ausnahme."

Ähnliche Präsentationen


Google-Anzeigen