Estive estudando complexidade ciclomática (McCabe) e acessibilidade de software na uni recentemente. Hoje meu palestrante disse que não há correlação entre as duas métricas, mas esse é realmente o caso?
Na verdade, sim e não.
Antes de tudo, apenas para lembrá-lo, a métrica de McCabe para complexidade ciclomática é calculada no gráfico de fluxo de controle em que você abstrai seu código-fonte em um gráfico direcionado com blocos ou instruções básicas sendo os nós e as transições entre eles (seja pelo fluxo de controle normal para baixo) ou no caso de saltos e loops condicionados) serem bordas. A complexidade ciclomática aqui pode ser grosseira (se você considerar que seu programa inteiro não possui código isolado, ou seja, seu gráfico está conectado), é visto como a diferença entre o número de arestas e o número de nós.
CC = E - N
O problema de alcançabilidade é um problema comum na teoria dos grafos que pode ser expresso da seguinte maneira: dados dois nós A e B, é o nó B alcançável a partir do nó A, ou seja, é possível alcançar B começando em A e seguindo as bordas do gráfico corretamente direção? Portanto, é novamente a métrica aplicável ao gráfico de fluxo de controle e não ao código.
Existem várias maneiras de aplicar esse problema ao gráfico de fluxo de controle . Uma maneira é a chamada "análise de acessibilidade de variável", o que significa que, para a variável especificada, a análise determina se seu valor ainda está disponível em determinado ponto do programa (essa técnica também é chamada de corte na análise de software). Também encontrei apenas alguns artigos que usam esse termo (e geralmente o problema de acessibilidade) para aplicativos multithread .
Basicamente, pode-se ver algum tipo de correlação entre o CC e a acessibilidade: com o aumento do CC, a proporção de arestas sobre os nós também aumenta e mesmo no caso de um gráfico direcionado onde a direção da aresta também é importante, pode-se especular que o aumento o número de arestas leva ao aumento dos caminhos disponíveis no gráfico e, portanto, aumenta a acessibilidade por meio de conexões diretas ou indiretas entre os nós. Então, a resposta é sim aqui.
Por outro lado, a noção de alcançabilidade em ambiente multithread requer a análise do chamado supergrafo - e isso não é tão trivial. O aumento do CC (chamado aqui de " complexidade de sincronização ") pode levar a uma maior probabilidade de conflito no software e, assim, diminuir a acessibilidade de certos nós / segmentos de código. Portanto, "Não" é uma resposta válida aqui também .