Подтвердить что ты не робот

C/C++ пакеты для понимания кода для рефакторинга

Я собираюсь начать работу над проектом, который включает в себя рефакторинг и изменение существующего кода, который находится в c & c++. Код раздутый и в огромном объеме. Конечно, так как код должен быть изменен, понимание кода должно быть разработано и в очень короткий промежуток времени, так как у нас есть довольно сжатые сроки графика проекта. Может ли кто-нибудь предложить какие-либо инструменты с открытым исходным кодом, которые помогут в достижении вышеизложенного. Короче говоря, я ищу инструмент, который может:

  1. Обратные инженерные инструменты, которые помогут понять дизайн.
  2. Инструменты генератора последовательностей, которые помогут рисовать последовательности во время выполнения (скорее всего, мы сможем запустить код, но не на начальных этапах, по крайней мере) или посредством проверки кода.
  3. Хорошие инструменты просмотра кода для изучения существующей базы кода.
  4. Подходит инструмент, который может автоматически рефакторинг кода с минимальными усилиями.

Пожалуйста, расскажите мне о любых впечатлениях, предпочтениях или предпочтениях, на которые стоит обратить внимание.

[РЕДАКТИРОВАТЬ] Придумал список инструментов, чтобы помочь в выше. Вот список:

  1. Графвиз и доксиген
    Генерация диаграмм классов UML из существующей кодовой базы

  2. UMLStudio
    Создание объектной модели для вашего унаследованного кода является лучшим подходом к ее анализу, пониманию и поддержанию. UMLStudio может автоматически конвертировать c++, Java, CORBA IDL, PHP 5 и код Ada 95 в нотацию OOA & D быстрее, чем любой другой инструмент CASE.

  3. CodeDrawer для c++
    CodeDrawer преобразует исходный код в визуальные диаграммы. Класс, структура и любые элементы исходного кода могут быть показаны диаграммами. Он также показывает логику функции и метода. CodeDrawer помогает понять исходный код вашего проекта

  4. Imagix
    Обратное проектирование и визуализация исходного кода приводят к улучшению понимания программы. Скорости: изучение незнакомого изменения кода Анализ влияния интеграции с открытым исходным кодом повторного использования программного обеспечения обслуживания

  5. AgileJ AgileJ StructureViews - это подключаемый модуль для Eclipse Java IDE, который генерирует настраиваемые диаграммы классов UML в промышленном масштабе и идеально подходит для гибкой разработки или исследования любой существующей кодовой базы Java.

  6. MaintainJ Если вы можете запустить кодовую базу, то MaintainJ генерирует последовательности UML и диаграммы классов во время выполнения, когда вы запускаете конкретный вариант использования.

  7. Java Reverse Engineering Tool Генерирует диаграммы классов и отношения между классами из исходного кода Java.

  8. Source Insight Отличное программное обеспечение для просмотра исходного кода

Еще одно, благодаря Стиву Таунсенду
Klocwork

4b9b3361

Ответ 1

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

Тогда у вас есть проблема управления: если вы уже знаете, что у вас мало времени, чтобы ПОНИМАТЬ много кода, вы обречены. Чтобы понять этот код, вам нужно будет запустить его и пройти через него, и это потребует времени. Инструменты просто дадут вам большую карту вещей, но не покажут вам реальный путь.

Подходящий инструмент, который с минимальными усилиями может автоматически преобразовать код.

Ты живешь в стране чудес.

Есть инструменты, которые дают вам структурную архитектуру вашего приложения, но это не поможет, не пройдя каждый модуль по одному и прочитав код. Сначала код, который использует модули, а затем код внутри модулей.

Тот факт, что на C и С++ еще сложнее определить время, которое оно примет вас, так же как и знание, которое у вас есть на этих языках, и уровень знаний людей, которые написали приложение.

Ответ 2

