К основному контенту

Sonar и метрики кода

В этом посте я, как и обещал, расскажу о метриках кода, представленных в правой части мониторинговой панели — это показатель спутанности пакетов (package tangle index), недостаток связности в методах (LCOM4) и отклик для класса (response for class).

Показатель спутанности пакетов

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

Недостаток связности в методах

Класс, как мы помним, состоит из полей и методов. В каждом из методов используется некий набор полей и/или вызываются другие методы. Методы связаны между собой, если один из них вызывается из другого, или они используют одно и то же поле класса. LCOM4 определяется количеством груп связанных методов в классе. Если LCOM4 = 1 — это хороший класс, а если LCOM4 >= 2, то класс необходимо разбить на несколько меньших классов. Sonar дополнительно дает усредненное значение этой метрики по всему проекту и по каждому из пакетов, где LCOM4 > 1. В выбранном классе можно посмотреть все группы связанных методов. Выглядит это примерно так

Отклик для класса

Для начала понадобится определение множества отклика класса. Это некоторое множество методов, которые могут выполняться в ответ на сообщение, пришедшее объекту этого класса. Сюда входят и унаследованные методы и методы других классов. Мощность этого множества и является откликом для этого класса. Чем больше отклик, тем сложнее тестировать и отлаживать данный класс. Хорошим считается значение до 50 и приемлемым — до 100.

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

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

Комментарии

Популярные сообщения из этого блога

Одно приложение, несколько баз данных

Рецепт от Spring Boot Некоторое время назад мне довелось писать агрегатор информации, разбросанной по нескольким базам данных с разными схемами. Для реализации был выбран Spring Boot. Ну, потому что модный и судя по примерам существенно упрощает жизнь за счет умной автоконфигурации. В этой статье я опишу, что же необходимо сконфигурировать и как, в случае, если вы отошли от стандартного сценария. Первым делом, необходимо прописать настройки доступа к каждой из баз. Например, вот так: Следующим шагом создадим отдельный класс конфигурации (для удобства), в котором определим dataSources: Обратите внимание, как просто получить настройки с помощью @ConfigurationProperties. Правда, пришлось ввести вспомогательный класс BaseDataSourceProperties — наследник DataSourceProperties, в котором область видимости метода getDriverClassName расширена до public. И осталось совсем немного — сконфигурировать JPA-репозитории. Насчет немного я, конечно, пошутил :) В этой части предстоит больше

Может ли TreeSet содержать дубликаты?

Не спешите давать ответ, а лучше запустите код, приведенный ниже. Возможно вы подумаете, что это надуманный пример, но это лишь немного упрощенная версия того кода, с которым мне пришлось столкнуться на практике. Для начала о проблеме, которую был призван решить этот код. В списке объектов надо было оставить объекты с различными именами, причем неважно какой объект из всего набора с таким же именем останется. Сразу же уточню, что на практике в проекте используется Java 7 и класс объектов, добавляемых в TreeSet, не вложен в какой-либо другой, а приведенный здесь вариант использован для краткости. Может возникнуть вопрос почему выбрано именно такое решение. Давайте разберемся, чтобы не повторять ошибку. Первое, что приходит в голову, когда из списка надо удалить дубликаты, - использовать Set. В данной ситуации HashSet не подходит, потому что он использует equals метод для сравнения и отсеивания дубликатов. Но наш программист не сдаётся и вспоминает, что есть же еще TreeSet, в докум

Обработка изображений с ImageMagick

ImageMagick ( http://www.imagemagick.org ) — набор утилит для создания, редактирования, конвертирования и просмотра растровых изображений. Графический режим необходим только для просмотра. Для остальных действий над изображениями достаточно консоли. То есть налицо два отличия от привычных редакторов растровых изображений (вроде GIMP или Krita): использование набора утилит вместо одной программы для операций над изображениями не требуется GUI. Очевидно, что таким инструментом вряд ли будут пользоваться художники, фотографы или дизайнеры. Чтобы разобраться для кого предназначен этот набор, предлагаю ознакомиться с предоставляемыми возможностями. Что умеет ImageMagick? Чтобы ответить на поставленный вопрос я перечислю входящие в набор утилиты, напишу какой функционал предоставляет каждая из них и, конечно же, приведу примеры использования. identify — информационная утилита, воспользовавшись которой можно узнать формат изображения и множество других его свойств (например, высоту,