Quels sont les outils d'analyse statique C ++ open source disponibles? [fermé]


301

Java possède de très bons outils d'analyse statique open source tels que FindBugs , Checkstyle et PMD . Ces outils sont faciles à utiliser, très utiles, fonctionnent sur plusieurs systèmes d'exploitation et sont gratuits .

Des produits commerciaux d'analyse statique C ++ sont disponibles. Bien que de tels produits soient excellents, le coût est bien trop élevé pour les étudiants et il est généralement assez difficile d'obtenir une version d'essai.

L'alternative consiste à trouver des outils d'analyse statique C ++ open source qui s'exécuteront sur plusieurs plates-formes (Windows et Unix). En utilisant un outil open source, il pourrait être modifié pour répondre à certains besoins. Trouver les outils n'a pas été une tâche facile.

Vous trouverez ci-dessous une courte liste d'outils d'analyse statique C ++ trouvés ou suggérés par d'autres.

Quels sont les autres outils portables d'analyse statique C ++ open source que tout le monde connaît et qui peuvent être recommandés?

Quelques liens connexes.


Commercial, DMS Software Reengineering Toolki, gère Java, C, C ++ et COBOL, fournit l'analyse, la construction AST, la résolution de nom / type, l'analyse de contrôle / flux de données, l'analyse et la transformation personnalisées. Voir semanticdesigns.com/Products/DMS/DMSToolkit.html .
Ira Baxter

1
Pour l'outil commercial, il y a aussi CppDepend ( cppdepend.com ), et peut-être que la version d'essai pourrait être suffisante pour les étudiants.

Réponses:


21

Oink est un outil construit au-dessus du frontal Elsa C ++. Le porc de Mozilla est un fork d'Elsa / Oink.

Voir: http://danielwilkerson.com/oink/index.html


1
J'ai compilé plus de 1000 programmes dans ma vie, mais pour l'amour de Dieu, je ne peux pas compiler ce paquet quoi qu'il arrive. J'ai essayé d'utiliser Fedora, Ubuntu, WSL, Cygwin, MSYS2, Windows - mais non. Quelque chose manque toujours et la documentation est tout simplement horrible. Ne vous méprenez pas, je suppose que l'outil est superbe. Mais le site Web et la documentation semblent que personne ne les a touchés dans 10 à 15 ans.
Apache

73

CppCheck est open source et multiplateforme.

Mac OS X:

brew install cppcheck

1
@gio Je n'ai personnellement vu aucun problème. Je crois que CppCheck a la capacité d'ignorer ou d'exclure certains chemins ou fichiers, ce qui permet de réduire la portée.
Soo Wei Tan

1
Sous Windows:choco install cppcheck
KindDragon

53

Concernant le compilateur GNU, gcc a déjà une option intégrée qui permet d' avertir davantage ceux de -Wall. L'option est -Weffc ++ et il s'agit des violations de certaines directives de Scott Meyers publiées dans ses livres " C ++ efficace et plus efficace ".

En particulier, l'option détecte les éléments suivants:

  • Définissez un constructeur de copie et un opérateur d'affectation pour les classes avec une mémoire allouée dynamiquement.
  • Préférez l'initialisation à l'affectation dans les constructeurs.
  • Rendez les destructeurs virtuels dans les classes de base.
  • Demandez à "operator =" de renvoyer une référence à * this.
  • N'essayez pas de renvoyer une référence lorsque vous devez renvoyer un objet.
  • Distinguer les formes préfixées et postfixes des opérateurs d'incrémentation et de décrémentation.
  • Ne surchargez jamais "&&", "||" ou ",".

7
En plus de -Wall et -Weffc ++ de gcc, -Wextra fait une bonne analyse statique gratuite, par exemple, les branches qui ne renvoient pas de valeur, ou la vérification d'un unsigned pour être inférieur à zéro. Il est remarquable de voir à quelle fréquence les programmeurs professionnels pensent que cette dernière est une bonne idée…
Flash Sheridan

24
Beurk, -Weffc++met en garde contre des tonnes de constructions qui sont parfaitement bien dans une grande base de code. J'appuie cependant la suggestion de -Wextra; ne partez pas sans lui!
Tom

29

En cours de développement pour l'instant, mais clang fait une analyse C et vise à gérer C ++ au fil du temps. Cela fait partie du projet LLVM .

Mise à jour : Bien que la page de destination indique "L'analyseur est un travail continu en cours", il est néanmoins maintenant documenté comme un analyseur statique pour C et C ++.

Question: Comment puis-je exécuter GCC / Clang pour une analyse statique? (avertissements uniquement)

Option du compilateur: -fsyntax-only


1
LLVM est un projet très intéressant qui, par rapport à gcc, génère plus de binaires optimisés en moins de temps; et clang, une fois terminé, sera son front-end ...
Nicola Bonelli

Un autre éditeur a ajouté les informations sur le commutateur -fsyntax-only. Notez simplement que c'est essentiellement une demande pour exécuter l'analyse que le compilateur exécuterait sans réellement compiler et émettre les avertissements. Je ne suis pas sûr, mais je pense que c'est différent de l'analyse statique.
Don Wakefield

17

Quelqu'un d'autre a mentionné -Weffc ++, mais c'est en fait l'un des seuls avertissements GCC que je n'active pas par défaut. Cependant, l'ensemble des avertissements que j'active est l'outil d'analyse statique le plus important de mon kit. Vous pouvez voir la liste complète des avertissements recommandés .

