Статьи

Проверяя JArchitect

Недавно я получил бесплатную лицензию (спасибо!) От Dane для JArchitect . Это инструмент для анализа вашего кода Java. Это также помогает улучшить качество вашего кода. Мне было любопытно, когда я получил предложение.

Первое впечатление? Вау, это выглядит устаревшим На моем Mac запускается X11. Я определенно скучаю по своему опыту Mac.

Обратите внимание: JArchitect доступен не только для Mac, но и для Linux и Windows. Думаю, все это выглядит лучше на других платформах.

У меня появилась идея проанализировать Apache log4j 2 с ним. Мне понадобилось несколько минут, чтобы узнать, как включить исходный код в проект JArchitect.

Интерактивный граф Jarchitect

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

Вывод HTML был лучше. Я узнал некоторую информацию, такую ​​как зависимости, не было доступно. Скорее всего, я настроил что-то не так.

Вы можете скачать полный отчет здесь.

Я не уверен, что мне нравятся все советы, которые звучали как «не использовать синглтон» или «избегать пустых интерфейсов» (интерфейсы маркеров?).

В моем отчете было много таких загадочных выводов:

Don't assign static fields from instance methods
// Don't assign static fields from instance methods
// Assigning static fields from instance methods leads to
// poorly maintainable and non thread-safe code.
// It is advised to assign static fields inline or from class constructor.
warnif count > 0
from f in Application.Fields where
f.IsStatic &&
!f.IsLiteral &&
!f.IsInitOnly &&
!f.IsGeneratedByCompiler &&
// Contract API define such a insideContractEvaluation static field
f.Name != "insideContractEvaluation"
let assignedBy = f.MethodsAssigningMe.Where(m => !m.IsStatic)
where assignedBy .Count() > 0
select new { f, assignedBy }
No fields matched

Вскоре я понял, что это правила, которые были применены к моему докладу. JArchitect дает вам большую гибкость для работы с такими правилами, потому что вы можете сильно настроить инструмент. Приведенное выше правило — это то, что JArchitect предоставляет под названием « Code Query Linq », короче говоря, CQLinq. Вы можете создать свой собственный CQLinq, который очень напоминает мне SQL. Можно сказать, это SQL для вашего кода . В сочетании с редактором JArchitect у вас есть мощный инструмент для выбора определенных частей ваших приложений.

CQL JArchitect

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

Во всяком случае я не мог найти огромное значение для анализа log4j2 с JArchitect. Скорее всего, это связано с неправильной настройкой, но проект также слишком мал. Я посмотрел на что-то большее, как Apache Struts 2 . Отчет выглядел намного лучше и намного полезнее. На мой взгляд, JArchitect нацелен на большие проекты (как следует из названия).

Вот вывод для Struts 2.

Если честно, даже вывод HTML выглядит немного устаревшим. С другой стороны, можно получить некоторую полезную информацию. Эту информацию также можно получить с помощью других инструментов на основе Maven. Если, конечно, вы не хотите включать свои собственные правила CQLinq.

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

Советы JArchitect, которые я нашел для Struts 2, более полезны. Помимо обычных метрик, таких как строки кода (87,260, ура!) И анализа зависимостей, я получил тонны предупреждений. Как, например, «Методы слишком сложны» или что у нас есть 481 «потенциально мертвые поля» в Struts 2.

Я собираюсь немного поработать с JArchitect в сочетании со Struts 2. Я не уверен, что я лучше понимаю Struts 2 с этим инструментом, но он вдохновил меня на то, как улучшить фреймворк.

Однако есть и другие инструменты, которые делают подобные вещи. Если у вас нет проблем с устаревшим пользовательским интерфейсом и некоторыми хитрыми конфигурациями, вы, несомненно, можете получить больше от JArchitect, чем я. Лично у меня такое ощущение, что этот инструмент не очень сильно подействует на меня — в основном потому, что я не имею дело с огромными архитектурами в наши дни. Если вам приходится наблюдать за большими программными проектами с большим количеством зависимостей, вы можете воспользоваться расширенной матрицей зависимостей или опциями настройки.

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