Подтвердить что ты не робот

Расчет циклической сложности

Я нахожусь на стадии обучения цикломатической сложности (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. Пожалуйста, дайте мне знать, правильно ли мой расчет или нет.

4b9b3361

Ответ 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 = число узлов, имеющих точки выхода

Источник