2010-02-09 15 views
15

Ho un progetto di maven generato da Spring Roo e uso diversi strumenti (checkstyle, pmd ecc.) Per raccogliere informazioni sul mio progetto. (Vale a dire che sto usando codehaus' sonar per questo)Code Analysis Tools e Inter-Type-Declarations

Roo makes heavy use of AspectJ Inter Type Declarations (ITD) per separare problemi come la persistenza, JavaBeans-getter/setter ecc

Questi DTI sono tessuti in a tempo di compilazione in modo da strumenti come checkstyle e PMD (che lavorano su livello sorgente) hanno molti falsi positivi.

L'unica soluzione che attualmente vedo è disattivare i controlli per le classi che utilizzano ITD.

Qualche idea migliore?

+0

Ho provato un po 'su questo e ho parlato anche con un fornitore di strumenti per strumenti SCA. Sembra che questo sia ancora un problema di nicchia :-( – er4z0r

+0

Utilizziamo anche Roo e Sonar, quindi sono interessato a vedere le risposte a questa domanda ... –

+0

Ah, è bello non essere l'unico. problemi di cui sto parlando? – er4z0r

risposta

0

È possibile aggiungere annotazioni/commenti specifici degli strumenti al codice Java per sopprimere i falsi positivi? Ad esempio, FindBugs ha la sua annotazione @SuppressWarnings.

+0

Hmm interessante. Non lo sapevo. Anche se questo funzionerà solo su una base utensile per strumento, ma potrebbe essere un punto di partenza. – er4z0r

+0

Secondo la documentazione, non si dovrebbe toccare i file AspectJ. Questi file sono pensati per essere gestiti dalla shell stessa e possono essere aggiornati quando si installano le versioni più recenti di Roo. – tsunade21

+0

Volevo dire modificare il codice Java, non l'ITD; Ho aggiornato la mia risposta per essere più chiara. Ma come membro del team Roo, è gratificante vedere che gli utenti sanno di non modificare gli ITD!:-) –

1

Dubbi che sarà un "problema di nicchia" per molto più tempo :-) Speriamo che i venditori di strumenti esamineranno i miglioramenti necessari.

+0

Wow. Una risposta di Rod Johnson. Sono onorato :-) Ho chiesto ad alcuni venditori di strumenti commerciali, ma la risposta è ancora in sospeso. Ma se ricordo bene, due dei principali Aspect-J Devs funzionano anche a sorgente, forse hanno un'idea per una soluzione intelligente? – er4z0r

1

Se si desidera ragionare sul codice sorgente dopo che gli aspetti sono stati integrati nel codice, è necessario tessere gli aspetti nel codice sorgente piuttosto che nel codice binario.

Molti tessitori di elementi fanno tessere codice binario perché non hanno accesso alle informazioni (tabella dei simboli, nomi, tipi, tipi di espressioni, ...) prodotti da un front-end del compilatore. Quindi, l'hack è, usa il codice macchina virtuale prodotto dal compilatore (questo stunt funziona fondamentalmente solo per i set di istruzioni VM come .net IL e i codici classe java) che spesso è facile da decodificare (set di istruzioni bello, regolare) decorato con informazioni sulla tabella dei simboli.

Ma se non riesci a ragionare sui risultati binari di un tale processo di tessitura, allora non puoi essere sicuro che il programma intrecciato non sia bacato, che è il punto della domanda originale dell'OP: "Come Eseguo strumenti SCA sulla fonte tessuta (efficace)? ".

È possibile risolvere questo problema in due modi:

  • Ottenere la comunità di scrivere strumenti SCA che elaborano i codici di byte, piuttosto che la fonte. Questo potrebbe essere difficile perché il codice sorgente potrebbe contenere informazioni perse nel processo di compilazione.
  • Un'idea migliore: Ottieni l'aspetto della community per scrivere gli aspect weavers che operano sul codice sorgente e producono codice sorgente. Questo potrebbe essere difficile perché ottenere un front end linguistico completo è difficile.

Non posso aiutarti a fare in modo che la comunità faccia una scelta.

Posso offrire un forte incoraggiamento per aiutare la comunità a scegliere il secondo modo: il nostro DMS Software Reengineering Toolkit. Questo è un sistema di trasformazione del programma che esegue le direttive della forma di "se vedi questo, sostituirlo con che" ma onorando la sintassi e la semantica del linguaggio applicando effettivamente tali modifiche alle strutture di dati del compilatore prodotte dai front end linguistici completi. (Questa è la versione di ingegneria del software della sostituzione equa in matematica). Le strutture dei dati modificate possono essere riesportate come testo sorgente compilabile, completo di commenti.

Se capisci cosa possono fare le trasformazioni in generale, puoi vedere che aspect weavers are a special case of program transformation systems. Quindi, è facile implementare gli weaving con DMS ei risultati sono codice sorgente, ovvero è possibile applicare gli strumenti di analisi del codice sorgente.

Dubito che questo in realtà risolve il problema PO di analizzare il codice Roo-generato nel breve periodo: - {

2

Questa risposta non si aiuterebbe in questo momento, ma si spera che può essere di interesse per voi, in quanto promette una soluzione per il tuo problema in un prossimo futuro. Non so se si conosce IntelliJ IDEA - IDE Java da JetBrains, ma è già in corso il lavoro in questa direzione, e qui è il collegamento al problema dedicato che si potrebbe voler seguire: http://youtrack.jetbrains.net/issue/IDEA-26959. Basta impostare un orologio su di esso - e ricevere una notifica quando la funzione è implementata. IntelliJ IDEA fornisce SCA davvero potente. Pertanto, il supporto ITD dovrebbe essere di alta qualità.

+0

Grazie per il suggerimento. Sebbene mi piacerebbe vedere una crescente consapevolezza sul lato fornitore-strumento, preferirei una soluzione che possa essere utilizzata da maven2. Voglio essere in grado di eseguire la mia SCA in un ambiente privo di headless come un server CI. Quindi non posso permettermi a seconda di un IDE specifico. – er4z0r

+0

Sarà possibile eseguire ispezioni di codice da parte di Maven e su un server CI, come TeamCity, come già fatto per altre funzionalità di analisi di IntelliJ IDEA. Possono essere utilizzati indipendentemente dall'IDE e possono essere eseguiti in remoto, sul lato server. –

1

Sia FindBugs che Cobertura NON funzionano a livello di origine, ma a livello di bytecode. Pertanto, dovresti inviare i tuoi aspetti in modo statico (che migliorerebbe anche il tempo di inizio dell'applicazione) al momento della compilazione (ad esempio utilizzando il plug-in AspectJ di maven) e non al momento del caricamento e quindi eseguire gli strumenti di analisi statici sul codice byte risultato.

+0

Ciao ho controllato. E hai ragione. La maggior parte dei falsi positivi che stavo ricevendo venivano da pmd e checkstyle che funzionano entrambi al livello sorgente. Tuttavia, il problema rimane: non è possibile analizzare il codice, che non è possibile vedere. – er4z0r