Расчет циклической сложности
Я нахожусь на стадии обучения цикломатической сложности (CC). Для практики я вычисляю циклическую сложность из двух примеров и хочу подтвердить, соответствуют ли мои ответы или нет...
Ссылаясь на wikipedia, CC задается M = E − N + 2P
где:
- E = число ребер графа
- N = число узлов графа
- P = количество подключенных компонентов
Пожалуйста, помогите.
![Example 1]()
Здесь E = 8, N = 9 и P = 1. Следовательно, M = 8 - 9 + (2x1) = 1.
Пример 2:
![Example 2]()
Здесь E = 11, N = 10 и P = 1. Следовательно, M = 10-11 + (2x1) = 1.
Следовательно, для обоих примеров CC равно 1. Пожалуйста, дайте мне знать, правильно ли мой расчет или нет.
Ответы
Ответ 1
Вам нужно больше заботиться о правильной вставке значений в формулу.
В примере 1 вы говорите
Здесь E = 8, N = 9 и P = 1
Но на самом деле это наоборот: 9 ребер (= E), 8 узлов (= N), поэтому вы получаете CC из 3.
В примере 2 вы правы: E = 11, N = 10, P = 1. Но вы вставляете их в неправильный порядок в формуле; это должно быть 11 - 10 + (2x1) = 3
.
Ярлык: Если у вас есть фотография вашего графика, вы можете очень легко определить циклическую сложность. Просто подсчитайте количество областей, в которых фон разделен краями. В первом примере у вас есть две внутренние области (граничащие с краями) и одна окружающая область, дающая CC 3. То же самое происходит со вторым примером. (Этот метод требует, чтобы ребра не пересекались друг с другом, очевидно.)
Ответ 2
Также, если это помогает, это число условных (If, while, for) операторов +1. Итак, в приведенном выше примере есть 2 условных оператора. так что 2 + 1 = 3. Cyclomatic сложности в этом случае 3
Ответ 3
Просто подсчитайте количество замкнутой области и добавьте к ней 1.
В приведенном выше примере число замкнутой области = 2, поэтому CC = 2 + 1 = 3
Ответ 4
P = количество подключенных компонентов
В ДРУГИХ СЛОВАХ
P = число узлов, имеющих точки выхода
Источник