5 Stimmen

Reverse Engineering von C++-Code mit "Enterprise Architect"

Es ist wieder eine Art von "wie man es richtig macht" Frage. Tut mir leid, wenn jemand verärgert ist.

Ich muss ca. 150 TLOCs einer C/C++-Mischung verstehen. Ich habe den Code in das UML-Tool "Enterprise Architect" importiert und ein unübersichtliches Diagramm erhalten. Viele Structs und Enums hatten anonyme Namen wegen dieser C-artigen Konstrukte: typedef struct/enum {...} MyType;

Im zweiten Durchgang habe ich es in C++-Form umgewandelt: struct/enum MyType{...}; bekam aber einen Haufen unzusammenhängender Strukturen. Leider löst Enterprise Architect keine Typendefinitionen auf, z.B. wurden keine Beziehungen zwischen A, B und C erkannt:

struct A;
struct B;
typedef A *PtrA;
typedef List<B> BList;
struct C{ PtrA pA; BList lB; };

Dank der durchgängigen Namenskonvention konnte ich alle Typendefinitionen durch den Originaltyp wie folgt ersetzen:

struct C{ A pA; B lB; };

Der Import des Quellcodes in "Enterprise Architect" ergab nun ein schönes Diagramm mit allen Beziehungen. Natürlich lässt sich der Code nicht kompilieren und ist auch nicht derselbe. Alle Änderungen im Code erfordern eine lästige Konvertierung, um diesen "Pseudo"-Code für EA wieder verständlich zu machen. Daher meine Fragen:

  1. Gibt es eine Möglichkeit, EA zu unterrichten? die ursprünglichen Typen zu erkennen?
  2. Erkennen andere UML-Tools die Typen (und erstellen Beziehungen zwischen ihnen) robuster?

Vielen Dank für jeden Ratschlag! Valentin Heinitz

4voto

Clifford Punkte 82130

Ich habe Enterprise Architect, und fast immer verwende ich für das, was Sie versuchen, einen großen Codekörper zu bearbeiten doxygen stattdessen. Es erzeugt sowohl Klassen- als auch Aufrufdiagramme. Verwenden Sie es mit GraphViz und Klassendiagramme im "UML-Stil", und schon haben Sie ein recht gutes Werkzeug für die Code-Navigation und das Code-Verständnis, das sich flexibel konfigurieren lässt, um je nach Bedarf Details hinzuzufügen oder auszuschließen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X