どのようなオープンソースのC ++静的分析ツールを利用できますか?[閉まっている]


301

Javaには、FindBugsCheckstylePMDなどの非常に優れたオープンソースの静的分析ツールがいくつかあります。これらのツールは使いやすく、非常に便利で、複数のオペレーティングシステムで実行でき、無料です。

市販のC ++静的分析製品を利用できます。このような製品を購入することは素晴らしいことですが、学生にとってはコストが高すぎるため、通常、試用版を入手するのはかなり困難です。

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

以下は、他の人が発見または提案したC ++静的分析ツールの短いリストです。

いくつかのどのようなものがあり、他のポータブルオープンソースのC ++静的解析ツールは、誰でも知っているのと推奨できること?

いくつかの関連リンク。


商用のDMSソフトウェアリエンジニアリングツールキは、Java、C、C ++、およびCOBOLを処理し、解析、ASTの構築、名前/タイプの解決、制御/データフロー分析、カスタム分析および変換を提供します。semanticdesigns.com/Products/DMS/DMSToolkit.htmlを参照してください。
Ira Baxter

1
商用ツールにはCppDepend(cppdepend.com)もあり、おそらく試用版で十分です。

回答:


21

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

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


1
私は自分の人生で1000以上のプログラムをコンパイルしましたが、神の愛のために、このパッケージをコンパイルすることはできません。Fedora、Ubuntu、WSL、Cygwin、MSYS2、Windowsを使用しようとしましたが、使用しませんでした。常に何かが欠けていて、ドキュメントはひどいものです。誤解しないでください。このツールはすばらしいと思います。しかし、Webサイトとドキュメントは、10〜15年で誰も触れなかったようです。
Apache

73

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

Mac OSX:

brew install cppcheck

1
@gio個人的に問題は見たことがありません。CppCheckには、特定のパスまたはファイルを無視または除外する機能があると思います。これにより、範囲を絞り込むことができます。
Soo Wei Tan

1
Windowsの場合:choco install cppcheck
KindDragon

53

GNUコンパイラに関しては、gccにはすでに-Wallの警告に対する追加の警告を有効にする組み込みオプションがあります。オプションは-Weffc ++です。で、彼の著書「Effective and More Effective C ++」に掲載されたスコットマイヤーズのいくつかのガイドラインの違反についてです。

特に、このオプションは次の項目を検出します。

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

7
gccの-Wallと-Weffc ++に加えて、-Wextraはいくつかの優れた無料の静的分析を行います。プロのプログラマが...後者は良いアイデアだと思いますどのように多くの場合、それは顕著だ
フラッシュシェリダン

24
ヤック、大規模なコードベースでは完全に問題のない構造のトン-Weffc++について警告します。しかし、私はの提案を2番目にします。それなしで家を出ないでください!-Wextra
トム

29

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

更新:ランディングページに「アナライザーは継続的な作業中です」とありますが、それでも現在は文書化されていますますが、CとC ++の両方の静的アナライザーとしてれています。

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

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


1
LLVMは非常に興味深いプロジェクトで、gccと比較して、最適化されたバイナリを短時間で生成します。そして完了したら、clangがそのフロントエンドになります...
Nicola Bonelli

別の編集者が-fsyntax-onlyスイッチに関する情報を追加しました。これは本質的に、コンパイラーが実際にコンパイルせずに実行する分析を実行し、警告を発する要求であることに注意してください。よくわかりませんが、静的解析とは違うと思います。
Don Wakefield

17

他の誰かが-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か何かで立ち往生している場合は、リストから削除する必要がある場合があります。


14

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


4
それは「オープンソース」ではなく、その言葉のいかなる意味においても絶対的かつ積極的に「フリー」ではありません。よく知られている静的分析ツール(私が考える唯一の2番目に続く)ですが、その値札はかなり高いです。
Tomas Pruzina 2014年

7

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

cl /analyze Sample.cpp

これはどのバージョンとエディションで利用できますか?
2008年

無料のコンパイラに組み込まれているようです。統合はおそらくチームエディションのみです。
JBRウィルキンソン2010


4

SplintはCの請求書を埋めているようです。

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

Mac OSX:

brew install splint

2
しかし、1人の開発者にとっては高価です:)私は無料のほうが好きです
Robert Gould

6
スプリントはC用であり、C ++用ではありません。カバレッジの拡大を計画しているかどうかはわかりません。そうだね!
ハロルドバンフォード、

はい、試してみる価値のあるpclintです。UNIXでの対応物はflexe-lintと呼ばれ、9.0バージョンは8.xバージョンよりも高速でなければなりません。9.0バージョンは、分析を高速化するためにプリコンパイル済みヘッダーもサポートしています。pc-lintを使いこなすには時間がかかります。false-positiveが発生し、選択的に無視できない場合は問題が発生する可能性があります。
zhaorufei

3

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

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


PREFastはビルドプロセスの速度を大幅に低下させます。実際のプロジェクトでは、ビルドサーバーが余裕がない可能性があります。
zhaorufei

@zhaorufei:ほとんどの静的分析は「高速」ではありません。彼らには、定義上、かなり複雑なコード分析ジョブがあります。常にビルドコストが気に入らない場合は、オプションにしてください。
Ira Baxter

2

私たちは、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設定ページを使用してメトリックを有効/無効にします
  • ソースコードエディターに問題マーカーがある
  • メトリック結果を探索する
  • メトリック結果をタグクラウドとしてエクスポート(更新サイトからオプション機能として利用可能)

現在metriculatorには以下のメトリックが付属しています。

  • McCabe(循環的複雑度)
  • タイプごとのEfferentCoupling
  • コードの論理ソース行
  • タイプごとのメンバー数
  • 関数ごとのパラメーターの数

1

あなたはそれがxemacsとの素晴らしい統合を持っているooブラウザを試すべきです


1

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


2
MELTについてのPDFの1つを読んで、gccをメルトで拡張しました。自分のプラグインをgccに追加するのはまだ複雑すぎる/難しいと感じています。一般的なユーザーには実用的ではありません。
zhaorufei

1
GCCの拡張は、それをどのように行うかにかかわらず(Cプラグインを介して、MELTを介して、あるいはPythonを介して)複雑です。これは、GCCが複雑なためです。そして、カスタマイズ任意の C ++静的解析ツールは、ハード C ++言語仕様は非常に複雑ですので、あなたは(任意の非自明なC ++プログラムは、おそらくC ++標準ライブラリスルー、機能++ Cを多く使用しています)、その複雑さの大部分を処理する必要があります。
Basile Starynkevitch、2012年

0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.