SOMA Reverse Engineering Univ.Prof. Dr. Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at
Inhalt Was versteht man unter Reverse Engineering? Techniken/Methoden Probleme VU Software Maintenance 2
Engineering vs. Reverse Engineering Idee Engineering Task Produkt/ System VU Software Maintenance 3
Abstraktion Wesentlicher Bestandteil von Reverse Engineering ist die Extraktion von Wissen auf einer geeigneten Verständnisebene. 3 Arten der Abstraktion: Funktionenabstraktion Datenabstraktion Prozeßabstraktion VU Software Maintenance 4
Funktionenabstraktion Prozedurabstraktion Gewinnung von Wissen über die Funktionsweise einer Funktion oder Prozedur. Beispiel: pop(s) nimmt das oberste Element vom Stack s und liefert es zurück. VU Software Maintenance 5
Datenabstraktion Gewinnung von Wissen über die verwendeten Datenmodelle ohne Berücksichtigung der Implementierungsdetails. Beispiel: Mengen/Set-Implementierung über Listen. VU Software Maintenance 6
Datenabstraktion Set Set union Set List List list_union List VU Software Maintenance 7
Prozeßabstraktion Gewinnung von Wissen über den Programmablauf/Prozeß. Das exakte Verhalten wird dabei nicht betrachtet. VU Software Maintenance 8
Ziele des Reverse Engineerings Wiederherstellung verlorener Information Unterstützung der Migration zwischen unterschiedlichen Plattformen Verbesserung bzw. Wiederherstellung von Dokumentation Bereitstellung unterschiedlicher Sichtweisen auf ein Programm Extraktion wiederverwertbarer Komponenten Unterstützung im Umgang mit Komplexitäten Erkennen von Seiteneffekten Reduktion des Wartungsaufwands VU Software Maintenance 9
Abstraction HIGH LOW Ebenen des Reverse Engineerings Specification Design Implementation Redocumentation Specification recovery Design recovery Redocumentation Redocumentation Reverse Engineering VU Software Maintenance 10
Redocumentation Ziel: Erzeugung von semantisch äquivalenter Dokumentation innerhalb der selben Abstraktionsebene. Zweck: Erzeugung alternativer Ansichten Verbesserung bestehender Dokumentation Erzeugung von Dokumentation eines modifzierten Programms VU Software Maintenance 11
Techniken Graphische Programmrepräsenation Control Flow Graphs (CFG) Struktogramme Entity-Relationship-Diagramme Klassendiagramme... VU Software Maintenance 12
Control-Flow-Graphs S1 E S1 S2 TRUE S1 FALSE S2 TRUE E FALSE S1; S2 if E then S1 else S2 do S1 while E VU Software Maintenance 13
Struktogramme S1; S2 S1 S2 if E then S1 else S2 true S1 E false S2 do S1 while E E S1 VU Software Maintenance 14
Beispiel public int foo (int x,y) { int i = 0; int result = 0; while (i < x) { result = result + y; i = i + 1; } return result; } VU Software Maintenance 15
Design Recovery Ziel: Gewinnung von höheren Abstraktionen direkt aus dem Source Code. Zweck: Gewinnung von Designinformation für Maintenance oder Neuentwicklung. Gewinnung für Wissen um andere Applikationen entwickeln zu können. VU Software Maintenance 16
Sichtweisen Design Recovery Erkennung von Kontrollstrukturen, Datentypen, Module, Klassenhierarchien. Erkennung von Muster Abhängig von der Domäne Ableitung der Softwarearchitektur eines Systems VU Software Maintenance 17
Programmiermuster while(i<a.length) do... F(A[i])... i=i+1;... Anwendung von F auf alle Elemente in einem Array end while; VU Software Maintenance 18
Specification Recovery Ziel: Gewinnung von Spezifikationswissen aus Systeminformationen (Source Code, Dokumentation,..). Notwendig wenn: Designwissen oft nicht ausreichend. Paradigmenshift im Design (Strukturierte Programmierung vs. OO) VU Software Maintenance 19
Wann ist Reverse Engineering notwendig? Fehlendes oder unvollständiges Design/Spezifikation Ungenügende Dokumentation Schlecht strukturierter Source Code Programmtransformation Sicherstellung Programmkompatibilität Migration auf andere HW/SW-Plattformen Steigende Fehlerrate Herstellung ähnlicher Produkte VU Software Maintenance 20
Umstrukturierung des Control-flow-driven Source Codes Beispiel: Code mit Goto s in strukturierten Code umwandeln. Efficiency-driven Adaption driven Beispiel: Änderung im Coding Style; Änderung der Programmiersprache bzw. des Programmiersprachenparadigmas VU Software Maintenance 21
Efficiency-driven Restructuring if Score = 1 then Grade = A ; elseif Score = 2 then Grade = B ; elseif Score = 3 then Grade = C ; elseif Score = 4 then Grade = D ; else Grade = F ; end if case Score of 1: Grade= A 2: Grade= B 3: Grade= C 4: Grade= D else Grade = F end case VU Software Maintenance 22
Offene Probleme Automatisierung des Reverse Engineerings Identifizierung von Konzepten eines hohen Abstraktionsgrades Namensgebungsproblem Vergebung von sinnvollen Namen für Konzepte Domänenabhängigkeit! VU Software Maintenance 23
Zusammenfassung Reverse Engineering dient zur Extraktion von Wissen über ein Programm Reverse Engineering behandelt keine Modifikationsaufgaben Reverse Engineering ist für den Maintenance Prozeß wichtig Reverse Engineering ist teilweise automatisierbar VU Software Maintenance 24