Quels outils d'analyse de code utilisez-vous pour vos projets Java?
Quels outils d'analyse de code que vous utilisez sur vos projets Java?
Je suis intéressé par toutes sortes
- statique outils d'analyse de code (FindBugs, PMD, et tout les autres)
- code outils de couverture (Couverture, Emma, et tout les autres)
- toute autre instrumentation outils
- autre chose, si je suis absent quelque chose
Le cas échéant, également état de ce que construire des outils que vous utilisez et la façon dont ces outils intègrent à la fois de vos IDEs et des outils de développement.
Si un outil n'est disponible que de façon spécifique (IDE plugin, ou, disons, un outil de construction plugin) que l'information est également à noter.
- Aussi jeter un oeil à UCDetector: ucdetector.org
- Allez à la caisse Pitest pour la mutation de la couverture de test.
Vous devez vous connecter pour publier un commentaire.
Pour les outils d'analyse statique, j'utilise souvent de la FPC, PMD, FindBugs, et Checkstyle.
DPC est la DGM "Copier/Coller "Détecteur" de l'outil. J'ai été en utilisant PMD pour un peu de temps avant, j'ai remarqué la "Recherche de Code Dupliqué" lien sur le PMD page web.
Je tiens à souligner que ces outils peuvent parfois être prolongée au-delà de leur "out-of-the-box" ensemble de règles. Et pas seulement parce qu'ils sont open source, de sorte que vous pouvez réécrire. Certains de ces outils viennent avec des applications ou des "crochets" qui leur permettent d'être étendu. Par exemple, PMD est livré avec le "concepteur" de l'outil qui vous permet de créer de nouvelles règles. Aussi, Checkstyle a la DescendantToken vérifier qui a des propriétés qui permettent d'importants personnalisation.
- Je intégrer ces outils avec une Fourmi de génération basé sur le. Vous pouvez suivre le lien pour voir mon commenté de configuration.
En plus de la simple intégration dans le build, je trouve utile de configurer les outils pour être un peu plus "intégrée" dans un couple de d'autres façons. À savoir, la production de rapports et d'avertissement de suppression de l'homogénéité. Je tiens à ajouter ces aspects de cette discussion (qui doit probablement avoir l' "analyse statique" balise): comment sont les gens de la configuration de ces outils pour créer un "unifiée" de la solution? (J'ai posé cette question séparément ici)
Tout d'abord, pour des rapports d'alerte, je transforme la sortie de telle sorte que chaque avertissement a le format simple:
Ceci est souvent appelé le "Emacs format", mais même si vous n'êtes pas à l'aide d'Emacs, c'est une forme raisonnable pour l'homogénéisation des rapports. Par exemple:
Mon avertissement format transformations sont fait par mon script Ant avec Ant filterchains.
Le deuxième "intégration" que je fais, c'est de la mise en garde de la répression. Par défaut, chaque outil prend en charge des commentaires ou une annotation (ou les deux) que vous pouvez placer dans votre code pour le silence un avertissement que vous voulez ignorer. Mais ces diverses avertissement suppression des demandes n'ont pas un aspect qui semble un peu ridicule. Lorsque vous êtes à la suppression de l'avertissement, vous êtes à la suppression d'une alerte, alors pourquoi ne pas toujours écrire "
SuppressWarning
?"Par exemple, PMD configuration par défaut supprime avertissement génération de lignes de code avec la chaîne "
NOPMD
" dans un commentaire. Aussi, PMD prend en charge Java@SuppressWarnings
annotation. - Je configurer PMD à utiliser les commentaires contenant "SuppressWarning(PMD.
" au lieu deNOPMD
de sorte que PMD suppressions ressemblent. - Je remplir la règle particulière qui est violé lorsque vous utilisez le style de commentaires suppression:Seulement le "
SuppressWarnings(PMD.
" la partie est importante pour un commentaire, mais il est compatible avec PMD de l'appui de la@SuppressWarning
annotation qui ne reconnaissent individuels une violation des règles par nom:De même, Checkstyle supprime avertissement de génération entre les paires d'observations (aucune annotation soutien est fourni). Par défaut, les commentaires à son tour Checkstyle et s'éteint contiennent les chaînes
CHECKSTYLE:OFF
etCHECKSTYLE:ON
, respectivement. La modification de cette configuration (avec Checkstyle est "SuppressionCommentFilter") d'utiliser les chaînes de caractères "BEGIN SuppressWarnings(CheckStyle.
" et "END SuppressWarnings(CheckStyle.
" rend les contrôles plus comme PMD:Avec Checkstyle commentaires, l'enregistrement particulier de violation de la
HiddenField
) est important car chaque case a son propre "BEGIN/END
" commentaire pair.FindBugs prend également en charge d'avertissement génération de suppression avec un
@SuppressWarnings
annotation, donc aucune configuration supplémentaire n'est nécessaire pour atteindre un certain niveau d'uniformité avec d'autres outils. Malheureusement, Findbugs a pour support une coutume@SuppressWarnings
annotation, car intégré dans Java@SuppressWarnings
annotation a unSOURCE
politique de rétention qui n'est pas assez forte pour conserver les annotations dans le fichier de classe où FindBugs en a besoin. Je suis entièrement d'qualifier FindBugs avertissements suppressions pour éviter des affrontements avec Java@SuppressWarnings
annotation:Ces techniques rend les choses semblent relativement homogènes dans les divers outils. Notez que chaque avertissement suppression contiennent la chaîne "
SuppressWarnings
" le rend facile pour exécuter une recherche simple pour trouver toutes les occurrences de tous les outils à l'ensemble d'une base de code.- Je utiliser une combinaison de Cobertura, Checkstyle, (Ecl), Emma et Findbugs.
EclEmma est un génial plugin Eclipse qui montre la couverture du code par la coloration de la java de la source dans l'éditeur (capture d'écran) - la couverture est généré par l'exécution d'un test JUnit. C'est vraiment très utile quand vous êtes à essayer de comprendre les lignes qui sont couverts dans une classe particulière, ou si vous voulez voir seulement les lignes qui sont couverts par un seul test. C'est beaucoup plus convivial et plus utile que la génération d'un rapport, puis en regardant à travers le rapport pour voir les classes qui ont une faible couverture.
La Checkstyle et Findbugs des plugins Eclipse sont également utiles, ils génèrent des mises en garde dans l'éditeur que vous tapez.
Maven2 a rapport plugins qui fonctionnent avec les outils ci-dessus pour générer des rapports au moment de la construction. Nous utilisons afin d'obtenir un ensemble de rapports de projet, qui sont plus utiles lorsque vous voulez des chiffres globaux. Celles-ci sont générées par notre-CI s'appuie, qui s'exécutent à l'aide de Continuum.
Tout ce qui suit, nous utiliser et à intégrer easiy dans nos deux Maven 2.x construit et Eclipse/RAD 7:
En outre, dans nos builds Maven, nous avons:
En outre, si vous utilisez Maven 2.x, CodeHaus a une collection de pratique de plugins Maven dans leur Mojo projet.
Remarque: le Trèfle a out-of-the-box intégration avec le Bambou serveur CI (puisqu'ils sont tous les deux produits Atlassian). Il y a aussi le Bambou plugins pour FindBugs, PMD et CheckStyle mais, comme indiqué, la libre Hudson serveur CI a ceux qui sont trop.
- Je utiliser l'analyse statique intégré dans IntelliJ IDEA. Intégration parfaite.
- Je utiliser la couverture de code intégré dans Intellij IDEA (basé sur EMMA). Encore une fois, la parfaite intégration.
Cette solution intégrée est fiable, puissant et facile à utiliser par rapport à rassembler des outils de différents fournisseurs.
Checkstyle est un autre que j'ai utilisé lors d'une précédente société... c'est surtout pour le style de vérification, mais il peut faire une analyse statique trop. Aussi, Trèfle de la couverture de code, mais être conscient qu'elle n'est pas un outil gratuit.
Nous sommes à l'aide de FindBugs et Checkstyle ainsi que le Trèfle pour la Couverture de Code.
Je pense qu'il est important d'avoir une sorte de l'analyse statique, l'appui de votre développement. Malheureusement, il n'est pas encore largement répandue que ces outils sont importants.
Nous utilisons FindBugs et JDepend intégré avec Ant. Nous utilisons JUnit, mais nous ne sommes pas à l'aide de tout outil de couverture.
Je ne suis pas à l'utiliser intégrée de Rational Application Developer (l'IDE que j'utilise pour développer des applications J2EE) parce que j'aime la façon dont soigné, il ressemble quand vous exécutez javac dans la console Windows. 😛
J'ai eu de la chance avec Cobertura. C'est un outil de couverture de code qui peut être exécuté par l'intermédiaire de votre script ant dans le cadre de votre normal de construire et peut être intégré dans la baie d'Hudson.
Notre équipe de l'utilisation PMD et Cobertura, en fait, nos projets sont des projets maven et il est très simple d'inclure des plug-ins pour l'analyse de code. La vraie question serait pour un projet spécifique qui analyse dont vous avez besoin pour utiliser, mon avis est que vous ne pouvez pas utiliser les mêmes plugins pour chaque projet.
dans notre projet, nous utilisons des Sonars en face de checkstyle, pmd.... avec l'IC (Bambou, Hudson) nous obtenons aussi une belle histoire de notre source de qualité et de diriger nous allons. Je fais comme Sonar, parce que vous avez un outil central dans l'IC de la Pile qui le fait pour vous, et vous pouvez facilement personnaliser les règles pour chaque projet.
Structure 101 est bon à l'analyse de code et de trouver le cyclique des dépendances de package.
Je suis à la recherche pour de nombreuses réponses à apprendre de nouveaux outils et de consolider ces connaissances dans un question/thread, donc je doute qu'il y aura 1 vraie réponse à cette question.
Ma réponse à ma propre question, c'est que nous utilisons:
Hudson a également une tâche-scanner plugin qui permettra d'afficher le nombre de TODO et Fixme, ainsi que de montrer où ils en sont dans les fichiers source.
Tous sont intégrés avec Maven 1.x dans notre cas, et l'a attaché dans la baie d'Hudson, qui dirige notre s'appuie sur l'enregistrement ainsi que les choses supplémentaires de nuit et à la semaine. Hudson graphiques de tendance, de nos tests JUnit, couverture, findbugs, ainsi que les tâches ouvertes. Il y a aussi un plugin Hudson que des rapports et des graphiques compiler nos mises en garde. Nous avons également plusieurs tests de performance avec leurs propres graphiques de la performance et de l'utilisation de la mémoire au fil du temps à l'aide de l'Hudson parcelles plugin ainsi.