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!

Foi útil?

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.

http://structure101.com

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.

http://www.stan4j.com

(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:

http://lattix.com/

(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:

http://www.architexa.com/

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

http://www.devx.com/opensource/article/33729

Dê uma olhada no Apache Hera

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top