La Complejidad Ciclomática (CC) es una métrica de código que mide la complejidad estructural de un método contando sus rutas de ejecución linealmente independientes. Derivada de la teoría de grafos, la métrica representa un método como un grafo de flujo de control donde los nodos son bloques de sentencias y las aristas son saltos entre ellos. En el desarrollo práctico de C#, esto se calcula típicamente como 1 más el número de constructos de ramificación dentro del cuerpo de un método. Esto incluye palabras clave como `if`, `while`, `for`, `foreach`, `case`, `default`, `continue` y `goto`, así como operadores lógicos como `&&` y `||`, y operadores ternarios como `?:` y `??`.
Debido a que la CC representa el número de rutas independientes, sirve como un indicador directo de la testeabilidad. Un método con una puntuación de CC alta es inherentemente más difícil de leer, probar y modificar de forma segura porque requiere más casos de prueba para asegurar que cada rama posible esté cubierta. Si bien no existe una puntuación 'perfecta' universal, los estándares de la industria proporcionan puntos de referencia comunes: Thomas McCabe recomendó originalmente un límite de 10, mientras que el analizador CA1502 de Microsoft marca las puntuaciones superiores a 25 como excesivas. El objetivo de monitorear esta métrica es identificar 'imanes de errores': métodos complejos donde una sola regresión podría filtrarse fácilmente a producción debido a una lógica enredada.

El artículo explica que la CC sirve como un indicador directo de la testeabilidad, ya que las puntuaciones de complejidad más altas requieren más casos de prueba para asegurar una cobertura de ruta completa.
Gestionar la alta complejidad a menudo implica refactorizar un solo método grande en varios métodos más pequeños y enfocados. Por ejemplo, un método con una CC de 8 puede dividirse en submétodos que manejen tareas específicas como validación o lógica de descuentos. Si bien esta refactorización podría aumentar ligeramente la suma total de complejidad en toda la base de código, mejora la mantenibilidad al asegurar que cualquier unidad de código individual permanezca lo suficientemente simple como para que un desarrollador pueda razonar sobre ella en un solo momento. Para gestionar esto a escala, los desarrolladores pueden usar herramientas como NDepend o 'Calculate Code Metrics' de Visual Studio para identificar puntos críticos. Visualizar estas puntuaciones en un treemap —donde el tamaño de un rectángulo representa el número de sentencias y el color representa la puntuación de CC— permite a los equipos detectar rápidamente métodos grandes y de alta complejidad que requieren atención arquitectónica.

El texto describe el uso de treemaps para visualizar las puntuaciones, donde el tamaño representa el número de sentencias y el color representa la puntuación de CC para identificar puntos críticos.
Sin embargo, la Complejidad Ciclomática tiene limitaciones notables en la programación orientada a objetos moderna. Debido a que la métrica se centra en la ramificación explícita, no tiene en cuenta la complejidad implícita introducida por el polimorfismo. Por ejemplo, llamar a un método virtual en una interfaz podría conducir a docenas de rutas de ejecución diferentes dependiendo de la implementación subyacente, pero esto no incrementa la puntuación de CC. En consecuencia, aunque la CC es una excelente herramienta para identificar lógica procedimental compleja, debe combinarse con otras métricas, como la profundidad de anidamiento y la cobertura de pruebas, para proporcionar una imagen completa de la mantenibilidad de un sistema.