En résumé:

-pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimisation -Wformat = 2 -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wnoexcept -Wold -style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow = 5 -Wswitch-default -Wundef -Werror -Wno-used

Notez que certains d'entre eux nécessitent une nouvelle version de gcc, vous devrez donc peut-être les éliminer de votre liste si vous êtes bloqué sur 4.5 ou quelque chose.



7

Si par Open Source, vous vouliez vraiment dire "gratuit", alors l' analyse de pré - production de Microsoft est bonne. Bien sûr Windows uniquement. Il est entièrement intégré dans Visual Studio et le compilateur. par exemple:

cl /analyze Sample.cpp

Dans quelle version et édition est-ce disponible?
Twk

Semble être intégré au compilateur, qui est gratuit. L'intégration se fait uniquement en édition Team.
JBRWilkinson


4

Éclisse semble remplir la facture pour C.

Si vous ne spécifiez pas open source , je dirais que Gimpel logiciel de PCLint est probablement l' un des meilleurs outils disponibles pour la vérification statique de code en C ++. Mais, bien sûr, ce n'est pas open source.

Mac OS X:

brew install splint

2
Mais cher pour un seul développeur :) J'aime mieux gratuit
Robert Gould

6
l'attelle est pour C, pas C ++. Je ne sais pas s'ils prévoient d'étendre la couverture ou non. J'espère!
Harold Bamford

Oui, pclint mérite un essai, sa contrepartie sous unix est appelée flexe-lint, la version 9.0 doit être plus rapide que la version 8.x, la version 9.0 prend également en charge l'en-tête précompilé pour accélérer l'analyse. Il faut du temps pour apprivoiser pc-lint, il a un faux positif qui peut vous poser des problèmes si vous ne pouvez pas l'ignorer de manière sélective.
zhaorufei

3

PREFast de Microsoft est également disponible dans le Kit de pilotes Windows. La version 7.0 est téléchargeable ici .

Les documents Microsoft indiquent qu'il ne doit être exécuté qu'avec le code du pilote, mais cet (ancien) article de blog décrit les étapes à suivre pour l'exécuter. Peut-être peut-il être intégré dans un processus de construction normal?


PREFast ralentira beaucoup votre processus de construction, pour tout projet réel, votre serveur de construction ne peut peut-être pas se le permettre.
zhaorufei

@zhaorufei: La plupart des analyses statiques ne sont pas "rapides"; ils ont un travail d'analyse de code assez complexe à faire, par définition. Si vous n'aimez pas le coût de construction tout le temps, rendez-le simplement facultatif.
Ira Baxter

2

Nous travaillons sur un plug-in Eclipse CDT appelé métriculateur. Il est toujours en cours de développement mais certaines mesures importantes (par exemple LSLOC, McCabe, EfferentCoupling) sont déjà implémentées.

Voir http://sinv-56013.edu.hsr.ch/redmine/projects/metricular/wiki/Documentation pour plus de détails comme la démonstration vidéo et la documentation.

La dernière version nocturne est disponible pour l'installation via le site de mise à jour à l' adresse : http://sinv-56013.edu.hsr.ch/metriculator/updatesite-nightly/site/

Description supplémentaire

Le métriculateur analyse statiquement le code source C ++ et génère des métriques logicielles. Les métriques sont implémentées en tant que vérificateurs Codan. Les résultats de l'analyse peuvent être explorés dans une vue distincte. Chaque métrique a des propriétés configurables (par exemple, un seuil pour «max lignes de code par fonction»). Le dépassement de ce seuil signale un problème et crée un marqueur dans l'éditeur de code source.

avec métriculateur, vous pouvez:

  • analyser les fichiers / dossiers / projets C ++
  • définir des seuils de mesure et activer / désactiver la mesure à l'aide de la page de préférences Codans
  • avoir des marqueurs de problème dans les éditeurs de code source
  • explorer les résultats métriques
  • exporter les résultats des métriques sous forme de nuage de tags (disponible en option sur le site de mise à jour)

Actuellement, le métriculateur est livré avec les métriques suivantes:

  • McCabe (Complexité cyclomatique)
  • EfferentCoupling par type
  • Lignes de code source logiques
  • Nombre de membres par type
  • Nombre de paramètres par fonction

1

Vous devriez essayer oo-browser, il a une intégration impressionnante avec xemacs


1

On peut également coder des extensions de GCC en MELT (un langage spécifique au domaine conçu pour étendre GCC) ou des plugins GCC en C (beaucoup plus difficile) pour faire une analyse personnalisée.


2
J'ai lu l'un des PDF sur MELT et l'extension de gcc avec melt, mon sentiment est qu'il est encore trop complexe / difficile à ajouter vos propres plugins à gcc. Manière peu pratique pour un utilisateur commun.
zhaorufei

1
L'extension de GCC est complexe, quelle que soit la façon dont vous le faites (via les plugins C, via MELT ou même via Python). C'est parce que GCC est complexe. Et la personnalisation de tout outil d'analyse statique C ++ est difficile car la spécification du langage C ++ est très complexe, et vous devrez gérer la majeure partie de cette complexité (tout programme C ++ non trivial utilise beaucoup de fonctionnalités C ++, peut-être via la bibliothèque standard C ++) .
Basile Starynkevitch

0

Doxygen effectue une certaine analyse du flux de contrôle et génère des graphiques. Ce n'est peut-être pas ce que vous cherchez, mais je les ai trouvés utiles à examiner.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.