Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Reverse Engineering Neuentwicklung von Software ist die Ausnahme => Weiterentwicklung von Legacy-Systemen Designdokumentation veraltet Aufgabenstellung:"—  Präsentation transkript:

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? (http://www.se.eecs.uni-kassel.de/~cvscheck/repositories/Fujaba/statcvs-xml-out/ ) 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


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

Ähnliche Präsentationen


Google-Anzeigen