цикломатическая сложность с MetrixReloaded

Я пытаюсь проанализировать цикломатическую сложность кодовой базы с помощью плагина MetricsReloaded в Android Studio (должен быть таким же, как IntelliJ).

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

введите здесь описание изображения

Может ли кто-нибудь сказать мне, что это значит и что определяет, является ли это «хорошим»/«плохим»?

Спасибо за любую помощь :)


person Stephen Cowley    schedule 01.02.2018    source источник


Ответы (1)


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

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

В качестве отправной точки наибольший интерес представляют числа в столбце v(G) на первом снимке экрана, показывающие CC для каждого метода в виде целочисленного значения. документация PMD предлагает следующие рекомендации для определения того, являются ли эти числа являются «хорошими»/«плохими»:

Сложность определяется количеством точек принятия решения в методе плюс одна для записи метода. Точками принятия решения являются «если», «пока», «для» и «метки случая». Как правило, 1–4 — низкая сложность, 5–7 — средняя сложность, 8–10 — высокая сложность, а 11+ — очень высокая сложность.

Методы с высокими значениями CC слабо соответствуют методам, которые на первый взгляд могут показаться сложными, и наоборот. Например, геттеры/установщики компонентов должны иметь v(G), равное 1, поскольку они мало что делают.

Все числа на первом снимке экрана ниже 6, так что особо не о чем беспокоиться. Однако, если метод имеет высокое значение для v(G), вам следует просмотреть два значения слева от него, ev(G) и iv(G). Например, если у вас есть метод со значением iv(G), равным 1, и значением ev(G), равным 15, этот метод не будет вызывать другие методы, но будет иметь некоторую сложную внутреннюю логику (возможно, вложенные циклы), которую, возможно, стоит реорганизовать.

Очевидно, что это гораздо больше, но следить за столбцом v(G) на вкладке Method metrics — это, пожалуй, самое важное, что нужно сделать.

person skomisa    schedule 02.02.2018
comment
Большое спасибо @skomisa, теперь это имеет гораздо больше смысла. - person Stephen Cowley; 02.02.2018