2010-03-02 17 views
7

Ho un progetto Java su cui sto lavorando da un po '. Il progetto è iniziato piuttosto bene, ma lentamente si è degradato con le modifiche apportate. Sto cercando una sorta di strumento che analizzerà il progetto. Sarebbe davvero bello avere una mappa delle dipendenze di diverse classi/metodi. Mi sento come certi metodi sono solo lì per raggiungere un obiettivo molto specifico. Mi piacerebbe eliminare il codice non necessario e migliorare il mio design.Mappa delle dipendenze per classi e metodi Java

Qualsiasi suggerimento sarebbe fantastico! Grazie!

+0

Un sacco di grandi risposte! Grazie per l'aiuto! – Ryan

+0

Questo è in qualche modo non correlato, ma lo strumento UML Umbrello genererà diagrammi UML del codice. Sarebbe stato utile per me in quel momento. – Ryan

+0

Appena individuato questo a causa del tuo recente commento, ma per riferimento futuro si potrebbe verificare Structure101. –

risposta

5

Si consiglia di verificare JDepend. È stato specificamente sviluppato per risolvere il problema che stai affrontando.

Lavoro come consulente è molto comune per me essere gettato in un enorme codice base legacy. In genere, la prima cosa che faccio è eseguire JDepend su di esso per cercare di capire la base del codice e tutte le dipendenze.

Buona fortuna.

+1

JDepend fornisce solo dipendenze tra pacchetti, non classi e metodi –

-1

Dai un'occhiata alla Apache Ivy

+0

Ivy non è un cattivo manager delle dipendenze, ma non risponde alla sua domanda che sta cercando qualcosa che analizzi le sue dipendenze dei progetti esistenti. – Matt

1

Doxygen può aiutare, in particolare con rappresentazioni grafiche delle dipendenze tra classi e metodi.

1

Questa non è una risposta perfetta, ma può essere utile per i controlli rapidi. Se si sta utilizzando Eclipse per lo sviluppo, è possibile visualizzare il grafico delle chiamate per un metodo selezionandone il nome e premendo Ctrl-Alt-H (o facendo clic con il tasto destro e selezionando "Apri gerarchia chiamate"). È possibile utilizzare la vista che si apre per vedere cosa chiama il metodo e quali metodi vengono chiamati dal metodo.

+0

Questo aiuta davvero molto. Grazie! – Ryan

1

Esistono diversi ottimi analizzatori per Java. Ho giocato con PMD finora e ho avuto fortuna discreta.

1

Si consiglia inoltre di provare FindBugs. Aiuta molto con questi e molti altri problemi.

1

Molti strumenti sono disponibili per questo, a seconda delle dimensioni del sistema. Il nonno di tutti è Structure101, un prodotto commerciale.

http://structure101.com

Ho usato questo su alcuni grandi progetti - è complessa, ma senza dubbio il più completo di tutti gli strumenti che conosco. Può rappresentare graficamente un'architettura enorme e ti consente di districare alcune cose complesse. Ha un prodotto sorella chiamato reStructure101 in cui puoi fare scenari ipotetici.

Un bel concorrente è Stan4j. Non è neanche lontanamente completo, ma offre alcune funzionalità migliori, in particolare mostrando il contesto di dipendenza a livello di classe.

http://www.stan4j.com

(Possiedo entrambi i prodotti, ma non hanno alcuna affiliazione commerciale con entrambi)

Un altro modo di vedere le dipendenze complesse, in particolare a livello di progetto, è una matrice Dipendenza Struttura (DSM).Anche se S101 può fare un DSM, Lattix ha più il supporto - è in grado di gestire primavera e Hibernate dipendenze: lattix

http://lattix.com/

(non ho usato - lo rendono troppo difficile da valutare, il che è strano perché io lavoro su alcuni molto grandi sistemi)

Se il software è piuttosto piccolo, e si è più interessati al semplice livello di classe, quindi qualcosa come Architexa può aiutare a capire la struttura meglio:

http://www.architexa.com/

Infine, se si desidera eseguire il rollover, è possibile farlo facilmente con ASM. Esso comprende anche uno strumento di matrice di dipendenza che tiene traccia a livello di pacchetto:

http://asm.ow2.org/doc/tutorial-asm-2.0.html (vedi in basso nella pagina per la matrice delle dipendenze nify)

Ecco la fonte per esso - è molto semplice, ma intelligente. Funziona con bytecode. http://cvs.forge.objectweb.org/cgi-bin/viewcvs.cgi/asm/asm/examples/dependencies/src/org/objectweb/asm/depend/

Problemi correlati