O que é CDD?

CDD no Desenvolvimento de Software - Imagem de tecnologia

Nosso cérebro é uma máquina extremamente poderosa, capaz de lidar com uma quantidade absurda de dados – chega a receber cerca de 11 milhões de bits de informação por segundo. Naturalmente, nem todos esses dados são utilizados em tomadas de decisão.

No dia a dia, um desenvolvedor participa de inúmeras reuniões, destrincha requisitos, atualiza atividades, resolve bugs, cria e refatora código. Grande parte da carga mental está concentrada na própria programação. Para tornar esse trabalho menos massivo, foi criado o CDD – Cognitive-Driven Development (Desenvolvimento Orientado à Cognição).

Um dos principais objetivos do CDD é limitar a complexidade do código, reduzindo o grau de carga cognitiva exigido para compreendê-lo e mantê-lo. Robert Martin já dizia que um código limpo é aquele que qualquer desenvolvedor pode entender com facilidade. Essa é uma das grandes dores que o CDD busca aliviar por meio do uso do ICP.


Ponto de Complexidade Intrínseca (ICP)

Embora o termo possa soar complicado, o conceito é simples: o ICP (Intrinsic Complex Point) é um marcador que ajuda a identificar pontos no código que podem aumentar sua complexidade. Seus valores são definidos previamente e devem ser discutidos e acordados pela equipe de desenvolvimento, levando em conta as características do projeto e o contexto em que estão inseridos.

Exemplo de Uso

Métrica:

  1. Condicionais (if, loops, if ternário) – 1 ICP
  2. Blocos de código (try, catch, cases do switch, funções passadas como argumentos) – 1 ICP
  3. Acoplamento com classes específicas do projeto – 1 ICP

Como Avaliar?

  • Limite de ICPs por arquivo: 30 ICPs
  • Greenfield (sistema iniciado do zero): 10 ICPs
  • Código Legado: Limite de 50 ICPs

Caso o número de ICPs ultrapasse o limite definido para a situação específica, fica claro que é necessário refatorar o código. Em alguns casos, novos limites podem ser criados para melhor adequar a análise à realidade do projeto.

Exemplo prático com Java:


public void processOrder(Order order){ // 1 ICP: acoplamento de classe
    if (order == null) { // 1 ICP: condicional
        System.out.println("Invalid order");
        return;
    }

    try { // 1 ICP: bloco try
        if ("NEW".equals(order.getStatus())) { // 1 ICP: condicional
            processNewOrder(order);
        } else if ("PENDING".equals(order.getStatus())) { // 1 ICP: condicional
            processPendingOrder(order);
        } else {
            processDefaultOrder(order);
        }
    } catch (Exception e) { // 1 ICP: bloco catch
        System.out.println("Error processing order: " + e.getMessage());
    }
}
    

Por que Utilizar o CDD?

Você já deve ter se deparado com códigos escritos de forma conturbada, com arquivos que se estendem por centenas ou até milhares de linhas – talvez até tenha sido o autor de algum deles. A prática do CDD ajuda a tornar o código mais legível e de fácil manutenção, contribuindo para um ambiente de desenvolvimento mais saudável e eficiente. Afinal, como bem disse Martin, escrevemos código não para as máquinas, mas para os humanos.

Pesquise mais sobre o assunto! Recomendo a leitura deste link, que serviu como base para este texto e apresenta casos de sucesso. Experimente aplicar o CDD em sua equipe ou projetos pessoais e observe os benefícios práticos na qualidade e manutenção do código.


Obrigado por ter lido até aqui. Continue acompanhando o blog para mais conteúdos sobre tecnologia e desenvolvimento!

Comentários

Postar um comentário

Postagens mais visitadas deste blog

Código Limpo - Capitulo 1

Cloud Finops - Capítulo 1 - O que é FinOps?