Existe-t-il une corrélation entre la complexité et l'accessibilité?

18

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?

Je pense qu'il y aurait certainement une certaine corrélation, car les programmes moins complexes (parmi les rares que nous avons examinés) semblent avoir de «meilleurs» résultats en termes d'accessibilité.

Quelqu'un connaît-il une quelconque tentative d'examiner les deux mesures ensemble, et sinon, quel serait un bon endroit pour trouver des données sur la complexité et l'accessibilité pour un grand nombre (ish) de programmes?

Saladin Akara
la source

Réponses:

2

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
1

Je ne suis pas familier avec l'accessibilité, mais s'il s'agit d'une mesure de chemins de code qui ne peuvent jamais être exécutés, la complexité cyclomatique devrait être une sorte de limite supérieure de cela.

alex
la source
0

Il peut y avoir des statistiques à ce sujet, mais je dirais qu'il n'y a pas de corrélation car l'une ne dépend pas de l'autre et il y a aussi un choix dans la conception d'un système logiciel de sorte que vous pouvez l'éliminer.

En termes de données du monde réel, il peut y avoir une forte corrélation, mais cela pourrait être dû à des systèmes logiciels mal conçus qui n'éliminent pas cette corrélation. Il pourrait s'agir d'une corrélation accidentelle en raison du manque de connaissances de la théorie des graphes.

Rudolf Olah
la source
1
L'une dépend de l'autre est la causalité, pas la corrélation.
JeffO