DEV Community

Cover image for Introdução ao Cognitive Driven Development (CDD): Controlando a Complexidade do Código de Forma Sistemática
Uiratan Cavalcante
Uiratan Cavalcante

Posted on

Introdução ao Cognitive Driven Development (CDD): Controlando a Complexidade do Código de Forma Sistemática

Introdução

No mundo do desenvolvimento de software, um dos maiores desafios que enfrentamos é garantir que o código que escrevemos hoje seja compreensível e sustentável no futuro. Afinal, enquanto as pessoas podem mudar de equipe ou empresa, o código permanece — e é ele que carrega o valor do software. Mas como podemos garantir que nosso código seja fácil de manter e evoluir, especialmente quando a complexidade tende a crescer naturalmente ao longo do tempo?

Foi pensando nessa questão que surgiu o Cognitive Driven Development (CDD), uma teoria de design de código que propõe uma abordagem sistemática para limitar o crescimento da complexidade do código. O CDD é inspirado na Teoria da Carga Cognitiva, da psicologia cognitiva, que estuda como o cérebro humano processa e armazena informações.

Teoria da Carga Cognitiva

A Teoria da Carga Cognitiva sugere que nossa memória de trabalho tem uma capacidade limitada para processar informações em um determinado período de tempo. Quando somos expostos a informações complexas ou desconhecidas, nossa capacidade de processamento é rapidamente sobrecarregada, o que dificulta o aprendizado e a compreensão.

No contexto do desenvolvimento de software, isso se traduz em um problema comum: quando a complexidade do código aumenta descontroladamente, os desenvolvedores que precisam entender e manter esse código enfrentam dificuldades. E é aí que o CDD entra em cena.

Como o CDD Funciona?

O CDD propõe uma maneira prática de medir e controlar a complexidade do código. A ideia central é definir pontos de complexidade intrínseca (ICPs) para elementos do código que aumentam a complexidade, como estruturas condicionais (if, else, switch), loops, blocos try-catch, acoplamento com classes específicas do projeto e outras construções que criam caminhos de execução no código.

Cada vez que um desses elementos aparece no código, ele adiciona um ponto à contagem de complexidade. A equipe define um limite máximo de ICPs para cada arquivo ou método, e quando esse limite é excedido, é sinal de que o código precisa ser refatorado para reduzir a complexidade.

Benefícios do CDD

  • Consenso na Equipe: O CDD ajuda a equipe a chegar a um consenso sobre o que é considerado complexo e como medir essa complexidade. Isso reduz discussões subjetivas sobre a "dificuldade" do código.
  • Controle da Complexidade: Ao definir limites claros para a complexidade, o CDD permite que a equipe controle o crescimento desenfreado da complexidade do código, facilitando a manutenção e a evolução do software.
  • Integração com Outras Práticas: O CDD não substitui outras práticas de design de código, como SOLID, Domain-Driven Design (DDD) ou arquitetura em camadas. Pelo contrário, ele complementa essas práticas, oferecendo uma métrica adicional para avaliar a qualidade do código.
  • Adaptabilidade: A equipe pode ajustar os ICPs e os limites de complexidade conforme necessário, tornando o CDD uma ferramenta flexível que se adapta ao contexto do projeto.

Exemplo Prático

Imagine um arquivo de código com mais de 1000 linhas, cheio de estruturas ifaninhadas e blocos try-catch. Sem uma métrica clara, pode ser difícil determinar se esse código é realmente complexo ou se apenas parece complexo para algumas pessoas. Com o CDD, a equipe pode definir que cada if conta como 1 ICP, cada try-catch como 1 ICP, e assim por diante. Ao somar esses pontos, é possível ter uma visão objetiva da complexidade do código.

Por exemplo, se a equipe define que o limite de ICPs para um método é 10, e um método específico tem 13 ICPs, isso indica que o código está mais complexo do que o desejado e precisa ser refatorado.

Como Implementar o CDD

Implementar o CDD é simples e pode ser feito em poucos passos:
Defina os ICPs: Reúna a equipe e defina quais elementos do código devem ser considerados como pontos de complexidade (ex.: if, else, loops, try-catch, etc.).

  • Estabeleça limites: Defina um limite máximo de ICPs para métodos, classes ou arquivos. Esse limite deve ser ajustado conforme a maturidade da equipe e a complexidade do projeto.
  • Meça e Refatore: Comece a medir a complexidade do código existente e refatore os trechos que excederem o limite estabelecido.
  • Revisite e Ajuste: Periodicamente, revise os ICPs e os limites de complexidade para garantir que eles continuem alinhados com as necessidades da equipe e do projeto.

Conclusão
O Cognitive Driven Development (CDD) é uma abordagem para controlar a complexidade do código de forma sistemática. Ao combinar insights da psicologia cognitiva com práticas de desenvolvimento de software, o CDD oferece uma maneira tangível de garantir que o código seja fácil de entender e manter, mesmo em projetos de longo prazo.

Se você está buscando uma maneira de melhorar a qualidade do código na sua equipe, o CDD pode ser a ferramenta que faltava. Experimente implementar essa prática no seu dia a dia e veja como ela pode transformar a forma como você e sua equipe lidam com a complexidade do código.

Bibliografia
Leonardo Ferreira Barbosa, Victor Hugo Pinto, Alberto Luiz Oliveira Tavares de Souza, and Gustavo Pinto. 2022. To What Extent Cognitive-Driven Development Improves Code Readability? In Proceedings of the 16th ACM / IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM '22). Association for Computing Machinery, New York, NY, USA, 238–248. https://doi.org/10.1145/3544902.3546241

Top comments (0)