どのオープンソースC ++静的解析ツールが利用可能ですか? [閉まっている]
-
02-07-2019 - |
質問
Javaには、 FindBugs 、 Checkstyle および PMD 。これらのツールは使いやすく、非常に便利で、複数のオペレーティングシステムで実行され、無料です。
商用C ++静的解析製品が利用可能です。そのような製品を持っていることは素晴らしいことですが、費用は学生にとっては多すぎて、通常は試用版を入手するのはかなり難しいです。
別の方法は、複数のプラットフォーム(WindowsおよびUnix)で実行されるオープンソースのC ++静的解析ツールを見つけることです。オープンソースのツールを使用することにより、特定のニーズに合わせて変更できます。ツールを見つけるのは簡単な作業ではありませんでした。
以下は、他の人によって発見または提案されたC ++静的解析ツールの短いリストです。
- C ++チェック http://sf.net/projects/cppcheck/
- Oink http://danielwilkerson.com/oink/index.html
- CおよびC ++コードカウンター http://sourceforge.net/projects/cccc/
- スプリント(回答から)
- Mozillaの豚肉(回答から)(現在はOinkの一部です)
- MozillaのDehydra(回答から)
- GNU g ++のオプション
-Weffc ++
を使用(回答より)
その他のポータブルオープンソースC ++静的解析ツールとは、誰でも知っていて推奨できるものですか?
いくつかの関連リンク。
解決
Oinkは、Elsa C ++フロントエンドの上に構築されたツールです。 Mozillaの豚肉はElsa / Oinkのフォークです。
他のヒント
GNUコンパイラについては、gccにはすでに組み込みオプションがあり、-Wallのオプションに追加の warning を有効にします。オプションは -Weffc ++ であり、彼の著書" Effective and More Effective C ++ "に掲載されている Scott Meyers のガイドライン違反に関するものです。 。
特に、このオプションは次のアイテムを検出します:
- メモリを動的に割り当てるクラスのコピーコンストラクターと代入演算子を定義します。
- コンストラクターでの割り当てよりも初期化を優先します。
- デストラクタを基本クラスで仮想化します。
- 「演算子=」を使用; * thisへの参照を返します。
- オブジェクトを返す必要があるときに参照を返そうとしないでください。
- インクリメント演算子とデクリメント演算子の前置形式と後置形式を区別します。
- "&&"、" ||&quot ;、または"、"をオーバーロードしないでください。
現在は開発中ですが、 clang はC分析を行い、C ++の処理を対象としています。時間。これは、 LLVM プロジェクトの一部です。
更新:ランディングページに「アナライザーは継続的な作業中です」と表示されていますが、それでも CおよびC ++の両方の静的アナライザーとして文書化。
質問: GCCの実行方法/ Clangの静的分析? (警告のみ)
コンパイラオプション:-fsyntax-only
他の誰かが-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などで立ち往生している場合は、リストから削除する必要があります。
John Carmackは、この興味深い「静的コード分析」に関するブログ投稿。
もしあなたがオープンソースによって、本当に「無料」を意味するなら、マイクロソフトの prefast 分析は良いものです。もちろん、Windowsのみ。 Visual Studio&に完全に統合されています。コンパイラ。例:
cl /analyze Sample.cpp
Mozillaの静的解析作業は一見の価値があります。
Splint はCの請求書を満たすようです。
オープンソースを指定しなかった場合、 Gimpel Software の PCLint は、おそらくC ++の静的コードチェックに使用できる最高のツールの1つです。しかし、もちろん、それはオープンソースではありません。
Mac OSX:
brew install splint
私たちは、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設定ページを使用してメトリックを有効/無効にします
- ソースコードエディターに問題マーカーがある
- メトリック結果の調査
- メトリクスの結果をタグクラウドとしてエクスポート(更新サイトからオプション機能として利用可能)
現在、メトリックスには次のメトリックスが付属しています:
- McCabe(サイクロマティックコンプレックス)
- タイプごとのEfferentCoupling
- 論理ソースコード行
- タイプごとのメンバー数
- 関数ごとのパラメーターの数
xemacsとの素晴らしい統合を備えたoo-browserを試してください
MELT (GCCを拡張するために設計されたドメイン固有の言語)またはGCCでGCCの拡張機能をコーディングすることもできます。カスタム分析を行うためのCのプラグイン(はるかに難しい)。
Doxygenはいくつかの制御フロー分析を行い、グラフを生成します。それらはあなたが探しているものではないかもしれませんが、私はそれらを見るのに便利だと考えています。