2016-08-20 4 views
1

Supposons que nous avons un code comme ceci:Clarifier le comptage manuel de complexité cyclomatique

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

Pouvons-nous obtenir la valeur CC que 6 + 1 ici? Pourquoi une valeur de 1 est ajoutée? Si la valeur CC est considérée comme 7, est-ce le nombre de chemins indépendants?

Et si un scénario d'effondrement est considéré ci-dessus? Comme il n'y a que deux chemins uniques possibles, 2 +1 = 3

Lesquels sont corrects ou sont-ils tous les deux corrects?

+3

Il y a trois chemins distincts() à travers ce commutateur, pas deux. – khelwood

+0

7e cas est quand 'y' n'est ni 1, 2, 3, 4, 5 ni 6. –

+0

Pour essayer de répondre à la question, je dirais que CC doit être défini en fonction de ce que le code fait logiquement, et non du processeur va effectivement faire (et nous ne savons même pas ce qu'il fera la plupart du temps). Nous nous en fichons si le '2' va visiter moins de cas de' switch' car nous savons pertinemment qu'à la fin il atteindra le même état que le '3'. J'ai une forte préférence pour dire que le CC est 3 ici – Dici

Répondre

0

Comme nous le savons, CC = P+1.

Ici, P = nombre de noeuds sous-jacentes (conditions) = 2

Nombre de conditions seront 2 parce que:

branche de cas peut couvrir plusieurs alternatives Valeurs ou intervalles, tels que Cas 1, 2, 5 à 10. Comme ils n'introduisent aucune branche supplémentaire pour décider , ils n'augmentent pas non plus la complexité cyclomatique.

source: here

Ainsi, CC = 2 + 1 = 3

+0

Merci pour l'explication, mais si le y = 2, le code sautera le cas 1 et passera au cas 2 et 3 à droite, donc si nous écrivons le même code ci-dessus avec des conditions IF, nous obtiendrons un CC de 7. – Spark