С++ для UML (инженер-реверс/разработка с круговым движением)

Я ищу инструмент, который может перепроектировать С++ на UML (и наоборот). Тем не менее, важнейшим требованием является то, что он может корректно анализировать методы (функции-члены), чтобы определить корректность зависимостей.

Подробнее:

В следующем коде ClassA зависит от ClassB, поэтому инструмент UML должен показать это пунктирной линией. Кажется, что очень мало инструментов, которые могут это сделать. Я пробовал Enterprise Architect, UMLStudio, Visual Paradigm, Borland Together, IBM Rational Architect и другие.

class ClassB
{
 static void methodStatic() {}
 void method() {}
};

class ClassA
{
 void method()
 {
   ClassB::methodStatic();
   ClassB c;
   c.method();
 }
};

Изменить: я также попробовал StarUML. Обратите внимание, что Enterprise Architect практически идеален; он корректно идентифицирует зависимости от типов параметров метода и типов полей, а все другие функции разработки с круговым движением, похоже, работают хорошо. Однако он просто не определяет зависимости от тел метода, как в примере.

Ответ 1

Есть несколько инструментов, которые позволяют графическое представление вашего кода. Например, Doxygen выполняет хорошую работу.

Однако код С++ (С++, являющийся языком мультипарадигмы) часто не соответствует типичным идиомам, описанным в UML. Скорее всего, ваш код на С++ не соответствует типичной диаграмме UML. Я думаю, это объясняет, почему нет действительно хороших инструментов UML для С++. По крайней мере, я еще не нашел.

Ответ 2

BOUML претендует на выполнение генерации кода на С++ и обратной инженерии.

Ответ 3

Я считаю, что starUML делает это. Лучше всего: это с открытым исходным кодом.

Ответ 4

Я бы сказал, для Enterprise Architect; запустите новый проект, щелкните его правой кнопкой мыши в проводнике проекта, Code Engineering, Import Source Directory. Получает все ваши классы и т.д. В UML, может упаковывать пространство имен или файлы и так далее. Очень хороший инструмент.

Файлы кода скелета могут быть созданы очень схожим образом...

Вы также можете создать документацию из UML (объедините ее со словом, и вы можете сделать свою документацию для вас, если вы сделали подходящие заметки в UML). (Нет, я не работаю для них, просто использую его в данный момент... для создания UML из исходного кода на С++.)