La complejidad ciclomática es una forma de determinar si su código necesita ser refactorizado. El código se analiza y se determina un número de complejidad. La complejidad se determina ramificando (si hay declaraciones, etc.) La complejidad también podría tener en cuenta el anidamiento de bucles, etc. y otros factores dependiendo del algoritmo utilizado.
El número es útil a nivel de método. En niveles superiores es solo un número.
Un número de 17,754 indica complejidad a nivel de proyecto (código total), que no tiene mucho significado.
Profundizar en la complejidad del nivel de clase y método determinará las áreas del código que deben refactorizarse en métodos más pequeños o rediseñados para eliminar la complejidad.
Considere una CASE
declaración con 50 casos en un método. Quizás cada estado tiene una lógica de negocios diferente. Eso generará una complejidad ciclomática de 50. Hay 50 puntos de decisión. La declaración CASE puede tener que ser rediseñada utilizando un patrón de fábrica para deshacerse de la lógica de ramificación. A veces puede refactorizar (dividir el método en partes más pequeñas) y en algunos casos solo un rediseño reducirá la complejidad.
En general, para la complejidad del nivel de método:
- <10 Fácil de mantener
- 11-20 más difícil de mantener
- Más de 21 candidatos para refactorización / rediseño
También tenga en cuenta que las complejidades más altas hacen que el código sea más difícil de probar.
La mayor complejidad que he visto en un solo método fue 560. Fue alrededor de 2000 líneas de declaraciones if en un método. Básicamente insostenible, no comprobable, lleno de posibles errores. ¡Imagine todos los casos de prueba de unidad necesarios para esa lógica de ramificación! No está bien.
Intente mantener todos los métodos por debajo de 20 y tenga en cuenta que hay un costo para refactorizar cualquier método para que sea menos complejo.