Понимание кода, инженерный анализ, лучшие понятия и инструменты. Java

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

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

Из того, что я знаю: разработка обратного кода для создания объектных моделей (создание схемы на пакет не так удобно), создайте диаграммы последовательности (подключения инструмента в режиме отладки к системе, и генерирует схемы от времени выполнения). Некоторые методы визуализации, с помощью некоторых инструментов для работы не только с .java но также и с, например. JPA конструкторы как Hibernate. Генерируйте схему для не вся кодовая база, но добавьте некоторый класс и затем классы, используемые им.

Состояние Архитектора Is Sparx Enterprise в инженерном анализе или далекий от этого? Какие-либо другие лучшие инструменты? Идеально был бы то, что инструмент заставляет меня понять код, как будто я записал это сам :)

8
задан Paul Rooney 26 July 2017 в 23:46
поделиться

6 ответов

В книге Шаблоны объектно-ориентированного реинжиниринга это подробно рассматривается. К сожалению, серебряной пули не прилагается: -)

Однако в нем перечислено множество полезных методов для переноса унаследованного кода.Вкратце

  • интервью по крайней мере с некоторыми из первоначальных разработчиков (если они все еще существуют) о
    • истории разработки: фазы, выпуски
    • текущее состояние дел
    • социальная структура команды, политика, динамика: когда и почему люди присоединились и покинули
    • ошибки: типичный, самый простой, самый сложный
    • качество кода: самые чистые / уродливые части
    • данные конфигурации: форма, содержание и использование
    • unit / integration / manual / ... тестовые примеры и данные
    • Структура и использование ветвей SCM
    • документация: что документировано где, актуально ли
    • контактные лица для внешних интерфейсов
  • Смотреть разработчики / пользователи во время демонстрации, чтобы найти
    • основные функции
    • типичные варианты использования
    • анекдоты использования
    • хорошие / плохие, отсутствующие / лишние функции
  • "прочтите весь код за один час "
    • получить высокоуровневое представление иерархий классов, интерфейсы
    • при необходимости принимают несколько сеансов
    • идентифицируют большие структуры (они часто содержат важные функции)
    • смотри f или шаблоны проектирования
    • проверяют комментарии (они могут многое раскрыть, но могут также вводить в заблуждение)
  • просмотреть документацию (если таковая имеется)
    • просто запишите наличие определенные типы документов, например спецификация, диаграмма UML, Wiki, Javadoc и т. д.
    • полезна ли она и почему (нет)
    • актуальна
11
ответ дан 5 December 2019 в 07:57
поделиться

Я использую Enterprise Architect для всего UML (включая обратное проектирование с помощью Java), и он отлично работает.

0
ответ дан 5 December 2019 в 07:57
поделиться

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

Автоматически преобразованные полные модели UML обычно почти бесполезны, потому что они не могут различать важные абстракции и детали реализации - в этом весь смысл таких моделей.

Программные инструменты более полезны для ответа на очень конкретные вопросы, когда вы исследуете детали, такие как «откуда вызывается этот метод?» или «какие классы реализуют этот интерфейс» - любая хорошая IDE сможет это сделать. Отладчики тоже могут помочь - размещение точек останова в ключевых точках кода и просмотр стека вызовов, когда они достигаются, часто очень поучительны.

6
ответ дан 5 December 2019 в 07:57
поделиться

Просто чтобы уточнить упоминание Майклсом хороших IDE, которые могут вам помочь:

Я часто использую следующие возможности Eclipse:

  • Shift-F2, когда курсор помещается в идентификатор, вызывает Javadoc для этого идентификатора , если есть. Хорошо для навигации.
  • При наведении курсора мыши на идентификатор появляется окно с документацией Javadoc, если таковая имеется. Подходит для напоминания при письме, например вызов метода.
  • Представление объявлений показывает источник, в котором определено ключевое слово, в которое помещен курсор. Он обновляется при перемещении курсора.
  • F3 переходит к определению текущего идентификатора.
  • Ctrl-T на идентификаторе показывает все подклассы и реализации во всплывающем окне. Очень полезно при работе с интерфейсами.
  • F4 на идентификаторе вызывает иерархию реализации этого идентификатора на панели, по которой можно перемещаться. Очень полезно узнать, как все взаимосвязано. Сюда входят как классы, так и интерфейсы.
2
ответ дан 5 December 2019 в 07:57
поделиться

EclipseUML Omondo - лучший инструмент обратного проектирования Java. Он полностью меняет код Java, все пакеты и даже взаимодействие классов с интерфейсом, если они не находятся в одном пакете. Просто удивительно. Вы также можете перевернуть: - .class - аннотации спящего режима - аннотации JPA

Что мне нравится в этом инструменте, так это то, что мой код чистый, потому что вся информация о модели сохраняется в формате xmi, а не как тег в моем коде. Вы также можете создать небольшую документацию внутри каждого существующего пакета, используя диаграммы в качестве представления модели. Просто изумительно и в соответствии с официальной спецификацией uml 2.2. Единственная проблема в том, что это действительно слишком дорого , поэтому цена для меня остановка !!

1
ответ дан 5 December 2019 в 07:57
поделиться

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

1
ответ дан 5 December 2019 в 07:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: