Что такое когнитивная сложность в сонарном отчете? - PullRequest
0 голосов
/ 10 октября 2018

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

Вы можете найти ошибку когнитивной сложности в гидролокаторе как: Перейти к Проект-> Вкладка Проблемы-> Правила Раскрывающийся->Когнитивная сложность

Ниже снимок экрана дает вам ссылку на сонарный проект:

enter image description here

Я не получал никакого способарассчитать и уменьшить когнитивную сложность моих методов.Наконец-то я нашел точный способ подсчета сложности и отвечу на это в своем посте ниже.Пожалуйста, проверьте.

1 Ответ

0 голосов
/ 10 октября 2018

Когнитивная сложность

После поиска в некоторых блогах и чата с командой гидролокатора я нашел простое определение и расчет когнитивной сложности, как показано ниже:

Определение:

Когнитивная сложность, потому что тестируемость! = Понятность

Ваш письменный код должен быть простымЧтобы понять, как приведенное выше определение, просто.

меньше Когнитивная сложность больше Читабельность

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

enter image description here

In вышеНа изображении есть метод getAppConfigData(), когнитивная сложность которого измеряется.Прямо сейчас CC этого метода 18 .Как вы можете проверить на приведенном выше снимке экрана, есть предупреждение, которое говорит, что предел максимальной сложности составляет 15 , что ниже, чем текущий CC этого метода.

Теперь фактическийВопрос в том, как я могу вычислить CC моего метода во время разработки?

Следуйте ниже rules , чтобы получить свой CC любого метода или класса как:

  • Приращение при разрыве линейного (сверху вниз, слева направо) потока кода
  • Приращение при вложении структур, нарушающих поток
  • Игнорировать «сокращенные» структуры, которые с готовностью сокращают несколько строк кода в одну

Так что, когда вышеуказанные правила совпадают, просто добавьте + count к вашему CC и запомните, что количество будет увеличиваться в соответствииуровень разрыва кода, как, например, условие «если» получает +1, если это первый разрыв кода, но если вы использовали еще одно вложенное значение, то тогда это будет +2 для этого внутреннего «если», как показано на рисунке ниже.

enter image description here

Это все, что я получил с точки зрения когнитивной сложности .

Все, что связано с CC, можно найти на sonar blog

Спасибо

...