web-dev-qa-db-fra.com

Quels outils d'analyse statique C ++ open source sont disponibles?

Java dispose 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 free.

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

L’autre solution consiste à rechercher des outils d’analyse statiques C++ open source s’appliquant à 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 certains autres outils d'analyse statiques C++ open source portables que tout le monde connaît et que l'on peut recommander?

Quelques liens connexes.

295
jnancheta

Oink est un outil construit sur le frontal Elsa C++. Le porc de Mozilla est une fourchette d'Elsa/Oink.

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

20
Daniel S Wilkerson

CppCheck est open source et multiplate-forme.

Mac OS X:

brew install cppcheck
73
Soo Wei Tan

Concernant le compilateur GNU, gcc a déjà une option intégrée qui permet d’avertir l’avertissement en plus de ceux de -Wall. L’option est - Weffc ++ et concerne les violations de certaines directives de Scott Meyers publiées dans ses livres " Efficace et plus efficace C++ ".

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 de la mémoire allouée dynamiquement.
  • Préférez l'initialisation à l'affectation dans les constructeurs.
  • Rendre les destructeurs virtuels dans les classes de base.
  • Avoir "operator =" renvoie une référence à * this.
  • N'essayez pas de renvoyer une référence lorsque vous devez renvoyer un objet.
  • Faites la distinction entre les formes préfixées et postfixées des opérateurs d’incrémentation et de décrémentation.
  • Ne jamais surcharger "&&", "||" ou ",".
53
Nicola Bonelli

En cours de développement pour l'instant, mais clang effectue une analyse en C et est conçu pour gérer le C++ au fil du temps. Cela fait partie du projet LLVM .

Mise à jour : Alors que la page d'arrivée indique "L'analyseur est un travail en cours continu", il est néanmoins maintenant documenté en tant qu’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

27
Don Wakefield

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 le liste complète des avertissements recommandés .

En résumé:

-pedantic -Wall -Wext -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-non utilisé

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

16
David Stone

John Carmack mentionne également PVS-Studio dans cet intéressant billet de blog sur "Static Code Analysis" .

14
Lucas Cimon

Si par Open Source, vous vouliez vraiment dire "gratuit", alors l'analyse de prefast de Microsoft est bonne. Bien sur Windows uniquement. Il est entièrement intégré à Visual Studio et au compilateur. par exemple.:

cl /analyze Sample.cpp
7
user15071

Le travail d'analyse statique de Mozilla vaut probablement le détour.

6
Daniel James

Splint semble remplir la note pour C.

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

Mac OS X:

brew install splint
4
Onorio Catenacci

Le 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 devrait être exécuté que sur le code du pilote, mais que cet (ancien) article de blog indique les étapes à suivre pour l’exécuter. Peut-être peut-il être intégré dans un processus de construction normal?

3
tmitchell

Nous avons travaillé sur un plug-in Eclipse CDT appelé métriculator. Il est toujours en cours de développement, mais certains paramètres importants (par exemple, LSLOC, McCabe, EfferentCoupling) sont déjà implémentés.

Voir http://sinv-56013.edu.hsr.ch/redmine/projects/metricular/wiki/Documentation pour plus de détails tels que 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 suivante: http://sinv-56013.edu.hsr.ch/metriculator/updatesite-nightly/site/

Description complémentaire

Metriculator 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 séparée. Chaque métrique a des propriétés configurables (par exemple, un seuil pour le nombre maximal de 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 des fichiers/dossiers/projets C++
  • définir des seuils de métriques et activer/désactiver les métriques à 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
  • exportation des résultats de métrique sous forme de nuage de tags (disponible en option sur le site de mise à jour)

Actuellement, le métriculateur est fourni 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
2
jules

On peut aussi coder des extensions de GCC dans MELT (un langage propre à un domaine conçu pour étendre GCC) ou des plugins GCC en C (beaucoup plus difficile) pour effectuer une analyse personnalisée .

1

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

1
Jude

Doxygen effectue des analyses de flux de contrôle et génère des graphiques. Celles-ci ne sont peut-être pas ce que vous recherchez, mais je les ai trouvées utiles à examiner.

0
Paul Nathan