11
votes

Graphique de contrôle et complexité cyclomatique pour la procédure suivante

insertion_procedure (int a[], int p [], int N)
{
    int i,j,k;
    for (i=0; i<=N; i++) p[i] = i;
    for (i=2; i<=N; i++)
    {
        k = p[i];
        j = 1;
        while (a[p[j-1]] > a[k]) {p[j] = p[j-1]; j--}
        p[j] = k;
    }
}
I have to find cyclomatic complexity for this code and then suggest some white box test cases and black box test cases. But I am having trouble making a CFG for the code.Would appreciate some help on test cases as well.

2 commentaires

Quelle langue est-ce? Cela ressemble à c sauf pour le "INT" plutôt que "INT" dans la déclaration. Si c'est C, il n'y a pas d'imbriquée pour la boucle, mais Nothr a une boucle tandis que la boucle imbriquée dans une boucle.


Oh oui, il n'y a pas de boucle imbriquée. C'est c


3 Réponses :


3
votes

La complexité cyclomatique est de 4.

1 pour la procédure +1 pour la boucle pour +1 pour la boucle tandis que +1 pour la condition IF de la boucle tandis.


3 commentaires

Oui, mais ils sont au même niveau de nidification, il y a donc un seul chemin à travers le code, pas d'IFS.


@UN J. totalement d'accord avec toi. Ont ajouté un commentaire similaire juste maintenant dans la réponse originale. Ou bien, si vous connaissez l'explication, vous pouvez l'ajouter ici pour le bénéfice de tous.


2 pour + 1 pendant + 1 procédure = 4. Besoin d'une aide si pouvez-vous confirmer la véracité de ce lien wiki ici. Je pense que la complexité serait 4 ici. Mais cela est mentionné 3. J'ai besoin de quelqu'un pour me témoigner. en.wikipedia.org/wiki/cyclomatic_complexity#/media/... < / a>



27
votes

Commencez par numéroter les instructions:

 insertion_procedure (int a[], int p [], int N)
 {
(1)    Int i,j,k;
(2)    for ((2a)i=0; (2b)i<=N; (2c)i++) 
(3)        p[i] = i;
(4)    for ((4a)i=2; (4b)i<=N; (4c)i++)
       {
(5)       k=p[i];j=1;
(6)       while (a[p[j-1]] > a[k]) {
(7)           p[j] = p[j-1]; 
(8)           j--
          }
(9)          p[j] = k;
       }


7 commentaires

Hors de curiosité, quel outil avez-vous utilisé pour générer le graphique de débit?


@James McNellis J'ai utilisé MS Visio pour dessiner la CFG.


Ah; Je pensais que cela aurait pu être créé par une sorte d'outil d'analyse de code. +1 pour prendre l'effort de dessiner une très bonne image!


apprécier totalement l'effort. Merci!


@Vincentramdhanie Belle explication. Cependant, j'ai un doute: N'est-il pas possible que le contrôle de 4b puisse passer directement à la fin de la fonction? (semblable à un saut de 2b à 4a)? Y a-t-il une raison spécifique la même chose n'est pas prise en compte? Qu'est-ce que j'oublie ici?


En fait @jay, vous avez peut-être raison. 4b est un prédicat et en tant que tel devrait avoir 2 flèches quittant. Étrange comment personne ne s'est rusé auparavant.


OK j'ai compris. Cela ira de 4b à 10 mais pas de 9 à 10. Les régions totales resteront donc les mêmes.



2
votes

Vous pouvez également utiliser McCabe Formula M = E-N + 2C
E = bords
N = nœuds
C = composants
M = complexité cyclomatique
xxx

m = 14-12 + 2 * 1 = 4


0 commentaires