Existe uma correlação entre complexidade e acessibilidade?


18

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?

Eu acho que definitivamente haveria alguma correlação, já que programas menos complexos (dos poucos que analisamos) parecem ter resultados 'melhores' em termos de acessibilidade.

Alguém sabe de alguma tentativa de analisar as duas métricas juntas, e se não, qual seria um bom lugar para encontrar dados sobre complexidade e acessibilidade para um grande número de programas?

Respostas:


2

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 .


1

Não estou familiarizado com a acessibilidade, mas se é uma medida de caminhos de código que nunca podem ser executados, a complexidade ciclomática deve ser uma espécie de limite superior disso.


0

Pode haver algumas estatísticas sobre isso, mas eu diria que não há correlação porque uma não depende da outra e também há opções no design de um sistema de software para que você possa eliminá-la.

Em termos de dados do mundo real, pode haver uma forte correlação, mas isso pode ser devido a sistemas de software mal projetados que não eliminam essa correlação. Pode ser uma correlação acidental por falta de conhecimento da teoria dos grafos.


1
Um, dependendo do outro, é causalidade, não correlação.
Jeffo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.