web-dev-qa-db-ja.com

どのオープンソースC ++静的解析ツールが利用可能ですか?

Javaには、 FindBugsCheckstyle 、および PMD などの非常に優れたオープンソースの静的分析ツールがあります。これらのツールは使いやすく、非常に便利で、複数のオペレーティングシステムで実行され、freeです。

市販のC++静的解析製品が利用可能です。そのような製品を持っていることは素晴らしいことですが、コストは学生にとってはあまりにも多すぎて、通常、試用版を入手するのはかなり困難です。

別の方法は、複数のプラットフォーム(WindowsおよびUnix)で実行されるオープンソースのC++静的解析ツールを見つけることです。オープンソースのツールを使用することにより、特定のニーズに合わせて変更できます。ツールを見つけることは簡単な作業ではありませんでした。

以下は、他の人によって発見または提案されたC++静的解析ツールの短いリストです。

誰もが知っていて推奨できるポータブルなオープンソースのC++静的解析ツールotherとは何ですか?

いくつかの関連リンク。

295
jnancheta

Oinkは、Elsa C++フロントエンドの上に構築されたツールです。 Mozillaの豚肉はElsa/Oinkのフォークです。

参照: http://danielwilkerson.com/oink/index.html

20

CppCheck はオープンソースでクロスプラットフォームです。

Mac OSX:

brew install cppcheck
73
Soo Wei Tan

GNUコンパイラに関しては、gccには、-Wallのオプションに追加のwarningを有効にする組み込みオプションが既にあります。オプションは-Weffc ++です。これは、彼の著書 "Effective and More Effective C++"で公開されているScott Meyersのいくつかのガイドラインの違反に関するものです。

特に、このオプションは次のアイテムを検出します。

  • 動的に割り当てられたメモリを持つクラスのコピーコンストラクターと代入演算子を定義します。
  • コンストラクターでの割り当てよりも初期化を優先します。
  • 基本クラスでデストラクタを仮想化します。
  • 「operator =」が* thisへの参照を返すようにします。
  • オブジェクトを返さなければならないときに参照を返そうとしないでください。
  • インクリメント演算子とデクリメント演算子の前置形式と後置形式を区別します。
  • 「&&」、「||」、または「、」をオーバーロードしないでください。
53
Nicola Bonelli

現時点では開発中ですが、 clang はC分析を行い、C++を長期にわたって処理することを目的としています。 LLVM プロジェクトの一部です。

Update:ランディングページに「アナライザーは継続的な作業中です」と表示されますが、それでも今は ドキュメント化された CとC++の両方の静的アナライザーとして。

質問: 静的分析のためにGCC/Clangを実行するにはどうすればよいですか(警告のみ)

コンパイラオプション:-fsyntax-only

27
Don Wakefield

他の誰かが-Weffc ++に言及しましたが、実際にはデフォルトでオンにしないGCC警告の1つです。ただし、有効にする一連の警告は、キットで最も重要な静的解析ツールです。 推奨される警告の完全なリスト を確認できます。

要約すれば:

-pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -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-unused

これらのいくつかはgccの新しいバージョンを必要とすることに注意してください。そのため、4.5などに戻った場合、リストから削除する必要があるかもしれません。

16
David Stone

John Carmackは、この興味深い PVS-Studio にも言及しています 「静的コード分析」に関するブログ投稿

14
Lucas Cimon

オープンソースによって、本当に「無料」を意味するのであれば、Microsoftの prefast 分析が適切です。もちろん、Windowsのみです。 Visual Studioとコンパイラに完全に統合されています。例えば。:

cl /analyze Sample.cpp
7
user15071

Mozillaの静的解析作業 はおそらく一見の価値があります。

6
Daniel James

スプリント はCの請求書を埋めているようです。

オープンソースを指定しなかった場合、 Gimpel SoftwarePCLint は、おそらくC++での静的コードチェックに利用できる最高のツールの1つです。しかし、もちろん、それはオープンソースではありません。

Mac OSX:

brew install splint
4

Microsoftの PREFast は、Windows Driver Kitにも含まれています。バージョン7.0はダウンロード可能です こちら

Microsoftのドキュメントでは、ドライバーコードに対してのみ実行する必要があると述べていますが、これは(古い) ブログ投稿 実行手順を示しています。おそらくそれは通常のビルドプロセスに統合できますか?

3
tmitchell

Metriculatorと呼ばれるEclipse CDTプラグインに取り組んできました。まだ開発中ですが、いくつかの主要なメトリック(LSLOC、McCabe、EfferentCouplingなど)はすでに実装されています。

ビデオデモやドキュメントなどの詳細については、 http://sinv-56013.edu.hsr.ch/redmine/projects/metricular/wiki/Documentation を参照してください。

最新のナイトリービルドは、次のアップデートサイトからインストールできます。 http://sinv-56013.edu.hsr.ch/metriculator/updatesite-nightly/site/

詳細説明

Metriculatorは、C++ソースコードを静的に分析し、ソフトウェアメトリックを生成します。メトリックはCodanチェッカーとして実装されます。分析結果は、別のビューで調べることができます。各メトリックには、構成可能なプロパティがあります(たとえば、「関数ごとのコードの最大行数」のしきい値)。これらのしきい値を超えると、問題が報告され、ソースコードエディターでマーカーが作成されます。

計量器を使用すると、次のことができます。

  • c ++ファイル/フォルダー/プロジェクトを分析する
  • codans設定ページを使用して、メトリックしきい値を定義し、メトリックを有効/無効にします
  • ソースコードエディターに問題マーカーがある
  • メトリック結果を調べる
  • メトリックの結果をタグクラウドとしてエクスポート(更新サイトからオプション機能として利用可能)

現在、メトリックスには次のメトリックスが付属しています。

  • マッケイブ(サイクロマティックコンプレックス)
  • タイプごとの遠心カップリング
  • コードの論理ソース行
  • タイプごとのメンバー数
  • 関数ごとのパラメーターの数
2
jules

GCCの拡張機能を MELT (GCCを拡張するために設計されたドメイン固有の言語)またはCのGCCプラグイン(はるかに難しい)でコーディングして、カスタム分析を行うこともできます。

Xemacsとの素晴らしい統合を備えたoo-browserを試してください。

1
Jude

Doxygenはいくつかの制御フロー分析を行い、グラフを生成します。それらはあなたが探しているものではないかもしれませんが、私はそれらを見るのに便利だと思っています。

0
Paul Nathan