104 votes

Quelles sont les différences entre la PMD et FindBugs ?

Il y avait une question comparant PMD et CheckStyle . Cependant, je ne trouve pas de détail sur les différences / similitudes entre PMD et FindBugs. Je pense qu’une différence essentielle réside dans le fait que PMD fonctionne sur le code source, tandis que FindBugs fonctionne sur les fichiers de code secondaire compilés. Mais en termes de capacités, faut-il choisir l'un ou l'autre ou sont-ils complémentaires?

142voto

snakile Points 10342

Je suis en utilisant à la fois. Je pense qu'ils se complètent les uns les autres.

Comme vous l'avez dit, PMD travaille sur le code source et, par conséquent, trouve des problèmes comme: la violation des conventions de nommage, le manque des accolades, égaré null vérifier, longue liste de paramètres, inutile constructeur, manquant pause, switch, etc. PMD vous dit aussi à propos de la complexité Cyclomatique de votre code, que je trouve très utile (FindBugs ne parle pas de la complexité Cyclomatique).

FindBugs fonctionne sur le bytecode. Voici quelques problèmes de FindBugs trouve qui PMD n'est pas le cas: méthode equals() échoue sur les sous-types, la méthode clone peut retourner null, référence de comparaison des valeurs Booléennes, impossible de fonte, 32bit int décalé d'un montant dans la gamme de 0 à 31, une collection qui contient en lui-même, est égale à la méthode retourne toujours true, une boucle infinie, etc.

Généralement chacun d'entre eux trouve une autre série de problèmes. Utiliser les deux. Ces outils m'ont beaucoup appris sur la façon d'écrire du bon code Java.

22voto

Dekel Points 179

La meilleure caractéristique de la DGM, est son XPath Règles, livré avec une Règle de Concepteur pour vous permettre de facilement construire de nouvelles règles à partir d'exemples de code (similaire à la RegEx et XPath GUI constructeurs). FindBugs est plus fort hors de la boîte, mais la construction d'un projet précis de règles et de modèles est très important.

Par exemple, j'ai rencontré un problème de performances avec 2 boucles for imbriquées, résultant en un temps O(n^2) temps de fonctionnement, qui pourraient facilement être évités. J'ai utilisé de la DGM pour construire une requête ad-hoc, afin d'examiner les autres instances de boucles for imbriquées - //ForStatement/Déclaration//ForStatement. Ce relevé 2 cas, plus de problème. Ce n'est pas un générique de règle que ce soit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X