¿Existe una correlación entre complejidad y accesibilidad?

18

He estado estudiando la complejidad ciclomática (McCabe) y la accesibilidad del software en la universidad recientemente. Hoy mi profesor dijo que no hay correlación entre las dos métricas, pero ¿es este realmente el caso?

Creo que definitivamente habría alguna correlación, ya que los programas menos complejos (de los pocos que hemos visto) parecen tener "mejores" resultados en términos de accesibilidad.

¿Alguien sabe de algún intento de mirar las dos métricas juntas, y si no, cuál sería un buen lugar para encontrar datos sobre la complejidad y la accesibilidad para un gran número (ish) de programas?

Saladin Akara
fuente

Respuestas:

2

He estado estudiando la complejidad ciclomática (McCabe) y la accesibilidad del software en la universidad recientemente. Hoy mi profesor dijo que no hay correlación entre las dos métricas, pero ¿es este realmente el caso?

En realidad tanto sí como no.

En primer lugar, solo para recordarle, la métrica de McCabe para la complejidad ciclomática se calcula en un gráfico de flujo de control donde abstrae su código fuente en un gráfico dirigido con bloques básicos o declaraciones que son los nodos y las transiciones entre ellos (ya sea por el flujo de control normal hacia abajo o en caso de saltos y bucles condicionados) siendo bordes. La complejidad ciclomática aquí puede ser aproximadamente (si considera que todo su programa no tiene código aislado, es decir, su gráfico está conectado) visto como la diferencia entre el número de bordes y el número de nodos.

CC = E - N

El problema de accesibilidad es un problema común en la teoría de grafos que se puede expresar de la siguiente manera: dados dos nodos A y B, ¿se puede llegar al nodo B desde el nodo A, es decir, se puede llegar a B comenzando desde A y siguiendo los bordes del gráfico en la posición correcta? ¿dirección? Por lo tanto, es nuevamente la métrica la que se aplica al gráfico de flujo de control y no al código.

Hay varias formas de aplicar este problema al gráfico de flujo de control . Una forma es el llamado "análisis de accesibilidad variable", lo que significa que para la variable dada el análisis determina si su valor todavía está disponible en cierto punto del programa (esta técnica también se denomina segmentación en el análisis de software). También encontré solo algunos artículos que usan este término (y generalmente el problema de accesibilidad) para aplicaciones de subprocesos múltiples .

Básicamente, se puede ver algún tipo de correlación entre el CC y la accesibilidad: con el aumento de CC, la proporción de bordes sobre los nodos también aumenta e incluso en el caso de un gráfico dirigido donde la dirección del borde también es importante, se puede especular que el aumento el número de bordes eventualmente conduce al aumento de las rutas disponibles en el gráfico y, por lo tanto, aumenta la accesibilidad, ya sea a través de conexiones directas o indirectas entre los nodos. Entonces, la respuesta es Sí aquí.

Por otro lado, la noción de accesibilidad en un entorno de subprocesos múltiples requiere el análisis de la llamada supergrafía, y esto no es tan trivial. El aumento de CC (llamado aquí " complejidad de sincronización ") podría conducir a una mayor probabilidad de bloqueo en el software y, por lo tanto, disminuir la accesibilidad de ciertos nodos / segmentos de código. Por lo tanto, "No" es una respuesta válida aquí también .

Alexander Galkin
fuente
1

No estoy familiarizado con la accesibilidad, pero si es una medida de rutas de código que nunca se puede ejecutar, la complejidad ciclomática debería ser una especie de límite superior de eso.

alex
fuente
0

Puede haber algunas estadísticas sobre esto, pero yo diría que no hay correlación porque una no depende de la otra y también hay una opción en el diseño de un sistema de software para que pueda eliminar esto.

En términos de datos del mundo real, puede haber una fuerte correlación, pero eso podría deberse a sistemas de software mal diseñados que no eliminan esta correlación. Podría ser una correlación accidental debido a la falta de conocimiento de la teoría de grafos.

Rudolf Olah
fuente
1
Uno dependiendo del otro es causalidad, no correlación.
JeffO