La complejidad ciclomática es una de las múltiples mediciones de la complejidad del código. Por ejemplo, en Visual Studio, el índice de mantenimiento depende de:
- Complejidad ciclomática
- Profundidad de la herencia,
- Acoplamiento de clase,
- Líneas de código IL (el código IL es el código fuente compilado en el lenguaje intermedio que luego se compila JIT).
Cada una de esas mediciones, así como otras mediciones de complejidad, funcionan de alguna manera, pero nunca son la indicación absoluta de que el código fuente tiene problemas de complejidad . Se sabe que algunas mediciones, como LOC, son totalmente sin sentido y engañosas; otros, como la complejidad ciclomática, son ligeramente mejores, pero aún tienen problemas.
Esto se debe al hecho de que:
Es demasiado complicado para un programa de computadora saber qué tan complejo sería percibir un desarrollador el código fuente .
Por ejemplo, a menudo noté una gran caída del índice de mantenibilidad al refactorizar el código de estilo de procedimiento a estilo funcional a través de LINQ, transformando un bloque de código fuente altamente ilegible en una sola expresión de encadenamiento que era extremadamente explícita.
Otro ejemplo sería el reflejo de los patrones de programación en las métricas. A menudo, al introducir patrones de programación en su código, lo hará menos complejo para un desarrollador (suponiendo que este desarrollador esté familiarizado con esos patrones), pero el índice de mantenimiento disminuirá.
El código fuente puede tener diferentes formas.
Medir la complejidad ciclomática o la profundidad de la herencia o el acoplamiento de clases es muy limitado para una aplicación web, porque, como dijiste, la existencia de HTML / CSS, JavaScript, etc. y, como se señaló en los comentarios, la existencia de acceso a la base de datos.
Esta limitación no existe solo para aplicaciones web. En aplicaciones de escritorio, por ejemplo, ¿qué pasa con la complejidad del diseño de la interfaz de usuario (código XAML en aplicaciones de Windows)? ¿Qué pasa con el código generado? O acceso a la base de datos?