2 votes

La métrique de complexité de McCabe et les chemins indépendants

int maxValue = m[0][0];         
for (int i = 0; i < N; i++) 
{               
    for (int j = 0; j < N; j++) 
    {                    
        if ( m[i][j] >maxValue )        
        {                 
            maxValue = m[i][j];     
        }                     
    }                    
}                   
cout<

`

Pour le code ci-dessus si nous dessinons un graphe de flux comme ceci flow graph les chemins indépendants de base seraient les suivants six
Chemin 1: 1 2 3 10 11 12 13 19
Chemin 2: 1 2 3 10 11 12 13 14 15 18 13 19
Chemin 3: 1 2 3 10 11 12 13 14 15 16 17 15 18 13 19
Chemin 4: 1 2 3 4 5 9 3 10 11 12 13 19
Chemin 5: 1 2 3 4 5 6 8 5 9 3 10 11 12 13 14 15 16 17 15 18 13 19
Chemin 6: 1 2 3 4 5 6 7 8 5 9 3 10 11 12 13 14 15 16 17 15 18 13 19

Donc, la question ici est que selon le code donné le chemin 2, 3, 4 ne peuvent pas être testés (Notez le "N" dans les boucles). Est-il donc acceptable de ne pas avoir un chemin d'exécution réel comme dans l'ensemble de base donné?... ou selon la métrique de complexité de McCabe devons-nous modifier le code donné ci-dessus. Parce qu'un de mes enseignants a dit que nous devons modifier le code et il a également dit qu'il y a des boucles non structurées donc nous devons modifier le code. (Je ne vois pas non plus de boucle non structurée) Mais j'ai l'impression que si nous changeons le code, la sortie réelle peut différer de la sortie attendue. Alors s'il vous plaît que quelqu'un explique cela

`

7voto

Alexander Serebrenik Points 2492

1) La complexité de McCabe peut être calculée comme le nombre de points de décision + 1. Dans votre cas, il y a 5 points de décision (noeuds 3, 5, 6, 13 et 15), ce qui signifie que la complexité de McCabe du fragment de code est de 5+1 = 6. 6 n'est en aucun cas trop élevé en termes de complexité de McCabe : on pourrait, bien sûr, toujours soutenir que c'est trop élevé étant donné la fonctionnalité que l'implémentation doit fournir.

2) La complexité de McCabe est liée à la testabilité d'une méthode/procédure mais pas à la testabilité d'un chemin spécifique. Les chemins peuvent être réalisables (= il existe des valeurs des variables qui forcent l'exécution à travers ce chemin) ou non, mais la complexité de McCabe est heureusement inconsciente de telles complications. Si vous voulez vraiment étudier la faisabilité des chemins, gardez à l'esprit que le problème en général est indécidable mais de nombreux algorithmes pratiques d'analyse des flux de données sont disponibles.

3) si nous changeons le code, la sortie réelle peut différer de la sortie attendue Bien sûr, vous ne pouvez pas introduire un changement arbitraire et espérer que les résultats seront les mêmes. Cependant, et c'est probablement ce que votre tuteur voulait dire, il existe un moyen de restructurer votre code de manière à ce que la sortie produite reste la même et que la complexité de McCabe diminue. Pensez, par exemple, à savoir si vous avez vraiment besoin de séparer les tâches de calcul du maximum et de la somme.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X