A complexidade ciclomática é uma maneira de determinar se seu código precisa ser refatorado. O código é analisado e um número de complexidade é determinado. A complexidade é determinada pela ramificação (instruções if, etc.). A complexidade também pode levar em consideração o aninhamento de loops, etc. e outros fatores, dependendo do algoritmo usado.
O número é útil no nível do método. Em níveis mais altos, é apenas um número.
Um número de 17.754 indica a complexidade no nível do projeto (código total), que não tem muito significado.
A análise detalhada da complexidade no nível de classe e método determinará áreas do código que precisam ser refatoradas em métodos menores ou redesenhadas para eliminar a complexidade.
Considere uma CASE
declaração com 50 casos em um método. Talvez cada estado tenha uma lógica de negócios diferente. Isso gerará uma complexidade ciclomática de 50. Existem 50 pontos de decisão. A instrução CASE pode precisar ser redesenhada usando um padrão de fábrica para se livrar da lógica de ramificação. Às vezes, você pode refatorar (dividir o método em partes menores) e, em alguns casos, apenas um redesenho reduzirá a complexidade.
Em geral, para a complexidade no nível do método:
- <10 Fácil de manter
- 11-20 Mais difícil de manter
- 21+ Candidatos a refatoração / reprojeto
Considere também que complexidades mais altas tornam o código mais difícil de testar na unidade.
A maior complexidade que vi em um único método foi 560. Foram cerca de 2000 linhas de instruções if em um método. Basicamente insustentável, não testável, cheio de possíveis erros. Imagine todos os casos de teste de unidade necessários para essa lógica de ramificação! Não é bom.
Tente manter todos os métodos abaixo de 20 e perceba que há um custo para refatorar qualquer método para torná-lo menos complexo.