Qualidade de código, você já deve ter percebido, é meio que uma obsessão para mim. Já escrevi aqui sobre analisadores estáticos, que analisam o código enquanto ele ainda está sendo escrito. Mas e se além de analisar o código, você tivesse meios de analisar a estrutura dele? Descobrir referências circulares, violações de camadas e a consistência da qualidade do código é uma das muitas tarefas que o NDepend pode executar na sua IDE ou no seu pipeline.
Antes de continuar, quero apenas deixar registrado que há muito tempo venho tentando escrever sobre esta incrível ferramenta. Contudo, uma sucessão de problemas de saúde envolvendo a minha família, me impediram de analisar a ferramenta a contento e impediram que esse artigo fosse disponibilizado mais cedo. Por isso, adianto as minhas mais sinceras desculpas para as pessoas que acompanham o meu blog.
Ele funciona no Visual Studio!
Se você tem o Visual Studio instalado no seu computador, é muito fácil de instalar o NDepend. O próprio site possui uma vasta documentação e vídeos que ajudam no processo de instalação no Visual Studio. A única coisa que eu, confesso, achei estranha, é a necessidade de adicionar um novo projeto específico para o NDepend na solution.
Ao clicar no menu Extensions -> NDepend -> Attach New NDepend Project to Current VS Solution, o NDepend irá avaliar os seus projetos e verificar quais assemblies ele deve analisar ou não. Como exemplo, fiz um projeto que – espero – esteja cheio de issues a serem identificadas pelo NDepend. Veja que só para análise temos 10 projetos. Crianças, não façam isso em casa!
Após o fim da análise, o seu browser padrão irá abrir com um relatório de tudo o que o NDepend identificou no seu projeto. Ele fornece aquelas métricas que já conhecemos – como Code Coverage, complexidade siclomática, quebra de padrão de escrita, etc – além de outros gráficos que auxiliam na visão geral da estrutura do projeto. Quero destacar alguns deles::
Gráfico de dependências
O NDepend mostra para você todas as dependências existentes entre os assemblies da sua solution e assemblies de terceiros. Mas porquê eu quero ver isso? Essa visão pode se tornar interessante principalmente em projetos monolíticos, em um processo de análise de impacto. Assim você sabe que, caso modifique algum módulo, é possível que os módulos vinculados sofram impactos. Além, é claro, de fornecer uma melhor visualização da estrutura e design do projeto.
Matriz de dependência
Para mim, Matriz de dependência é um insumo muito útil no momento em que o software está sendo projetado. Com base na matriz, é possível organizar o trabalho de forma que ele prossiga da forma mais paralelizada possível. Durante a manutenção do software, se o Gráfico de Dependências desenha o acoplamento entre as diversas camadas do software, a Matriz de Dependência adiciona números, mostrando o quão co-dependentes são os sistemas.
O NDepend também produz outros gráficos que ajudam a visualizar as métricas de código. Para as pessoas que leram o último livro do Robert Martin, “Arquitetura Limpa” (Clean Architecture), vão reconhecer o gráfico de Abstração vs. Instabilidade.
Outro ponto interessante do NDepend é que você também pode ter acesso a essas informações dentro do próprio Visual Studio.
E alguns gráficos ficam até mais interessantes dessa forma, já que você consegue navegar dentro deles. Veja como o gráfico de dependências fica mais rico:
Ao invés de visualizar por módulos, eu posso visualizar por namespaces e também encontrar na tela o tráfego das mensagens (o famoso stack), sabendo qual namespaces possui classes que chamam ou são chamadas por outros namespaces.
Por que eu usaria o NDepend, se eu tenho o SonarQube?
Para a pessoa desenvolvedora de maior senioridade ou até mesmo para aquela que é Tech Lead, o NDepend possui essas ferramentas de análise estrutural que o SonarQube não possui. E essa integração com o Visual Studio é muito interessante. Mas isso não quer dizer que as ferramentas necessariamente se excluem. Se você já tem o SonarQube na sua pipeline e está feliz, todos estamos felizes.
Contudo se você ainda não tem o SonarQube e está pensando em contratar a versão Enterprise, você pode se assustar com o preço. O modelo de licença do SonarQube é baseado na quantidade de linhas de código. Quanto mais linhas, mais caro o preço da licença anual, começando em US$ 20.000,00.
Já o valor da licença do NDepend está relacionado a quantidade de instâncias adquiridas. E os valores são inferiores – considerando, claro, quantas instâncias você deseja executar.
Neste momento a pergunta que você pode estar se fazendo é: vale o preço? A resposta é bastante subjetiva, já que está muito vinculada aos valores de cada empresa e na sua organização. Do meu ponto de vista, toda ajuda para manter a qualidade do código é um bom investimento, uma vez que um bom código é muito mais barato de ser mantido, alterado e estendido.
Se depois deste post você deseja experimentar o NDepend, você pode fazer o download aqui.
Um feliz 2020 para vocês!