Первый вопрос, который вы должны задать, - "как я могу убедиться, что любые изменения, которые мы делаем, не нарушают систему?". Но ваш вопрос вообще не упоминает тесты. Это красный флаг для меня.

Я согласен с другими в том, что инструменты не являются решением (вряд ли появятся в форме, которую вы хотите, вряд ли на 100% заслуживаете доверия).

Ваша цель должна заключаться в том, чтобы быстро определить область (области), которую нужно изменить - я бы сделал это через проверку и запуск кода (желательно в существующих тестах - есть ли у вас?), и убедитесь, что у вас есть исчерпывающая единица и когда вы касаетесь одной строки. Без этой базы вы будете лететь вслепую, а крайние сроки - еще больше подвержены риску.

По крайней мере, если у вас нет хороших тестов, сообщите об этом в свою линию, чтобы, если все будет выглядеть грушевидно, вы, похоже, подняли проблему.

Вы могли бы посмотреть на что-то вроде этого: я не использовал себя: Klokwork Architect

Ответ 3

Существует очень мало инструментов, которые могут анализировать и преобразовывать код C и С++. В качестве первого шага синтаксический анализ этих языков считается само собой разумеющимся. Другой ключевой проблемой является препроцессор, который используется довольно оскорбительно (например, не в структурированном виде) в программах на C и затрудняет просмотр анализатором структуры программы и, как следствие, сложный для анализатора (необходимо решить, когда рефакторинг законным) для правильного анализа.

Изменим эти сбои, наш DMS Software Reengineering Toolkit можно настроить для проведения рефакторинга на C и С++-коде. DMS имеет сильные синтаксические анализаторы для C и С++ и уникально может захватывать большинство применений препроцессора как часть внутренних структур кода (обычно люди, пытающиеся разобрать C/С++, расширяют директивы препроцессора, и это не вариант для рефакторинга).

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

Что это не интерактивно. Вы должны спланировать преобразования рефакторинга и указать их с языком, соответствующим шаблону. Но он надежен.

Ответ 4

  • Если у вас есть источник, технически это не обратное проектирование. Вы можете использовать очень хороший Doxygen для создания документации (включая диаграммы - установите GraphViz тоже!): ссылка
  • Не знаю, не уверен, что он существует.
  • Ваш веб-браузер вместе с Doxygen, если вы включите просмотр исходного кода. Visual Studio, щелкнув правой кнопкой мыши, чтобы перейти к определениям, и отладчик, чтобы выполнить код и получить понимание его работы (использовать и злоупотреблять командой "Выход" ).
  • Есть инструменты для рефакторинга, но минимальные усилия и "автореактор" очень трудно достичь, я не думаю, что вы найдете для этого инструменты.

Ответ 5

Я просто подумал, что добавлю примечание, что CTAGS/ECTAGS очень полезно при изучении/реорганизации неизвестной кодовой базы, особенно при использовании такой как Emacs/CEDET.

Ответ 6

5 agilej (http://www.agilej.com/) AgileJ StructureViews является плагином для Eclipse Java IDE, который генерирует настраиваемые диаграммы классов UML в промышленном масштабе, идеально подходящие для гибкого развития или исследование любой существующей кодовой базы Java.

AgileJ применяется к вашим точкам 1 (обратная инженерия, чтобы помочь понять дизайн) и 3 (хорошие инструменты просмотра кода для изучения существующей базы кода). Разочарованный код, который был быстро ударил вместе, как правило, появляется, например:

  • Один или два больших класса, которые действуют как свалка для каждого бит функциональности последней минуты (анти-шаблон blob)
  • Вырезать и вставить код, где весь класс был скопирован и изменен для новой цели, вместо того, чтобы сначала разделить общие части на базовый класс.
  • Отсутствие OO, о чем свидетельствуют многие классы только с методами get и set
  • Зависимости маскируются, все зависит от всего остального в проекте, и в архитектуре нет слоев.

В этот список добавлено больше признаков, которые можно добавить в список, но выше на диаграмме классов.