2016-08-20 20 views
1

Давайте предположим, что у нас есть такой код:Разъяснение ручной подсчет цикломатической сложности

switch(y) 
{ 
case 1: case 2: case 3: 
    function(); 
    break; 
case 4: case 5: case 6: 
    function_2(); 
    break; 
} 

Можем ли мы получить значение CC, как 6 + 1 здесь? Почему добавляется значение 1? Если значение CC считается равным 7, является ли число независимых путей?

Что делать, если сценарий падения рассматривается выше? Поскольку возможны только два уникальных пути, 2 +1 = 3

Какое из перечисленных выше верно или они оба правильные?

+3

Есть три (различные) пути через этот переключатель, а не две. – khelwood

+0

7-й случай, когда 'y' не является ни 1, 2, 3, 4, 5, ни 6. –

+0

Чтобы ответить на вопрос, я бы сказал, что CC должен быть определен с точки зрения логического выполнения кода, а не того, что процессор (и мы даже не знаем, что он будет делать большую часть времени). Нам все равно, будет ли '2' посещать меньше случаев« switch », потому что мы определенно знаем, что в итоге он достигнет того же состояния, что и' 3'. У меня есть сильное предпочтение говорить, что CC здесь 3: – Dici

ответ

0

Как мы знаем, CC = P+1.

Здесь P = число предикатных узлов (условия) = 2

Количество условий будет 2, потому что:

Дело отрасль может охватывать несколько альтернативных значения или диапазоны, такие как Случай 1, 2, 5 Кому 10. Поскольку они не вводят никаких дополнительных ветвей для принятия решения , они также не увеличивают цикломатическую сложность.

источник: here

Так, CC = 2 + 1 = 3

+0

Спасибо за объяснение, но если y = 2, код пропустит случай 1 и перейдет к случаю 2 и 3 вправо, поэтому, если мы напишем тот же код с условиями IF, мы получим CC 7. – Spark