循環的複雑性に関するこの質問により、静的コード分析についてより深く考えるようになりました。コードの複雑さと一貫性を分析することは時として役に立つので、もっとやりたいと思っています。そのような分析にはどのツールを (言語ごとに) 推奨しますか? ウィキペディアには多くのツールのリストがありますが、以前に試したことのあるツールはどれですか?
編集: David が指摘するように、C/UNIX ベースのツールに関しては、これは完全に聞かれない質問ではありません。
循環的複雑性に関するこの質問により、静的コード分析についてより深く考えるようになりました。コードの複雑さと一貫性を分析することは時として役に立つので、もっとやりたいと思っています。そのような分析にはどのツールを (言語ごとに) 推奨しますか? ウィキペディアには多くのツールのリストがありますが、以前に試したことのあるツールはどれですか?
編集: David が指摘するように、C/UNIX ベースのツールに関しては、これは完全に聞かれない質問ではありません。
Objective-C iPhone プロジェクト (iOS アプリ) 用に Hudson 継続的インテグレーション (CI) ビルド システムをセットアップしており、ビルド中にプロジェクトを分析するために使用できるさまざまなツールのリストをまとめました。
Clang 静的アナライザー: Xcode 4 に含まれる Clang のバージョンよりも多くの問題をキャッチする無料の最新のスタンドアロン ツールです。アクティブなプロジェクト。-- http://clang-analyzer.llvm.orgにアクセスしてください
Doxygen : クラス依存関係図も生成する無料のドキュメント生成ツール。アクティブなプロジェクト -- http://www.doxygen.nlにアクセスしてください
HFCCA (ヘッダーなしの循環的複雑度アナライザー): コードの複雑さを計算するための無料の Python スクリプトですが、ヘッダー ファイルとプリプロセッサはありません。Hudson/Jenkins ビルドの XML 形式での出力をサポートします。アクティブなプロジェクト。-- http://code.google.com/p/headerfile-free-cyclomatic-complexity-analyzerにアクセスしてください
CLOC (count lines of code): ファイル、コード行、コメント、空白行をカウントする無料ツール。差分をサポートしているため、ビルド間の違いを確認できます。アクティブなプロジェクト。-- http://cloc.sourceforge.netにアクセスしてください
SLOCcount (source lines of code count): コードの行数をカウントし、プロジェクトに関連するコストと時間を見積もる無料のツール。活動していないようです。-- http://sourceforge.net/projects/sloccountおよびhttp://www.dwheeler.com/sloccountにアクセスしてください
AnalysisTool : コードの複雑さを測定し、依存関係図も生成する無料のコード分析ツール。非活動中。Xcode 4 では動作しないようですが、動作させたいと思っています。-- http://www.karppinen.fi/analysistoolにアクセスしてください
C および Objective-C の場合は、LLVM / Clang Static Analyzerも使用できます。
これはオープン ソースであり、活発に開発されています。
C++ の場合、CppCheck を使用します。それはうまくいくようです。
明らかに、答えはプログラミング言語によって異なります。UNOは C プログラムに適しています。
@Thomas Owens: Splint のことだと思います。
私は Eclipse 用の PMD プラグインをよく使用します。それはかなりいいですし、非常に設定可能です。スタイルエンフォーサーをもっと探しているなら、CheckStyleも良いです。
Checkstyle、Findbugs、PMD はすべて Java でうまく機能します。現在、NetBeans で実行されている PMD に満足しています。実行するルールを管理するための非常にシンプルな GUI があります。1 つのファイル、パッケージ全体、またはプロジェクト全体に対してチェッカーを実行することも非常に簡単です。
Palm では、C および C++ のコード分析にCoverity Preventを使用しています。これは、コード内の隠れたバグを発見するのに非常に役立ちました。また、ヒットする可能性が低い問題も多数検出されますが、ツールが生成するコード データベースでそれらを「修正しない」または「問題ではない」とマークするのは簡単です。費用はかかりますが、同社は時折オープン ソース プロジェクトを実行し、メンテナーにレポートを提供しています。私たちの経験についてもっと知りたい場合は、彼らのサイトに製品の使用に関するホワイトペーパーがあります.
Lintは、以前のポジションで使用した唯一のものです。それは悪くありませんでした、それが示唆したことのほとんどは良いキャッチでした、いくつかはあまり意味がありませんでした. lint エラーや警告が発生しないことを確認するプロセスが整っていない限り、隠されたバグを発見するのに役立つ可能性があります。
C コードには Programming Research のQACを使用しています。正常に動作します。
最近では、Coverity のPreventやGrammaTechの分析ツールなど、より高度な静的/動的コード アナライザーをチェックすることについて話し合っています。
彼らは、静的分析を行うだけでなく、実行時エラーなども検出すると主張しています。主要なセールス ポイントの 1 つは、誤検知が少ないことです。
私の管理者は非常に安価なので、非常に安価なツールしか使用できません。
1) CCCC (C / C++ Code Counter): 行数に関連するさまざまな結果 (対コメントの行数、循環的複雑度、情報の流れなど) 2) Semian: 私が試した最速のコード重複ファインダー。3) LOC Metrix: あまり有用ではありませんが、要点を説明するのに役立ちます。
これらのツールの 1 つを使用したのは、Split (C プログラミング言語) だけです。役に立つとは思いましたが、私は決してパワー ユーザーではなく、できることの表面をかじっただけだと思います。
私は多くの言語でかなりの数のオープンソースおよび商用の静的分析ツールを使用してきましたが、全体的な議論は技術的負債として知られる概念の傘下にあることがわかりました (この記事で詳しく説明します)。
ただし、簡単な回答として、言語ごとの私のお気に入りを次に示します。