14

Linux で利用可能な静的コード分析ツールを比較した人はいますか? 次のツールの長所と短所は何ですか。

  • リンティアン、
  • スパース、
  • スプリント、
  • ラット、
  • -Wall オプションを使用します。

これらのツールを 1 つだけ使用するだけで十分だと思いますか?

私は推奨事項を探しているわけではありません (それらはたくさん見つかります) が、利用可能なツール間の直接比較です。

4

3 に答える 3

7

もちろんウィキペディアのリストもあります。そのリストは単なるリストであり、比較ではありませんが、ページ上のリンクの1つは少なくとも部分的にあなたの質問に答えているようで、(非常に簡単に)あなたがリストしたプログラムのいくつかに言及しています.

于 2009-06-17T00:06:49.427 に答える
4

-Wall を使用することは、すべての C 開発者にとって当然のことです。また、追加で -Wextra を使用することをお勧めします。

Splint はアプリケーションの他の潜在的な弱点を見つけることができますが、ほとんどの場合 (!) 誤った警告を出力するため、どの警告で splint が何を意味するのかを本当に理解する必要があり、ほとんどの場合、/ out / または / unused / のような注釈をスプリントがあなたに怒鳴らないようにコードします。splint では、重要でない警告を除外する必要があります。そうしないと、多くのメッセージの分析とスクロールに時間がかかりすぎてしまいます。

これらのツールは静的コード チェックのみを行うことに注意してください。valgrind を使用してランタイム メモリ リークを見つける必要があります。

于 2009-06-15T14:39:42.023 に答える
3

スプリントを数回使用しましたが、冗長すぎることがわかりました。ほとんどの警告を無効にしました。コードに正しく注釈を付けると、このツールは興味深い結果をもたらす可能性があると思います。コード注釈がなければ、このツールはあまり役に立ちません。

私はときどきスパースを使用し、それを貴重なツールと考えています。「cgcc」と呼ばれる gcc のラッパーを提供します。その結果、多くのソースファイルが含まれている場合でも、プログラムで sparse を実行するのは簡単です (export CC=cgccそしてほら)。このプログラムは、カーネル ソース コードを分析する場合に最適です。

補足として、定期的に pmccabe も使用しています。pmccabe は静的アナライザーではありません。循環的複雑度を計算します。プログラム内の最も複雑な関数を見つけるのに役立つ場合があります。これらの関数は、エラーが発生しやすく、テストが難しい可能性があります。

于 2009-06-15T15:14:24.077 に答える