どの静的コードアナライザー(ある場合)を使用していますか?私はPython用のPyLintを使用してきましたが、かなり満足しています。今度はCコードに似たものが必要です。
通常の日常の使用では、その出力のどのくらいを抑制する必要がありますか?
どの静的コードアナライザー(ある場合)を使用していますか?私はPython用のPyLintを使用してきましたが、かなり満足しています。今度はCコードに似たものが必要です。
通常の日常の使用では、その出力のどのくらいを抑制する必要がありますか?
ウィキペディアには、さまざまな言語(Cを含む)用の静的コード分析ツールのリストがあります。
個人的には、との両方を使用PC-Lint
しSplint
ました。最適な選択は、作成したアプリケーションのタイプによって異なります。ただし、どのツールを使用しても、ツールとコードを適切に調整するまで、信号対雑音比は低くなります。
PC-Lint
私が使用した中で最も強力なLintツールです。既存のプロジェクトに追加すると、信号対雑音比が低くなる可能性があります。ただし、ツールとコードが適切に構成されると、標準のビルドプロセスの一部として使用できます。私がそれを使用した最後の主要なプロジェクトでは、PC-Lint
警告がビルドを壊すように設定しました。PC-Lintのライセンスは389ドルですが、その価値はあります。
Splint
素晴らしいオープンソースツールです。いくつかのプロジェクトで使用しましたが、ANSI C以外の拡張機能を備えたコンパイラを使用する場合(組み込みシステムプロジェクトなど)、構成が難しい場合があることがわかりました。
Valgrind
動的解析ツールとしても検討する価値があります。
に関するフィードバックを具体的にリクエストしましたSourceMonitor
。このツールは、コードに関する興味深いメトリックを提供しますが、そのような分析を提供しないため、優れたLintツールの補足として使用する必要があります。
彼らのホームページに記載されているように、次のようにSourceMonitor
なります。
...コードの量を調べ、モジュールの相対的な複雑さを特定します。たとえば、SourceMonitorを使用して、欠陥が含まれている可能性が最も高く、正式なレビューが必要なコードを特定できます。
最近のプロジェクトで使用しましたが、(組み込みシステムのコードでも)使いやすいことがわかりました。複雑度メトリックは、エラーが発生しにくく、保守が容易なコードを開発するための優れたリソースです。
SourceMonitor
メトリック収集を自動化する場合は、出力の優れたグラフと、適切にフォーマットされたXMLを提供します。唯一の欠点は、ツールがWindowsでのみ実行されることです。
私たちはPC-Lintを使用しており、非常に満足しています。
メッセージの抑制と調整に関しては、いくつかの陣営があるようです。
私たちは2番目と3番目のカテゴリーの間のどこかに分類される傾向があります。これは、コアライブラリ(多くの古いコード)で実行されるlintごとに100MiB +のばかげたテキストダンプ(1行に1つのエラー)を意味します。
カスタムのdiff
ようなツールが変更を監視し、それらをコミットの作成者に電子メールで送信します。これにより、ほとんどの人が見なければならない量が数行に抑えられます。いくつかの基本的なデータマイニングを使用して、時間の経過に伴うエラーに関する興味深い統計を収集します。
ここでは、エラーをより詳細な説明にハイパーリンクし、既存の警告を修正するための「ポイント」を提供するなど、非常に洗練されたものにすることができます。
スプリントがありますが、正直なところ、私はそれを機能させることができませんでした。私のプラットフォームでは、それは本当に過度にアクティブです。実際には、私の最もよく使用される「lint」は、次の警告フラグです。gcc
-std=c89 -pedantic -W -Wall -Wstrict-prototypes -Wunreachable-code -Wwrite-strings -Wpointer-arith -Wbad-function-cast -Wcast-align -Wcast-qual
もちろん、私はそれらの半分が何を意味するのかをほとんど忘れています。しかし、彼らはかなりの数のことを捕らえます。
私はDavidEvansのLC/Lintに関する作業の大ファンで、名前がSplintに変更されたようです。これは非常に攻撃的であり、コードに注釈を追加することで、多くの有用な情報を伝えることができます。 プログラマーの注釈とともに使用するように設計されています。それらがなくても機能しますが、アノテーションを付けずに単純なチェッカーとして使用しようとすると、おそらくがっかりするでしょう。必要なのが完全に自動化されたチェックであり、Windowsのみのツールを処理できる場合は、GimpelのPC-Lintを使用することをお勧めします。ジム・ギンペルは25年以上にわたって幸せな顧客を抱えています。
llvmclangプロジェクトhttp://clang-analyzer.llvm.orgに1つあります。自分で試したことはありませんが、やってみたいと思います。
実際にはかなり良さそうです:http: //www.mikeash.com/? page = pyblog / friday-qa-2009-03-06-using-the-clang-static-analyzer.html上記はObjective-C用ですが、 Cでも同じである必要があります。
私はPCLintを永遠に使用し、本当に気に入りました。彼らがC#に入ることを願っています...彼らはすべての雑誌でCまたはC++コードに関するポップクイズを持っているものです。