Domanda

Quali strumenti di analisi statica per Java hanno il meccanismo di estensione più semplice. Ho controllato PMD Ma il processo di scrittura di regole personalizzate sembra essere molto coinvolto. In particolare, voglio sapere se esistono strumenti che offrono AspectJ come la sintassi per individuare aree interessanti di codice? Sono a conoscenza di di AspectJ dichiarare avvertimento ma sembra essere limitato in ciò che può fare.

Ho trovato una domanda correlata:

Raccomandazione dello strumento di analisi statica per Java? Consigli sullo strumento di analisi statica per Java?

Le risposte elencano molti strumenti. Ma voglio trovare quale offre l'opzione più semplice per scrivere regole personalizzate.

Modifica: Finora le espressioni XPath di PMD suggerite da Guillaume sembrano essere le più vicine a ciò che sto cercando. Lo esplorerò tra poco.

È stato utile?

Soluzione

Il vero problema con " estensione " uno strumento di analisi statica è "analisi statica" è un argomento così ampio che è necessario un sacco di macchinari per farlo in generale: analisi, costruzione di alberi, controllo dell'estrazione del diagramma di flusso, estrazione del flusso di dati, analisi dei punti, analisi interprocedurale, analisi della portata, l'elenco potrebbe continuare all'infinito, vedere le tonnellate di letteratura sui compilatori sull'analisi dei programmi.

È possibile utilizzare la corrispondenza dei modelli della sintassi della superficie per focalizzare l'attenzione dello strumento su alcuni codici di programma, ma è comunque necessario per spiegare allo strumento che cosa vuoi "analizzare staticamente" a quel punto (e alcune analisi [come point-to] richiedono che tu esegua l'analisi ovunque prima, quindi seleziona la parte che desideri).

Morale : non aspettarti che l'estensione di uno strumento per eseguire analisi arbitrarie sia facile. Fondamentalmente dovresti decidere in anticipo quali tipi di analisi ti interessano (input contaminati? controlli intervallo sottoscrizioni? abuso API?) e trovare uno strumento che supporta già questo tipo di cose. Almeno quindi le tue " estensioni " avere una possibilità di essere semplice in virtù di essere simile a quello che lo strumento già fa.

Il nostro DMS Software Reengineering Toolkit è un tentativo di ammortizzare i costi di costruzione di tutti i tipi di macchinari di analisi in molte applicazioni e lingue. Fornisce l'analisi, l'analisi di controllo / flusso di dati e l'analisi puntuale a vari livelli per C, C ++, Java e COBOL. E ha sintassi di superficie corrispondenza dei motivi per aiutarti a "punto". Vedi http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html

Altri suggerimenti

In realtà è abbastanza facile scrivere regole personalizzate per PMD. PMD fornisce una sintassi simile a xPath per trovare un'area interessante del tuo codice, quindi se hai un'esperienza minima con XML, sarai in grado di iniziare in pochissimo tempo. Ti suggerisco di investire 1-2 ore in PMD o Findbugs e tornare qui se hai domande specifiche.

Potremmo essere in grado di darti una risposta migliore se ci dici esattamente che tipo di regole stai cercando di scrivere ...

La scrittura di un Findbugs rilevatore personalizzato è abbastanza semplice .

È sufficiente rilasciarlo nella directory dei plugin dell'installazione di FindBugs, come spiegare qui .

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