Спагетти код для визуализации программного обеспечения? - PullRequest
26 голосов
/ 26 июля 2011

курящая куча спагетти только что приземлилась на мой стол, и моя задача состоит в том, чтобы понять это (чтобы я мог реорганизовать / переопределить это).

Код - C, и беспорядок глобальных переменных, структурных типов и вызовов функций.

Я бы хотел построить графики кода с информацией:
- График звонков
- Какие типы структур используются в каких функциях
- Какая глобальная переменная используется в какой функции

Надеюсь, это упростит идентификацию подключенных компонентов и их извлечение в отдельные модули.

Я пробовал следующее программное обеспечение для аналогичных целей:
- ncc
- ctags
- codeviz / gengraph
- доксиген
- Египет
- поток
EDIT2:
- frama-c
- снавигатор
- Понять

Недостатками являются либо
а) требует, чтобы я был в состоянии скомпилировать код. Мой код не компилируется, так как части исходного кода отсутствуют.
б) проблемы с макросами препроцессора (например, cflow, который хочет выполнить обе ветви операторов #if). Запуск его через cpp приведет к путанице в номерах строк.
c) Мне по какой-то причине не удается заставить программное обеспечение выполнять то, что я хочу (например, doxygen; документацию для генерации графа вызовов нелегко найти, и, поскольку, похоже, в любом случае она не отображает переменные / типы данных, вероятно, не стоит тратить больше времени на изучение параметров конфигурации doxygen). РЕДАКТИРОВАТЬ: я следовал эти инструкции Doxygen , но он только строил зависимости файла заголовка.

Я нахожусь в Linux, так что это огромный плюс, если программное обеспечение для Linux и свободного программного обеспечения. Не уверен, что мой начальник понимает необходимость покупки визуализатора: - (

Например: инструмент командной строки, в котором указывается, на какие функции ссылается символ (= function, variable, type), будет очень полезен (например, addr2line, но для типов / имен переменных / функций и исходного кода).

// T

Ответы [ 4 ]

6 голосов
/ 26 июля 2011

Мой голос поступает на GNU Global .Он имеет все функции ctags / cscope, а также возможность генерировать полностью проиндексированный HTML, который позволяет просматривать код в вашем любимом браузере.Запустите его в apache, и у вас есть веб-сервис, к которому любой может получить доступ, включая полные возможности поиска.

Он прекрасно интегрируется в emacs / vim / даже bash-shell, и вы можете использовать его прямо из оболочки-prompt.

Чтобы увидеть его в действии на ядре Linux, посетите this

Объедините это с инструментом для цикломатической сложности Плагин для Eclipse который вычисляет сложность вашего кода.Помимо цикломатической сложности он может обрабатывать:

  • Цикломатическая сложность МакКейба
  • Эфферентные связи
  • Отсутствие сцепления в методах
  • Строки кода в методе
  • Количество полей
  • Количество уровней
  • Количество локальных объектов в области
  • Количество параметров
  • Количество операторов
  • Взвешенные методы на класс

... и у вас должно быть все необходимое.

3 голосов
/ 26 июля 2011

Если вам нравится командная строка;) возможно, вы могли бы попробовать cscope , он выполняет статический анализ кода и может сказать вам, где указаны некоторые символы / переменные / функции ... Не Святой Грааль, но это может быть очень полезно для просмотра неизвестного исходного кода.

Есть также некоторый графический интерфейс, который может обрабатывать результаты csope (Vi, Emacs, JEdit ...).

С другой стороны, Eclipse с подключаемым модулем CDT также может помочь вам перейти к коду спагетти, который вы должны поддерживать.

0 голосов
/ 26 июля 2011

Если вы хотите знать, в каких функциях символ объявляется или на него ссылаются, вы можете попробовать LXR . Он не основан на консоли, но вполне пригоден для использования.

0 голосов
/ 26 июля 2011

Это не бесплатно, и afaik не linux, но стоит оценить cppDepend - по крайней мере, пока кто-нибудь не предложит более подходящее предложение:)

http://www.cppdepend.com/ [ Демонстрационное видео здесь ]

...