Rilevamento del ciclo del pacchetto Java:come posso trovare le classi specifiche coinvolte?[Chiuso]

StackOverflow https://stackoverflow.com/questions/62276

Domanda

Quale strumento consiglieresti di rilevare Dipendenze cicliche del pacchetto Java, sapendo che l'obiettivo è di elencare esplicitamente le classi specifiche coinvolte nel "ciclo di pacchetti incrociati" rilevato?

Lo so classycle E JDipende, ma entrambi non riescono a elencare le classi coinvolte in una dipendenza ciclica del pacchetto. Metrica ha un'interessante rappresentazione grafica dei cicli, ma è ancora limitata ai pacchetti e talvolta piuttosto difficile da leggere.

Mi sto stancando di ricevere un:

" hai una dipendenza del ciclo del pacchetto tra questi 3 pacchetti
hai xxx lezioni in ciascuna
buona fortuna nel trovare le lezioni giuste e rompere questo ciclo "

Conosci qualche strumento che fa il passo in più per spiegarti effettivamente perché il ciclo viene rilevato (ad es.'elenca le classi coinvolte')?


Bene...È tempo di proclamare i risultati:

@l7010.de:Grazie per lo sforzo.Ti voterò (quando avrò abbastanza reputazione), soprattutto per la risposta "CAP"...ma CAP è morto nell'acqua e non è più compatibile con il mio Eclipse 3.4.Il resto è commerciale e cerco solo freeware.

@daniel6651:Grazie ma, come detto, solo freeware (mi dispiace non averlo menzionato in primo luogo).

@izb come utente abituale di findbugs (usando l'ultima versione 1.3.5 in questo momento), sono a un clic di distanza per accettare la tua risposta...se potessi spiegarmi quale opzione c'è da attivare affinché findbug rilevi qualsiasi ciclo.Questa caratteristica è menzionata solo per il 0.8.7 di sfuggita (cercare 'Nuovo rilevatore di stili per trovare dipendenze circolari tra classi'), e non sono in grado di testarlo.Aggiornamento:Ora funziona e avevo un vecchio file di configurazione di findbugs in cui tale opzione non era attivata.Mi piace ancora CAD Anche se ;)

La risposta è...Vedere la mia (seconda) risposta di seguito

È stato utile?

Soluzione

Findbugs può rilevare dipendenze di classi circolari e ha anche un plugin Eclipse.

http://findbugs.sourceforge.net/

Altri suggerimenti

BENE...dopo il test DepFinder presentato sopra, risulta ottimo per un rilevamento rapido di dipendenze semplici, ma non si adatta bene al numero di classi...

Quindi la VERA RISPOSTA REALE è:CDA - Analizzatore di dipendenza delle classi

È veloce, aggiornato, facile da usare e fornisce una rappresentazione grafica delle classi e delle loro dipendenze circolari.Un sogno diventato realtà ;)

Devi creare un workset in cui inserisci solo la directory delle tue classi (.class) (non è necessario avere un classpath completo)
L'opzione "Rileva dipendenze circolari - ALT-C" funziona come pubblicizzato e non impiega ore al 100% della CPU per analizzare le mie 468 classi.
Nota:per aggiornare uno spazio di lavoro, devi riaprirlo (!), in modo da attivare una nuova scansione delle tue classi.

screenshot

Noi usiamo Sonar per rilevare i cicli dei pacchetti.Disegna un bel grafico delle dipendenze e mostra quali vanno nella direzione sbagliata.Puoi anche accedere all'origine in cui viene utilizzata la dipendenza.

Vedere http://www.sonarsource.org/fight-back-design-erosion-by-breaking-cycles-with-sonar/

C'è anche Struttura101 che dovrebbe farlo.

Ruota alta rileva i cicli di classi e pacchetti e segnala l'origine delle dipendenze fino al livello di classe/metodo/campo indicando il tipo di relazione (ereditarietà, composizione, parte della firma di un metodo, ecc.).

Inoltre scompone i grandi cicli nei loro sottoelementi che possono essere compresi/affrontati individualmente.

L'output è HTML con contenuto SVG incorporato che richiede un browser moderno.

E puoi utilizzare lo strumento open source CAP che è un plugin Eclipse.

CAP ha una visualizzazione grafica del pacchetto che ti mostrerà le linee delle classi, quindi dopo alcuni clic (a seconda della dimensione del cerchio) troverai il colpevole.

Una prima risposta possibile è...non carino.Ma inizia a fare quello che sto cercando (una soluzione migliore è presentato di seguito).

Trova dipendenze! Scaricalo, decomprimilo.

Non è il progetto più moderno o attivo di sempre, ma se modifichi [Dependency Finder]/bin/DependencyFinder.bat, aggiungi il suo percorso per DEFAULT_DEPENDENCYFINDER_HOME, imposti un JAVA_HOME, puoi avviarlo.

Quindi fai clic sul pulsante "Estrai" (CTRL-E - primo pulsante), inserisci il percorso della classe e lascialo scansionare.

La parte difficile è fare clic esattamente sull'insieme corretto di "elementi di programmazione" e "chiusure", in modo da non essere sommersi dal livello di dettaglio del risultato.

  • Selezionare solo 'classi' nella parte sinistra ('elementi di programmazione').
  • Seleziona solo 'classi' nella parte destra ('chiusure').
  • Aggiungere "/javax?./,/org./,/sun./" come modello di esclusione (sia per gli elementi di programmazione che per le chiusure).
  • Fare clic sulle ruote (ultimo pulsante - Calcola tutto - Ctrl + UN).

Ed ecco qua.

Ogni volta che vedi '<->', ti sei procurato un bel dipendenza ciclica.(Se selezioni "funzionalità" sul lato "chiusura", puoi anche sapere quale funzione attiva il ciclo: fantastico.)

Sono pronto a testare eventuali altri suggerimenti.

Esistono alcuni strumenti commerciali:Structure101 e Lattix che possono essere utilizzati a questo scopo.

Uno strumento che fa questo è il software tomografo.È commerciale e l'interfaccia utente fa schifo :o

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top