2009-06-24 9 views
4

Quels outils d'analyse statique pour Java a le mécanisme d'extension le plus simple. J'ai vérifié PMD Mais le processus d'écriture des règles personnalisées semble être très impliqué. Plus précisément, je veux savoir s'il existe des outils qui offre AspectJ comme syntaxe pour choisir des zones intéressantes de code? Je suis au courant de declare warning d'AspectJ mais il semble être limité dans ce qu'il peut faire.Quel outil d'analyse statique pour Java est le plus facile à étendre?

J'ai trouvé une question connexe:

recommandation outil d'analyse statique pour Java? Static Analysis tool recommendation for Java?

Les réponses listent de nombreux outils. Mais je veux trouver celui qui offre l'option la plus simple pour écrire des règles personnalisées.

Editer: Jusqu'à présent, les expressions XPath de PMD suggérées par Guillaume semblent être les plus proches de ce que je cherche. Je vais l'explorer sous peu.

Répondre

4

Le vrai problème avec « extension » un outil d'analyse statique « analyse statique "est un sujet si vaste que vous avez besoin de beaucoup de machines pour le faire en général: analyse, construction d'arbres, extraction de graphe de contrôle, extraction de flux de données, analyse de points, analyse interprocédurale, analyse de gamme, etc. , voir les tonnes de documentation compilateur sur l'analyse des programmes.

Vous pouvez utiliser la correspondance de motif de la syntaxe de surface pour attirer l'attention de l'outil sur un code de programme, mais vous aurez encore d'expliquer à l'outil ce que vous voulez qu'il « analyse statique » à ce moment-là (et certains les analyses [telles que les points-à] exigent que vous fassiez l'analyse partout d'abord, puis sélectionnez simplement la partie que vous voulez).

Moral: ne vous attendez pas à ce que l'extension d'un outil pour effectuer une analyse arbitraire soit facile. Vous devez décider à l'avance les types d'analyse qui vous intéressent (entrées viciées? Contrôles de plage d'indice? API abus?) Et trouver un outil qui prend en charge ce type de chose. Au moins alors vos "extensions" ont une chance d'être simple en vertu d'être similaire à ce que l'outil fait déjà. Notre boîte à outils de réorganisation de logiciel de DMS est une tentative d'amortir le coût de construction de toutes sortes de machines d'analyse à travers beaucoup d'applications et langauges. Il fournit l'analyse, l'analyse de contrôle/de flux de données et l'analyse de points à des degrés divers pour C, C++, Java et COBOL.Et il a la syntaxe de surface correspondant pour vous aider à "pointer". Voir http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html

+1

Merci. DMS Toolkit semble assez intéressant. –

1

L'écriture d'un détecteur personnalisé Findbugs est quite simple.

Vous venez de le déposer dans le répertoire plugin de votre installation FindBugs, comme par exemple here.

+0

Merci. Quand j'ai regardé là pour la première fois, l'utilisation de l'analyse de code d'octet a semblé être au niveau trop bas. J'y reviendrai s'il n'y a rien de comparable à la syntaxe d'AspectJ. –

+1

j'ai écrit mes expériences en ajoutant un détecteur ici: http://dschneller.blogspot.com/2007/04/findbugs-writing-custom-detectors-part.html –

5

Il est en fait assez facile d'écrire des règles personnalisées pour PMD. PMD fournit une syntaxe de type xPath pour trouver une zone intéressante de votre code, donc si vous avez une expérience minimale avec XML, vous pourrez commencer en un rien de temps. Je vous suggère d'investir 1-2 heures dans PMD ou Findbugs et revenir ici si vous avez des questions spécifiques.

Nous pourrions être en mesure de vous donner une meilleure réponse si vous nous dire exactement quel genre de règles que vous essayez d'écrire ...

+0

OK, je l'avais vu l'AST style des visiteurs d'écrire des règles PMD . Le style XPath semble meilleur en raison de sa nature déclarative. Certainement va jeter un coup d'oeil. Merci –

Questions connexes