10

どの静的コードアナライザー(ある場合)を使用していますか?私はPython用のPyLintを使用してきましたが、かなり満足しています。今度はCコードに似たものが必要です。

通常の日常の使用では、その出力のどのくらいを抑制する必要がありますか?

4

6 に答える 6

14

ウィキペディアには、さまざまな言語(Cを含む)用の静的コード分析ツールのリストがあります。

個人的には、との両方を使用PC-LintSplintました。最適な選択は、作成したアプリケーションのタイプによって異なります。ただし、どのツールを使用しても、ツールとコードを適切に調整するまで、信号対雑音比は低くなります。

PC-Lint私が使用した中で最も強力なLintツールです。既存のプロジェクトに追加すると、信号対雑音比が低くなる可能性があります。ただし、ツールとコードが適切に構成されると、標準のビルドプロセスの一部として使用できます。私がそれを使用した最後の主要なプロジェクトでは、PC-Lint警告がビルドを壊すように設定しました。PC-Lintのライセンスは389ドルですが、その価値はあります。

Splint素晴らしいオープンソースツールです。いくつかのプロジェクトで使用しましたが、ANSI C以外の拡張機能を備えたコンパイラを使用する場合(組み込みシステムプロジェクトなど)、構成が難しい場合があることがわかりました。

Valgrind動的解析ツールとしても検討する価値があります。


に関するフィードバックを具体的にリクエストしましたSourceMonitor。このツールは、コードに関する興味深いメトリックを提供しますが、そのような分析を提供しないため、優れたLintツールの補足として使用する必要があります。

彼らのホームページに記載されているように、次のようにSourceMonitorなります。

...コードの量を調べ、モジュールの相対的な複雑さを特定します。たとえば、SourceMonitorを使用して、欠陥が含まれている可能性が最も高く、正式なレビューが必要なコードを特定できます。

最近のプロジェクトで使用しましたが、(組み込みシステムのコードでも)使いやすいことがわかりました。複雑度メトリックは、エラーが発生しにくく、保守が容易なコードを開発するための優れたリソースです。

SourceMonitorメトリック収集を自動化する場合は、出力の優れたグラフと、適切にフォーマットされたXMLを提供します。唯一の欠点は、ツールがWindowsでのみ実行されることです。

于 2009-07-17T19:44:47.370 に答える
5

私たちはPC-Lintを使用しており、非常に満足しています。

メッセージの抑制と調整に関しては、いくつかの陣営があるようです。

  • すべてを抑制してから、興味のあるものだけを抑制解除します
  • すべての抑制を解除してから、関心のない警告を抑制します
  • すべてを抑制しないでください

私たちは2番目と3番目のカテゴリーの間のどこかに分類される傾向があります。これは、コアライブラリ(多くの古いコード)で実行されるlintごとに100MiB +のばかげたテキストダンプ(1行に1つのエラー)を意味します。

カスタムのdiffようなツールが変更を監視し、それらをコミットの作成者に電子メールで送信します。これにより、ほとんどの人が見なければならない量が数行に抑えられます。いくつかの基本的なデータマイニングを使用して、時間の経過に伴うエラーに関する興味深い統計を収集します。

ここでは、エラーをより詳細な説明にハイパーリンクし、既存の警告を修正するための「ポイント」を提供するなど、非常に洗練されたものにすることができます。

于 2009-07-18T00:57:39.293 に答える
4

スプリントがありますが、正直なところ、私はそれを機能させることができませんでした。私のプラットフォームでは、それは本当に過度にアクティブです。実際には、私の最もよく使用される「lint」は、次の警告フラグです。gcc

-std=c89 -pedantic -W -Wall -Wstrict-prototypes -Wunreachable-code  -Wwrite-strings -Wpointer-arith -Wbad-function-cast -Wcast-align -Wcast-qual

もちろん、私はそれらの半分が何を意味するのかをほとんど忘れています。しかし、彼らはかなりの数のことを捕らえます。

于 2009-07-17T19:40:02.417 に答える
3

私はDavidEvansのLC/Lintに関する作業の大ファンで、名前がSplintに変更されたようです。これは非常に攻撃的であり、コードに注釈を追加することで、多くの有用な情報を伝えることができます。 プログラマーの注釈とともに使用するように設計されています。それらがなくても機能しますが、アノテーションを付けずに単純なチェッカーとして使用しようとすると、おそらくがっかりするでしょう。必要なのが完全に自動化されたチェックであり、Windowsのみのツールを処理できる場合は、GimpelのPC-Lintを使用することをお勧めします。ジム・ギンペルは25年以上にわたって幸せな顧客を抱えています。

于 2009-07-18T22:31:22.230 に答える
0

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でも同じである必要があります。

于 2009-07-17T20:23:19.927 に答える
0

私はPCLintを永遠に使用し、本当に気に入りました。彼らがC#に入ることを願っています...彼らはすべての雑誌でCまたはC++コードに関するポップクイズを持っているものです。

于 2009-07-17T19:27:50.493 に答える