Обратный инжиниринг кода C ++ с использованием «Enterprise Architect» - PullRequest
4 голосов
/ 20 декабря 2010

Это снова своего рода вопрос "как это сделать правильно".Извините, если кого-то это раздражает.

Мне нужно понять около 150 TLOC смеси C / C ++.Я импортировал код в UML-инструмент «Enterprise Architect» и получил грязную диаграмму.Многие структуры и перечисления имели анонимные имена из-за этих конструкций C-ish: typedef struct/enum {...} MyType;

Во втором запуске я преобразовал его в форму C ++: struct/enum MyType{...};, но получил несколько несвязанных структур.К сожалению, Enterprise Architect не разрешает определения типов.например, никакие отношения между A, B и C не были распознаны:

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

Благодаря общему соглашению об именах, я смог заменить все typedef на исходный тип, например так:

struct C{ A pA; B lB; };

Теперьимпорт исходного кода в «Enterprise Architect» дал хорошую диаграмму со всеми связями.Конечно, код не компилируется, и это не то же самое.Все изменения в коде требуют раздражающего преобразования для того, чтобы EA снова поняла этот «псевдо» код.Поэтому мои вопросы:

  1. Есть ли возможность научить EA распознавать оригинальные типы?
  2. Разве другие инструменты UML распознают типы (и создают отношения между ними) более надежными?

Большое спасибо за любые советы!Валентин Хайниц

1 Ответ

2 голосов
/ 21 декабря 2010

У меня есть Enterprise Architect, и почти всегда для выполнения того, что вы пытаетесь сделать с большим телом кода, я использую doxygen . Он генерирует как классы, так и графы вызовов. Используйте его с GraphViz и диаграммами классов "в стиле UML", и у вас будет достаточно хороший инструмент для навигации и понимания кода, с гибкой настройкой для добавления или исключения деталей по мере необходимости.

...