2012-01-27 13 views
7

Esiste uno strumento di analisi statica che verifica automaticamente le condizioni di competizione nei progetti Java? Preferibilmente quello che supporta Eclipse, Spring e Hibernate. GrazieEsiste uno strumento di analisi statica che verifica automaticamente le condizioni di gara nei progetti Java?

EDIT: Potrebbe non essere necessario uno strumento di analisi statico, ma forse uno strumento che esegue i thread java (almeno JUnit) con diversa velocità casuale e può anche riprodurre lo stesso profilo di velocità in debugger. Quindi, quasi ogni modo di individuare le condizioni di gara sarebbe utile.

+2

Si prega di dare alla gente di credito per il loro sforzo per aiutare voi e [accetta risposte] (http : //meta.stackexchange.com/a/5235/160062) per le tue domande precedenti. Non hai accettato una sola risposta. – oers

risposta

6

JLint può essere utilizzato per rilevare condizioni di gara. L'IBM ConTest è progettato per testare i problemi di concorrenza, quindi date un'occhiata anche a questo.

+0

Il sito Web di JLint non sembra serio. Quindi ti dispiacerebbe chiedermi se l'hai provato tu stesso e ha funzionato bene per te? – user1081596

+2

JLINT è uno dei migliori @ user1081596. Non giustifica il libro dalla copertina :) –

+2

JLint è serio come avere un nome "user1081596";) Scherzi a parte, l'unica ragione per cui "non sembra serio" è perché il tizio non si è preoccupato di un sito web ed è non lo ospita sotto java.net o sourceforge ... – Gepsens

1

L'analisi statica è una buona cosa, senza dubbio. Ma posso suggerire non così statico JPF?

+1

Sarebbe bello se JPF fosse un po 'più facile da usare, però. –

+0

La documentazione dice che JPF controlla i deadlock ma controlla le condizioni di gara? – user1081596

+0

@ user1081596 Sì, sì. –

1

Se si utilizza eclissi, è possibile utilizzare FindBugs per verificare il codice. Se lo desideri, puoi eseguirlo anche dalla riga di comando o con un'interfaccia Swing.

0

Non ho usato il prodotto personalmente, ma ho pensato a Corensic Jinx quando hai scritto che stai cercando "uno strumento che esegue i thread Java (almeno JUnit) con diversa velocità casuale". Secondo la pagina di descrizione del prodotto di Corensic, Jinx osserva le operazioni di threading al livello di thread del sistema operativo nativo e "crea dinamicamente un insieme di potenziali intrecci (ad esempio, ipotesi alternative o scenari di esecuzione, che si verificano in alcune future condizioni) che sono più probabili per generare errori di concorrenza e testare rapidamente quei percorsi di esecuzione per risolvere problemi di concorrenza tra cui deadlock, condizioni di gara e violazioni di atomicità. "

Questo potrebbe essere troppo basso per un'applicazione tutta Java, ma Corensic claims per supportare applicazioni Java e Microsoft .NET.

Vedi Using Jinx with Java

1

Coverity Analisi statica per Java condizioni bandiere di gara, nonché eventuali deadlock e atomicità violazioni.

Inoltre, Coverity dispone di un prodotto Analisi dinamica che mette a punto i propri test e segnala potenziali condizioni di gara e situazioni di stallo. Si noti che eseguirlo sui test delle unità di solito non è efficace in quanto la loro logica tende ad essere più semplice dei tipi di interazione che un'applicazione complessa avrà in produzione ed è più efficace eseguire analisi dinamiche con stress, prove di carico o anche test ad hoc.

Disclaimer: ero abituato a lavorare per Coverity.

0

AppDynamics è uno strumento che viene collegato alla JVM e fornisce informazioni sull'utilizzo della memoria dei singoli thread.

0

Ho sviluppato uno strumento chiamato http://vmlens.com che può rilevare le corse di dati, in particolare le corse di dati di scrittura/scrittura. Cerca i campi di memoria a cui si accede da thread diversi senza sincronizzazione.

Quindi non è uno strumento di analisi statico ma piuttosto dinamico. Per rilevare una corsa di dati, è necessario accedere a una posizione di memoria almeno con due diversi thread.

saluti Thomas

3

ThreadSafe (http://www.contemplateltd.com/threadsafe, prove gratuite disponibili) fa esattamente ciò che la domanda chiede, che copre anche i difetti di concorrenza Java diverse condizioni di gara. Vedi questo InfoQ article per gli esempi di errori di concorrenza che trova nelle applicazioni open source inclusi Apache JMeter e K9Mail. Vedere Ivan Senic's blog per l'opinione di un utente.

(Disclosure:. ThreadSafe è uno strumento commerciale, e io sono co-fondatore di contemplare, l'azienda che lo produce)

+0

ThreadSafe è stato abbandonato? L'ultima versione è del 20 marzo 2015. – Nadar