2012-01-27 2 views
7

Existe-t-il un outil d'analyse statique qui vérifie automatiquement les conditions de concurrence dans les projets Java? De préférence celui qui supporte Eclipse, Spring et Hibernate. MerciExiste-t-il un outil d'analyse statique qui vérifie automatiquement les conditions de concurrence dans les projets Java?

EDIT: Je n'ai pas besoin nécessairement d'un outil d'analyse statique mais peut-être un outil qui exécute les threads java (au moins JUnit) avec une vitesse aléatoire différente et peut également reproduire le même profil de vitesse sous débogueur. Donc, presque n'importe quel moyen de détecter les conditions de course serait utile.

+2

S'il vous plaît donner aux gens crédit pour leurs efforts pour vous aider et [accepter des réponses] (http : //meta.stackexchange.com/a/5235/160062) sur vos questions précédentes. Vous n'avez pas accepté une seule réponse. – oers

Répondre

6

JLint peut être utilisé pour détecter les conditions de course. IBM ConTest est conçu pour tester les problèmes de simultanéité, alors jetez un oeil à cela aussi bien.

+0

Le site Web de JLint n'a pas l'air sérieux. Par conséquent, est-ce que cela vous dérangerait de me demander si vous l'avez essayé vous-même et si cela vous a bien fonctionné? – user1081596

+2

JLINT est l'un des meilleurs @ user1081596. Je ne justifie pas le livre par la couverture :) –

+2

JLint est aussi sérieux que d'avoir un nom "user1081596";) Blagues à part, la seule raison pour laquelle "ne semble pas sérieuse" est parce que le mec n'a pas dérangé avec un site Web et est ne l'hébergeant pas sous java.net ou sourceforge ... – Gepsens

1

L'analyse statique est une bonne chose, sans aucun doute. Mais puis-je suggérer pas si statique JPF?

+1

Ce serait bien si JPF était un peu plus facile à utiliser, cependant. –

+0

La documentation indique que JPF vérifie les blocages mais vérifie-t-il les conditions de course? – user1081596

+0

@ user1081596 Oui c'est le cas. –

1

Si vous utilisez Eclipse, vous pouvez utiliser FindBugs pour vérifier le code. Si vous le souhaitez, vous pouvez l'exécuter depuis la ligne de commande ou avec une interface Swing.

0

Je n'ai pas utilisé le produit personnellement, mais j'ai pensé à Corensic Jinx lorsque vous avez écrit que vous recherchez "un outil qui exécute les threads Java (au moins JUnit) avec une vitesse aléatoire différente". Selon la page de description du produit de Corensic, Jinx observe les opérations de thread au niveau du thread OS natif et "construit dynamiquement un ensemble d'entrelacements potentiels (c.-à-d., D'éventualités ou scénarios d'exécution qui se produiront dans un futur ensemble de conditions). pour aboutir à des fautes de concurrence, et teste rapidement ces chemins d'exécution pour résoudre les problèmes de concurrence, y compris les blocages, les conditions de concurrence et les violations d'atomicité.

Ceci peut être un niveau trop bas pour une application entièrement Java, mais Corensic claims pour prendre en charge les applications Java et Microsoft .NET.

Voir Using Jinx with Java

1

Coverity Analyse statique pour les drapeaux Java conditions de course, ainsi que d'éventuelles violations de blocage et atomicité. De plus, Coverity dispose d'un produit Dynamic Analysis qui permet d'effectuer vos propres tests et de générer des rapports sur les conditions de course et les interblocages potentiels. Notez que l'exécution sur des tests unitaires n'est généralement pas efficace car leur logique tend à être plus simple que les types d'interaction qu'une application complexe aura en production et qu'il est plus efficace d'exécuter l'analyse dynamique avec votre stress, vos tests de charge ou même vos tests ad hoc. Désistement: Je travaillais pour Coverity.

0

AppDynamics est un outil qui est attaché à votre JVM et fournit des informations sur l'utilisation de la mémoire des threads individuels.

0

J'ai développé un outil appelé http://vmlens.com qui permet de détecter les courses de données, en particulier les courses de données d'écriture/écriture. Il recherche les champs de mémoire accessibles à partir de différents threads sans synchronisation. Ce n'est donc pas un outil d'analyse statique, mais plutôt dynamique.

Pour détecter une course de données, un emplacement de mémoire doit être accessible au moins par deux threads différents.

Cordialement Thomas

3

ThreadSafe (http://www.contemplateltd.com/threadsafe, des essais gratuits disponibles) fait exactement ce que la question demande, qui couvre également les défauts de Java autres que la simultanéité des conditions de course. Voir ce InfoQ article pour des exemples d'erreurs de concurrence qu'il trouve dans les applications open source, y compris Apache JMeter et K9Mail. Voir Ivan Senic's blog pour l'opinion d'un utilisateur.

(Divulgation:. ThreadSafe est un outil commercial, et je suis co-fondateur de Contemplez, la société qui le produit)

+0

ThreadSafe est-il abandonné? La dernière version date du 20 mars 2015. – Nadar

Questions connexes