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 .