Вот несколько показателей сложности из stan4j .
Инструмент для анализа структуры классов eclipse.
Мне нравится этот инструмент и его показатели. Я отношусь к метрикам как к статистике, индикаторам, предупреждающим сообщениям. Иногда из-за того, что некоторые методы или классы действительно имеют сложную логику, делающую их сложными, нужно следить за ними, просматривать их, чтобы увидеть, есть ли необходимость в их рефакторинге или внимательно их проверять, поскольку обычно они подвержены ошибкам. Также я использую его как инструмент анализа для изучения исходного кода, потому что мне нравится учиться от сложного к простому. На самом деле он включает в себя некоторые другие метрики, такие как метрики Роберта К. Мартина, метрики Чидамбера и Кемерера, метрики подсчета, но мне больше всего нравится этот
Метрики сложности
Цикломатические показатели сложности
Цикломатическая сложность (CC)
Цикломатическая сложность метода - это количество точек принятия решения в графе потока управления метода, увеличенное на единицу. Точки принятия решения возникают в операторах if / for / while, предложениях case / catch и подобных элементах исходного кода, где поток управления не просто линейный. Число точек принятия решения (байтовый код), вводимых одним оператором (исходный код), может варьироваться, например, в зависимости от сложности логических выражений. Чем выше значение цикломатической сложности метода, тем больше тестовых примеров требуется для тестирования всех ветвей графа потока управления метода.
Средняя цикломатическая сложность
Среднее значение метрики цикломатической сложности по всем методам приложения, библиотеки, дерева пакетов или пакета.
Жирные метрики
Жирные метрики артефакта - это количество ребер в соответствующем графе зависимостей артефакта. Тип графа зависимостей зависит от варианта метрики и выбранного артефакта:
Fat
Метрика Fat для дерева приложения, библиотеки или пакета - это количество ребер его графа зависимостей поддерева. Этот граф содержит все дочерние элементы артефакта в иерархии дерева пакетов, включая конечные пакеты. (Чтобы увидеть соответствующий график в представлении «Композиция», переключатель «Плоские пакеты» в обозревателе структуры должен быть отключен. Переключатель «Показать библиотеки» должен быть включен, если выбранный артефакт является библиотекой, в противном случае его необходимо отключить.)
Жирная метрика пакета - это количество граней его графа зависимостей. Этот график содержит все классы верхнего уровня пакета.
Жирная метрика класса - это количество ребер его графа-членов. Этот граф содержит все поля, методы и классы-члены класса. (Этот график и значение Fat доступны только в том случае, если анализ кода проводился с элементом с уровнем детализации, а не с классом.)
Жир для библиотечных зависимостей (Fat - библиотеки)
Показатель «жирный для библиотечных зависимостей» приложения - это количество ребер его графа зависимостей библиотеки. Этот график содержит все библиотеки приложения. (Чтобы увидеть соответствующий график в представлении композиции, необходимо включить переключатель «Показать библиотеки» в обозревателе структуры.)
Жир для зависимостей плоских пакетов (Fat - Packages)
Метрика приложения «Жир для зависимостей плоских пакетов» - это количество граней его плоского графа зависимостей пакетов. Этот график содержит все пакеты приложения. (Чтобы увидеть соответствующий график в представлении «Композиция», необходимо включить переключатель «Плоские пакеты» в Structure Explorer и отключить переключатель «Показать библиотеки».)
Метрика «Жирность для зависимостей плоских пакетов» библиотеки - это количество граней ее плоского графа зависимостей пакетов. Этот график содержит все пакеты библиотеки. (Чтобы увидеть соответствующий график в представлении композиции, необходимо включить переключатели Flat Packages и Show Libraries в Structure Explorer.)
Жир для зависимостей классов верхнего уровня (Fat - Units)
Метрика Fat для зависимостей классов верхнего уровня приложения или библиотеки - это количество ребер его графа зависимостей модулей. Этот график содержит все классы верхнего уровня приложения или библиотеки. (Для разумных приложений он слишком велик для визуализации и, следовательно, не может отображаться в представлении композиции. Графики зависимости модулей могут отображаться только для пакетов.)
the number of StyleCop warnings + 10 * the number of FxCop warnings + 2 to the power of the number of disabled warning types
. Только после того, как значение этой метрики станет как можно меньшим, человеку стоит начинать просмотр кода (на мой взгляд). В итоге: сложные инструменты, а не упрощенные формулы могут помочь улучшить качество кода. Хотя это, наверное, не по теме.