O que é CDD?

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:
- Condicionais (if, loops, if ternário) – 1 ICP
- Blocos de código (try, catch, cases do switch, funções passadas como argumentos) – 1 ICP
- 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!
Muito bom 👏🏻🤌🏻
ResponderExcluir