Software Reengineering Werkzeuge und Prozesse Andreas Winter AG Wartung 15. Oktober 2004
Überblick Software Reengineering Reengineering Werkzeuge (unser) Reengineering Begriff Reengineering Maßnahmen und Prozesse Reengineering Werkzeuge GUPRO (Generische Umgebung zum Programmverstehen) Interoperabilität von Reengineering Werkzeugen GXL (Graph eXchange Language) Zusammenfassung AG Wartung 15. Oktober 2004
Software Reengineering … Verlängerung des Software- Lebens Ziel: [Chikofsky/Cross, 1990] …"is the examination and alteration of a sub-ject system to reconstitute it in a new form … This may include modifications with respect to new requirements …" [Smith et al. 1995 (SEI)] … "is the systematic transformation of an existing system into a new form to realize quality improvements in operation, system capability, functionality, performance, or maintainability and supportability at a lower cost, schedule, or risk to the customer" AG Wartung 15. Oktober 2004
Software Reengineering Reengineering Kategorien Wartung Erhaltung Erweiterung Migration Integration Sanierung Re-Dokumentation Ablösung Ziel-setzung Software- system Software- system Reengineering AG Wartung 15. Oktober 2004
Reengineering Maßnahmen korrektive Wartung: unverzügliche Beseitigung von Fehlern, (Release-getriebe) korrektive Systemerhaltung: Behebung von Fehlern in der nächsten ausgelieferten Version Erweiterung/Adaption: Anpassung an geänderte Anforderungen Migration: Überführung von Softwaresystemen in andere Zielumgebungen Integration: Kombination verschiedener Softwaresysteme Sanierung: Verbesserung der Softwarequalität (ohne Änderung der Funktionalität) Re-Dokumentation: nachträgliche Erstellung von Dokumentationen Ablösung: Vorbereitung der Außerdienststellung eines Softwaresystems vgl. [Sneed+2004] AG Wartung 15. Oktober 2004
Reengineering Prozesse Behauptungen Unterschiedliche Reengineering Maßnahmen erfordern unterschiedliche Vorgehensweisen Vorgehensweisen für einzelne Reengineering Maßnahmen lassen sich als Varianten eines Referenz-Prozess- Modells auffassen konkrete Reengineering Projekte folgen problem-bezogenen Anpassungen dieser Varianten AG Wartung 15. Oktober 2004
GUPRO Generische Umgebung zum Programmverstehen Werkzeuge GUPRO Generische Umgebung zum Programmverstehen AG Wartung 15. Oktober 2004
GUPRO Idee Anpassbares Werkzeug zur Progammanalyse unterstützt verschiedene Analysetechniken anpassbar an die meisten Analyseprobleme Verwendung von Graphentechnologie Graph-basierte, konzeptionelle Modellierung des Analyse-Problems Überführung des Softwaresystems in ein Graphen-Repository Analyse des Repositoryinhalts durch Graphanfragen und Graphenalgorithmik Verwendung extern entwickelter Komponenten Austausch von Reengineering-Daten mit GXL (Graph eXchange Language) AG Wartung 15. Oktober 2004
GUPRO Architektur Conceptual Model (Schema) Visualization Source Code Repository ex- tract view Visualization abstract AG Wartung 15. Oktober 2004
Graphen in GUPRO TGraphen: typisierte, attributierte, angeordnete, gerichtete Graphen AG Wartung 15. Oktober 2004
EER - Graph Schemas AG Wartung 15. Oktober 2004
Multi Language Conceptual Model AG Wartung 15. Oktober 2004
GEOS Conceptual Model AG Wartung 15. Oktober 2004
C Conceptual Model 14 AG Wartung 15. Oktober 2004
Analyse durch Graph-Anfragen GReQL (Graph Query Language): Graph-Anfragesprache mit regulären Pfadausdrücken Hüllenbildung erweiterbare Funktions- und Relationsbibliothek eingeschränkte Prädikatenlogik erster Stufe Syntax: FROM declaration WITH predicate REPORT result description END AG Wartung 15. Oktober 2004
Beispiel Caller/Callee-Paare FROM f, g: V{Function} WITH f --> {isCaller} <-- {isCallee} g REPORT f.name, g.name END [[ (main, max), (main, min) ]] AG Wartung 15. Oktober 2004
Beispiel Welche Programme werden durch JCL direkt gestartet? direkt oder indirekt gestartet? FROM jcl: V{JclProcedure} REPORT jcl.name, FROM called: V{Program} REPORT called.name END END WITH jcl <-- {isStepIn} <-- {isCalledIn} called (<-- {isModuleOf} --> {CallsProgram})* AG Wartung 15. Oktober 2004
Query Example Show "highest" superclass to each class is Class FROM class, super: V{Class} WITH class --> {isSubclassOf}* super AND outDegree{isSubclassOf} (super) = 0 REPORT class.name, super.name END 18 Class name is 0..* AG Wartung 15. Oktober 2004
GUPRO Workbench AG Wartung 15. Oktober 2004
Table View AG Wartung 15. Oktober 2004
GUPRO Code View AG Wartung 15. Oktober 2004
GUPRO-Projekte GUPRO ReSec GEOS LISA ReJob Analyse mehrsprachiger Softwaresysteme auf Architekturebene (Cobol, PL/1, CSP, JCL, IMS-DB, SQL) gefördert durch BMFT ReSec feingranulare Analyse zur Software- zertifizierung (C, Ada) GEOS Analyse eines mehrsprachigen Software- systems zum Aktienhandel (Java, C, C++, RDBMS) LISA feingranulare Analyse zur Sicherheits- überprüfung von LINUX ReJob Repository-Struktur für JCL AG Wartung 15. Oktober 2004
Interoperabilität von Reengineering Werkzeugen GXL Graph eXchange Language (www.gupro.de/GXL) AG Wartung 15. Oktober 2004
Reengineering Tools Gesucht: Visualization Source Code abstract ex- Repository ex- tract view Visualization abstract Gesucht: Standard Austauschformat für Reengineering Werkzeuge AG Wartung 15. Oktober 2004
Zielsetzung ausgetauschte Daten Mathematischesl Model Notation Instanzen (Graphen) Schemas (Graphklassen) Mathematischesl Model typisierte, attributierte, gerichtete, angeordnete Graphen erweitert um Hypergraphen und hierarchische Graphen Notation eXtensible Markup Language (XML) Unified Modeling Language (UML) AG Wartung 15. Oktober 2004
GXL Partners AG Wartung 15. Oktober 2004
gerichtete Graphen <node id = "v1"> <edge id = "e1" from = "v1" to = "v2"> </edge> <edge id = "e6 from = "v7" AG Wartung 15. Oktober 2004
typisierte, gerichtete Graphen <node id = "v1"> <type xlink:href =s.gxl #Function" /> </attr> </node> <node id = "v2"> <type xlink:href ="s.gxl #FunctionCall" /> <node id = "v7"> <type xlink:href ="s.gxl# Variable" /> <edge id = "e1" from = "v1" to = "v2"> #isCaller" /> </edge> <edge id = "e6 from = "v7" #isInput" /> <node id = "v1"> </node> <node id = "v2"> <node id = "v7"> ... <edge id = "e1" from = "v1" to = "v2"> </edge> <edge id = "e6 from = "v7" AG Wartung 15. Oktober 2004
typisierte, attributierte, gerichtete Graphen <node id = "v1"> <type xlink:href =s.gxl #Function" /> <attr name = "name"> <string>main</string> </attr> </node> <node id = "v2"> <type xlink:href ="s.gxl #FunctionCall" /> <node id = "v7"> <type xlink:href ="s.gxl# Variable" /> <string>b</string> <edge id = "e1" from = "v1" to = "v2"> #isCaller" /> <attr name = "line"> <int>8</int> </edge> <edge id = "e6 from = "v7" #isInput" /> <node id = "v1"> <type xlink:href =s.gxl #Function" /> </node> <node id = "v2"> <type xlink:href ="s.gxl #FunctionCall" /> <node id = "v7"> <type xlink:href ="s.gxl# Variable" /> <edge id = "e1" from = "v1" to = "v2"> #isCaller" /> </edge> <edge id = "e6 from = "v7" #isInput" /> AG Wartung 15. Oktober 2004
typisierte, attributierte, gerichtete, angeordnete Graphen <node id = "v1"> <type xlink:href =s.gxl #Function" /> <attr name = "name"> <string>main</string> </attr> </node> <node id = "v2"> <type xlink:href ="s.gxl #FunctionCall" /> <node id = "v7"> <type xlink:href ="s.gxl# Variable" /> <string>b</string> <edge id = "e1" from = "v1" to = "v2"> #isCaller" /> <attr name = "line"> <int>8</int> </edge> <edge id = "e6 from = "v7" to = "v2" toorder = "2"> #isInput" /> <node id = "v1"> <type xlink:href =s.gxl #Function" /> <attr name = "name"> <string>main</string> </attr> </node> <node id = "v2"> <type xlink:href ="s.gxl #FunctionCall" /> <node id = "v7"> <type xlink:href ="s.gxl# Variable" /> <string>b</string> <edge id = "e1" from = "v1" to = "v2"> #isCaller" /> <attr name = "line"> <int>8</int> </edge> <edge id = "e6 from = "v7" #isInput" /> AG Wartung 15. Oktober 2004
typisierte, attributierte, gerichtete, angeordnete Graphen <node id = "v1"> <type xlink:href =s.gxl #Function" /> <attr name = "name"> <string>main</string> </attr> </node> <node id = "v2"> <type xlink:href ="s.gxl #FunctionCall" /> <node id = "v7"> <type xlink:href ="s.gxl# Variable" /> <string>b</string> <edge id = "e1" from = "v1" to = "v2"> #isCaller" /> <attr name = "line"> <int>8</int> </edge> <edge id = "e6 from = "v7" #isInput" /> to = "v2" toorder = "2"> AG Wartung 15. Oktober 2004
GXL Werkzeuge Filter/Converter Reverse Engineering Tools Bauhaus Resource Graphs (Univ. Stuttgart) DOT (AT&T) FAMIX (Nokia) GraLab (Univ. Koblenz) Progres (RWTH Aachen) RPA (Philips, Eindhoven) RSF (Univ. Victoria) TA (Univ. Waterloo) XMI (Univ. BW München) Reverse Engineering Tools Bauhaus (Univ. Stuttgart) Columbus (Univ. Szeged) CPPX (Univ. Kingston, Univ. Waterloo) GUPRO (Univ. Koblenz) Missing Link (Merlin, Karlsruhe) Rigi (Univ. Victoria) PBS/Swagkit (Univ. Waterloo) TKSee/SN (Univ. Ottawa) Venice (Univ. Helsinki, Nokia) AG Wartung 15. Oktober 2004
GXL Werkzeuge Graph Transformation Systems Software Engineering Tools AGG (TU Berlin) Fujaba (Univ. Paderborn) Genset (Univ. Oregon) Progres (RWTH Aachen) Software Engineering Tools Chi-Bel (Univ. Toronto) DiaGen (Univ. Erlangen) Edinbourgh Concurrency Workbench (Univ. Edinbourgh) MetaEdit (Jyväskylä) Upgrade (RWTH Aachen) Graph Visualizer Graph Tool (Univ. Durham) GraphViz (AT&T) Shrimp (Univ. Victoria) TouchGraph (Alex Shapiro) yFiles (Univ. Tübingen) JGraph (Zürich) Graph Databases Gras (RWTH Aachen) AG Wartung 15. Oktober 2004
Beispiel Visualisierung von Bauhaus-Architekturen mit UML AG Wartung 15. Oktober 2004
Beispiel Visualisierung von Bauhaus-Architekturen mit UML AG Wartung 15. Oktober 2004
Fachgruppe Reengineering Zusammenfassung Reengineering Reengineering Maßnahmen GI Fachgruppe Reengineering (in Gründung) Workshop Software Reengineering www.uni-koblenz.de/ist/wsr Reengineering Werkzeug GUPRO – Generische Umgebung zum Programmverstehen www.gupro.de Interoperabilität von Reenginneering Werkzeugen GXL – Graph eXchange Language www.gupro.de/gxl Fachgruppe Reengineering AG Wartung 15. Oktober 2004