J'ai étudié la complexité cyclomatique (McCabe) et l'accessibilité des logiciels à uni récemment. Aujourd'hui, mon conférencier a dit qu'il n'y avait pas de corrélation entre les deux mesures, mais est-ce vraiment le cas?
En fait, oui et non.
Tout d'abord, juste pour vous rappeler, la métrique McCabe pour la complexité cyclomatique est calculée sur le graphique de flux de contrôle où vous résumez votre code source dans un graphique dirigé avec des blocs ou des instructions de base étant les nœuds et les transitions entre eux (soit par un flux de contrôle normal vers le bas) ou en cas de sauts et boucles conditionnés) étant des bords. La complexité cyclomatique ici peut être grossièrement (si vous considérez que tout votre programme n'a pas de code isolé, c'est-à-dire que votre graphe est connecté) comme la différence entre le nombre d'arêtes et le nombre de nœuds.
CC = E - N
Le problème d'accessibilité est un problème courant dans la théorie des graphes qui peut être exprimé de la manière suivante: étant donné deux nœuds A et B, le nœud B est accessible à partir du nœud A, c'est-à-dire que l'on peut atteindre B à partir de A et en suivant correctement les bords du graphique direction? C'est donc à nouveau la métrique qui s'applique au graphe de flux de contrôle et non au code.
Il existe plusieurs façons d'appliquer ce problème au graphique de flux de contrôle . Une façon est ce qu'on appelle "l'analyse d'accessibilité variable", ce qui signifie que pour la variable donnée, l'analyse détermine si sa valeur est toujours disponible à un certain point de programme (cette technique est également appelée découpage en tranches dans l'analyse logicielle). J'ai également trouvé seulement quelques articles qui utilisent ce terme (et généralement le problème d'accessibilité) pour les applications multi-thread .
Fondamentalement, on peut voir une sorte de corrélation entre le CC et l'accessibilité: avec l'augmentation du CC, le rapport des bords sur les nœuds augmente également et même dans le cas d'un graphique dirigé où la direction du bord est également importante, on peut spéculer que l'augmentation le nombre d'arêtes conduit finalement à l'augmentation des chemins disponibles dans le graphe et donc à l'augmentation de l'accessibilité via des connexions directes ou indirectes entre les nœuds. Donc, la réponse est oui ici.
D'un autre côté, la notion d'accessibilité dans un environnement multi-thread nécessite l'analyse de ce qu'on appelle le supergraph - et ce n'est pas si trivial. L'augmentation de CC (appelée ici « complexité de synchronisation ») pourrait entraîner une plus grande probabilité de blocage dans le logiciel et ainsi diminuer l'accessibilité de certains nœuds / segments de code. Par conséquent, "Non" est une réponse valable ici aussi .
Alexander Galkin
la source