Question

On m'a récemment demandé des solutions de rechange à Coverity Prevent pour un code. base qui comprend à la fois C / C ++ et Java. Évidemment, du côté de Java, les outils gratuits disponibles incluent Findbugs (analyse de code compilé) et PMD (analyse de code statique). Ils sont très puissants, en particulier lorsque vous commencez à étudier l’intégration avec les IDE (qui, là encore, sont gratuits).

Cependant, les choses se passent mal lorsque vous commencez à entrer dans le domaine C / C ++ avec les différents compilateurs, architectures, etc.

J'ai proposé divers outils pour Java, notamment Findbugs et PMD. Ce que je recherche, c’est la meilleure option pour le côté C / C ++ lorsque l’on utilise les métriques suivantes:

  1. Prix: gratuit c'est mieux mais peut être battu mieux. Cependant, les modèles de tarification qui facturent par ligne de code sont horribles.
  2. Ensemble de fonctionnalités: comment cet outil améliore-t-il ma vie? Comment détecte-t-il mes erreurs avant que je les enregistre, avant que nous envoyions le code, etc.?
  3. Ergonomie: puis-je utiliser l'outil à mon bureau? Puis-je partager les rapports et / ou les résultats? Puis-je intégrer l'outil avec Fogbugz (que nous utilisons dans mon groupe)? Puis-je intégrer l'outil dans CruiseControl (ou son équivalent)?

L'outil ultime serait un outil aussi utile et utilisable qu'une combinaison de Findbugs et de PMD avec des fonctionnalités identiques, le tout à zéro dollar par siège.

Était-ce utile?

La solution

Les deux qui me viennent à l’esprit sont Splint pour C et Cppcheck pour C ++.

Si vous souhaitez rechercher plus d'options, cette fonction de ces outils est "analyse de code statique". Cela pourrait vous aider à trouver plus d’outils pour C et / ou C ++. La réponse à la question " Quels sont les outils d’analyse statiques C ++ open source disponibles? & ;

Autres conseils

C ++ est un langage assez compliqué pour que ses outils (tels que les outils de refactoring ou d'analyse statique) ne soient tout simplement pas aussi performants que Java ou C #.

Le PC-lint de Gimpel Software est ce qui se rapproche le plus d'un outil standard de vérification des bogues pour C ++. entendu parler. C'est commercial avec un modèle de prix raisonnable. Je ne sais pas à quel point il s'intègre avec d'autres outils.

Le projet open source Clang devrait à terme pouvoir faire une grande partie de ce que vous voulez (et em> vraiment cool), mais il est encore en développement.

PC-Lint est la solution. Contrairement à la plupart des autres outils, il offre un suivi complet des valeurs inter-modules et inter-modules et prend également en charge tous les contours délicats de la compilation / analyse de modèles. J'ai acheté une copie personnelle pour moi il y a environ 9 ans, simplement parce que c'est tellement bon marché. J'ai fini par l'utiliser beaucoup dans des projets open source. PC-Lint n'a pas de licence basée sur le LOC, il ne téléphone pas chez lui et il n'y a pas de serveur de licence. C'est très sur le système d'honneur et très simple. Au cours des neuf dernières années, j’ai trouvé quelques problèmes (mais ils étaient rares et espacés), mais ils ont presque toujours été résolus en quelques semaines.

En ce qui concerne les sources ouvertes, il existe SMatch, basé sur les techniques d’analyse de méta-compilation de Coverity, que le projet viticole utilise de manière très intensive et efficace. Le sous-outil cpd (détecteur de copier / coller) de PMD fonctionne en C ++ et est très rapide. Pour la complexité cyclomatic, il existe pmccabe qui est facilement installable via apt-get (sous Linux; sous Windows, je compile le code source sous cygwin).

PC-Lint nécessite une configuration pour fonctionner correctement, un jour ou deux au plus. Les autres outils ne fonctionnent pas aussi profondément. Vous pouvez donc lancer le jeu avec une commande telle que "rechercher". -name .c | xargs pmccabe | trier -n | queue -n 20 "

J'ai utilisé Klocwork et Rational Software Analyzer dans le passé et fonctionnent bien, bien que les deux soient commerciaux / non libres.

J'utilise flawfinder.py, qui analyse 160 fonctions dangereuses en C / C ++. http://www.dwheeler.com/flawfinder/

Si vous voulez un port ruby ??basé sur Flawfinder, vous pouvez utiliser vulnxpose.rb. https://github.com/nanotechz9l/Source-code-analyzer

Ces deux outils analysent les fichiers de code source C / C ++ à la recherche de vulnérabilités connues, notamment les débordements de mémoire tampon, les conditions de concurrence, une crypto faible, des config de chroot jail ... & amp; plus).

Rick

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top