Существует ли инструмент визуализации, который может проверять базу кода Java и сообщать о межпакетных зависимостях? - PullRequest
8 голосов
/ 30 сентября 2010

У нас есть база кода Java, которая стала слишком большой для одного монолитного JAR (более 5000 классов).Одна из задач, которую мы исследуем, состоит в том, сколько усилий потребуется, чтобы разбить этот единственный JAR-файл на более мелкие компоненты с контролируемыми зависимостями между ними.Тем не менее, довольно сложно взглянуть на большой пакет кода и убедиться, что вы находите лучшие точки разделения без некоторого анализа.

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

В качестве примера, за несколько дней до Netbeans и Eclipse (и на другой работе) мы использовали TogetherJ и TogetherEnterprise.У них была возможность сделать статический анализ пакетов и нарисовать диаграмму UML.Такое поведение было бы оптимальным, но одной этой функции недостаточно для оправдания затрат.

Ответы [ 8 ]

3 голосов
/ 30 сентября 2010

Я недавно обнаружил CodePro AnalytiX, ранее принадлежавший Instantiations, теперь бесплатно доступный в Google: https://developers.google.com/java-dev-tools/codepro/doc/features/dependencies/dependencies

2 голосов
/ 30 сентября 2010
2 голосов
/ 30 сентября 2010

Я использовал stan4j для той же цели, но, к сожалению, в версии сообщества есть ограничение 500 классов.С другой стороны, он работает как расширение затмения.

1 голос
/ 30 сентября 2010

Хорошей попыткой было бы превратить ваш файл jar в диаграмму классов.Я нашел этот учебник, который объясняет, как перевернуть проект, составленный из jar-файлов, в диаграмму классов UML: http://www.ejb3.org/jar_file_reverse/jar_file_reverse.html

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

alt text

1 голос
/ 30 сентября 2010

JDepend - бесплатный инструмент для анализа зависимостей пакетов.

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

Мы включили эту проверку для циклических зависимостей в наши модульные тесты, чтобы предотвратить их запуск.

Существует соответствующий подключаемый модуль Eclipse .

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

Теперь, когда CodePro AnalytiX [впервые упомянутый выше Фабианом Стигом] является бесплатным, стоит взглянуть еще раз.По крайней мере, до покупки Google Instantiations надежно производили отличное программное обеспечение.Я играл с ним несколько лет назад, и не помню никаких жалоб, кроме стоимости.

1 голос
/ 30 сентября 2010

SonarJ - хороший инструмент для этого, но он дорогой.

Еще один очень хороший инструмент - XDepend , который дешевле. Для вашей цели я бы порекомендовал вам этот инструмент. На мой взгляд, лучший выбор по соотношению цена / качество.

С гораздо меньшими функциональными возможностями вы можете использовать Sonar (Free and OpenSource) анализ и матрицу его зависимостей.

0 голосов
/ 17 марта 2013

Это именно тот вариант использования, который я строю degraph для.

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

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

0 голосов
/ 30 сентября 2010

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

...