Mapa de dependência para classes e métodos Java
-
23-09-2019 - |
Pergunta
Eu tenho um projeto Java em que estou trabalhando há algum tempo. O design começou muito bom, mas lentamente degradado à medida que as mudanças foram feitas. Estou procurando algum tipo de ferramenta que analise o projeto. Seria muito bom ter um mapa das dependências de diferentes classes/métodos. Sinto que certos métodos estão lá apenas para cumprir uma meta muito específica. Eu gostaria de eliminar código desnecessário e melhorar meu design.
Qualquer sugestão seria ótima! Obrigado!
Solução
Você pode querer conferir JDepend. Foi desenvolvido especificamente para resolver o problema que você está enfrentando.
Trabalhando como consultor, é muito comum ser jogado em uma enorme base de código herdado. Normalmente a primeira coisa que faço é executar JDepend nele, para tentar obter meu rolamento na base de código e em todas as dependências.
Boa sorte.
Outras dicas
Muitas ferramentas estão disponíveis para isso, dependendo do tamanho do seu sistema. O avô de todos é a estrutura101, um produto comercial.
Eu usei isso em alguns grandes projetos - é complexo, mas facilmente o mais abrangente de todas as ferramentas que conheço. Ele pode representar graficamente uma arquitetura enorme e permite que você desembaraça algumas coisas complexas. Possui um produto irmão chamado reestruturação101, onde você pode fazer os cenários se-se.
Um bom concorrente é Stan4J. Não é nem de longe tão completo, mas faz algumas coisas melhor, principalmente mostrando o contexto de dependência no nível da classe.
(Eu possuo os dois produtos, mas não tenho afiliação comercial com qualquer um)
Outra maneira de visualizar dependências complexas, particularmente no nível do projeto, é uma matriz de estrutura de dependência (DSM). Embora o S101 possa fazer um DSM, o Lattix tem mais suporte - ele pode lidar com as dependências de mola e hiberna:
(Eu não usei Lattix - eles tornam muito difícil avaliá -lo, o que é bizarro porque eu trabalho em alguns muito grandes sistemas)
Se o seu software for bastante pequeno e você estiver mais interessado no nível de aula simples, algo como o Architexa pode ajudá -lo a entender melhor a estrutura:
Finalmente, se você quiser rolar o seu, pode fazer isso facilmente com o ASM. Inclui até uma ferramenta de matriz de dependência que rastreia no nível do pacote:
http://asm.ow2.org/doc/tutorial-asm-2.0.html(Veja a página para a matriz de dependência do Nify)
Aqui está a fonte para isso - é muito simples, mas inteligente. Funciona bytecodes.http://cvs.forge.objecjectweb.org/cgi-bin/viewcvs.cgi/asm/asm/examples/dependencies/src/org/objectweb/asm/depend/
Esta não é uma resposta perfeita, mas pode ser útil para verificações rápidas. Se você estiver usando o Eclipse para o seu desenvolvimento, poderá visualizar o gráfico de chamadas para um método selecionando seu nome e pressionando Ctrl-Alt-H (ou clique com o botão direito do mouse e selecione "Open Call Hierarchy"). Você pode usar a visualização que abre para ver o que chama o método e quais métodos são chamados pelo método.
Existem vários bons analisadores para Java. Eu tenho brincado com o PMD até agora e tive sorte decente com isso.
Você também pode querer tentar FindBugs. Ajuda muito com esses e muitos outros problemas.
Doxygen pode ajudar, especialmente com representações gráficas das dependências entre classes e métodos.
Usamos este pequeno projeto grátis
Dê uma olhada no Apache Hera