dificuldade de testar e manter um código Indica o número mínimo de testes necessários para cobrir os caminhos possíveis Relacionada diretamente à estrutura de controle do código Agnóstico a linguagem
• Artigo "A Complexity Measure", publicado na IEEE Transactions on Software Engineering • Visa medir o número de caminhos lineares independentes em um programa • Relacionada diretamente à estrutura de controle do código criado por: Thomas Mccabe - complexidade ciclomática
Surge para complementar a ciclomática • Intenção é refletir a dificuldade real de entendimento do código • Foco em saltos mentais (goto, break, continue) e níveis de aninhamento criado por: complexidade cognitiva - ‘17 SonarSource Team
a incremento por aninhamento exemplos: if, else,for, while, do~while, catch, switch, etc TIPOS { estrutural fundamental híbrida { { { avaliado em declarações não sujeitas a incremento por aninhamento exemplos: and, or, goto, recursão avaliado em estrutura de controle de fluxo que não estão sujeitas a incremento: exemplo: else~if
um switch. não contabiliza else Complexidade Cognitiva: 1 ponto ou mais a depender do aninhamento. Não contabiliza pontos para cada case de um switch, porém conta escopos de else PONTUAÇÃO { estrutural fundamental híbrida { { { 1 ponto tanto para CC quanto para CCog Para a CCog, pode ser ignorado a depender da abreviação ou reduzida por ser sequencial Complexidade Ciclomática: 1 ponto Complexidade Cognitiva: 1 ponto ou mais a depender do aninhamento
Elemento Resumo What CC mede os caminhos lógicos do código; CCog mede o esforço mental para compreendê-lo. Why Para identificar códigos complexos, priorizar testes e reduzir riscos de erros e retrabalho. Where Em qualquer parte do código-fonte: funções, métodos, classes ou módulos. When Durante code reviews, planejamento de testes, automação ou refatorações. Who Devs, QAs, analistas de qualidade, líderes técnicos e engenheiros de software. How Com ferramentas como radon, lizard, SonarQube, ou análise manual simples. How much Gratuito com ferramentas open-source ou IDEs; pago com plataformas como SonarQube Enterprise.