Когнитивная сложность
После поиска в некоторых блогах и чата с командой гидролокатора я нашел простое определение и расчет когнитивной сложности, как показано ниже:
Определение:
Когнитивная сложность, потому что тестируемость! = Понятность
Ваш письменный код должен быть простымЧтобы понять, как приведенное выше определение, просто.
меньше Когнитивная сложность больше Читабельность
Позволяетсм., например, метод подсчета CC , прямо сейчас я имею в виду язык котлин, см. изображение ниже:
In вышеНа изображении есть метод getAppConfigData()
, когнитивная сложность которого измеряется.Прямо сейчас CC этого метода 18 .Как вы можете проверить на приведенном выше снимке экрана, есть предупреждение, которое говорит, что предел максимальной сложности составляет 15 , что ниже, чем текущий CC этого метода.
Теперь фактическийВопрос в том, как я могу вычислить CC моего метода во время разработки?
Следуйте ниже rules , чтобы получить свой CC любого метода или класса как:
- Приращение при разрыве линейного (сверху вниз, слева направо) потока кода
- Приращение при вложении структур, нарушающих поток
- Игнорировать «сокращенные» структуры, которые с готовностью сокращают несколько строк кода в одну
Так что, когда вышеуказанные правила совпадают, просто добавьте + count к вашему CC и запомните, что количество будет увеличиваться в соответствииуровень разрыва кода, как, например, условие «если» получает +1, если это первый разрыв кода, но если вы использовали еще одно вложенное значение, то тогда это будет +2 для этого внутреннего «если», как показано на рисунке ниже.
Это все, что я получил с точки зрения когнитивной сложности .
Все, что связано с CC, можно найти на sonar blog
Спасибо