2010-09-23 3 views
17

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

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

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

[EDIT] Пришел список инструментов, которые помогут в этом. Вот список:

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

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

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

  4. Imagix
    Переконструирование и визуализация исходного кода приведет к улучшению понимания программы. Скорости: Изучение Незнакомые кода Change Impact Analysis Интеграция Open Source Code Код Повторное использование Software Maintenance

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

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

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

  8. Source Insight Великий программное обеспечение просмотра источника

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

+0

Вы запрашиваете инструменты с открытым исходным кодом, а затем перечисляете несколько, которые не являются. –

+0

@ Ira Baxter - Правда, я не мог найти много инструментов с открытым исходным кодом :(Я пытаюсь заполучить их, постараюсь опубликовать их в ближайшее время. Пожалуйста, не стесняйтесь добавлять, если знаете. –

+1

@Als: One выбор не-open-source - это понимать для C и C++: www.scitools.com (я не использовал этот инструмент). –

ответ

10

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

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

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

Вы живете в стране чудес.

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

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

+3

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

+1

Я сказал, что вы живете в стране чудес, чтобы указать, что рефакторин g - это процесс человеческого интеллекта, который может быть сделан только с учетом роли каждой части кода, что невозможно сделать с помощью программного обеспечения. Или, может быть, вам просто нужен инструмент для переименования или преобразования кода? – Klaim

+3

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

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

Но для создания доксигенной документации вам нужно добавить комментарии, используя определенное форматирование? –

+0

Вы можете извлечь все, даже если оно не задокументировано. Это даст вам первый план. Затем вы можете добавлять комментарии, чтобы документация со временем улучшалась. Это ИМХО - хороший способ «изучить проект», и это значительно улучшит качество «кода», измеряемое в соотношении комментариев и кодов. – jv42

4

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

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

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

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

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

+1

Спасибо за указание точки тестирования. Очень важно. Я пропустил, чтобы упомянуть Да. Рамка тестирования существует и ее функциональная. И нам нужно доказать ценность нового программного обеспечения, предоставив результаты тестирования после рефакторинга/модификаций. Ofcoure ничего похожего на запуск кода и проверку его, как вы упомянули, и мы будем искать его. Но есть ли какие-либо инструменты, которые помогут отменить код engg, чтобы сказать, что диаграммы дизайна развивают глубокое понимание? дизайн-документы практически не существуют :(Мы не пытаемся пропустить проверку кода и понимание путем отладки. –

+0

@Als - какая у вас платформа, IDE и компилятор? –

+0

@Steve В принципе, это настраиваемый стек программного обеспечения для программ и программ для wap мобильных устройств.Он имеет хороший уровень абстракции на платформе, который позволяет переносить его на различные мобильные платформы.В настоящее время у нас есть рабочая версия для симулятора Windows, использующая win32 api и использующую визуальную студию Microsoft. Мы поместим ее дальше для других платформ, таких как Brew и т. Д. –

2

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

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

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

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

1

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

0

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

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

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

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