「PVS-Studio開発者、Clangについて聞いたことがありますか?」、またはコードなしのPVS-StudioとClangの比較

多くの場合、PVS-Studio静的コードアナライザーC ++に関する記事を書くとき、次の質問のいずれかが求められます。
  1. そして、PVS-StudioがClangよりも優れているのはなぜですか?
  2. しかし、Clangは無料であり、費用がかかります。その理由は明らかではありませんか?
  3. Clangの方が優れています。そこに独自の診断を簡単に追加できます。これはオープンソースです。
  4. 閉じる必要があります。Clangは今すぐではなく、Windowsのバージョンをデバッグするときを押しつぶします(質問がどのように定式化されているかではありません)。
これらの質問に詳細に答える時が来ました。





ちょっとした冗談から始めましょう。 PVS-StudioがClangコード( onetwo )でエラーを検出したが、PVS-StudioコードでClangが検出しなかったという理由だけで、PVS-StudioはClangよりも優れています。



コード分​​析ツールの比較は簡単な作業ではありません( このトピックについては既に説明しました )。 診断ルールのセットのみで静的分析ツールを比較するのは正しくありません。 実際、通常の生活では、ツールはテストではなく実際のプロジェクトで使用されます。 そして、静的解析ツールには、既存プロジェクトへの実装と通常の使用という2つのフェーズがあることがわかりました。



Clangなど、人がどのように試みるかを見てみましょう。 おそらく、ソフトウェアエラーのあるいくつかの小さなテストファイルを取得し、アナライザーを実行して、アナライザーが何かを見つけたが、見つけられなかったことがわかります。 人がトリガーされた診断を気に入ったとします。 その後、彼は実際のプロジェクトでアナライザーを試行し、コードアナライザーから数百、または数千ものメッセージを確認します。 彼は一度にそれらをすべて修正することはできず、それらを使って何かをすることはできません-Clangタイプアナライザーは単にコンソールにそれらを表示するだけなので、それは不明です。 この時点で、アナライザーの実装が開始されます。



既存の(したがって大規模な)プロジェクトに静的分析を導入する段階の目標は、アナライザーの起動時にコード0で診断メッセージを受け取ることです。 ここで、Clangには何も提供されていないことがわかります。 大量のメッセージを処理するメカニズムがありません。 まあ、手動で各メッセージを確認し、必要に応じて変更を加える方法を除きます。



PVS-Studioは何を提供できますか? 多くのこと:
  1. 個々のファイル、マスクファイル、またはフォルダーの分析の例外。
  2. エラーコードまたはメッセージコンテンツでメッセージをフィルタリングします。
  3. メッセージをソートするさまざまな方法。
  4. メッセージをさらに隠蔽するために、メッセージを誤ったアラーム(False Alarm)としてマークアップします。
  5. その他。
重要な点は、これらすべての機能がリアルタイムで機能し、分析を再開する必要がないことです。 これは非常に重要です。大規模なプロジェクトでは、コードを長時間チェックできるためです。



なぜPVS-Studioに実装フェーズを簡素化するような機会があるのに、Clangにはないのですか? 実際には、PVS-Studioでの分析結果の表示は表です(図のように):



図1-PVS-Studioの分析結果の表示。







図1-PVS-Studioの分析結果の表示。



より正確には、テーブルは視覚的な表現ですが、内部にはデータベースがあり、このデータをフィルタリングおよび処理する可能性がすべてあります。 clangの場合、これはコンソールへの出力です。 もちろん、clangを開発環境に統合すると、ナビゲーションが得られますが、それ以上のものは得られません。 これは、PVS-StudioとClangの主な違いに近づいていることを意味します。



PVS-Studioの一部として、ツールを実装する方法があります(既存のプロジェクトのメッセージ数を無効にします)が、Clangの一部としてではありません。 コード分​​析に関するインターネット上の記事を読んだだけでは重要ではないように見えますが、既に数年前の静的分析をプロジェクトに取り入れようとすると、それが重要になります。



診断の観点からPVS-StudioとClangを比較することを意図的に避けているように思えるかもしれません。 はい、いいえ。 ツールの診断機能を比較するタスク自体は複雑です。 しかし、さらに、そのような比較の結果はすぐに時代遅れになります。 そして、PVS-Studioに取り組んでいる私たちとClang開発者全員が新しい診断を追加します。



「clangを実行し、診断は0ですが、実装はしていません」と誰かが言う場合、この人は既に実装済みのツールを使用するだけです。 以上です。



ここで、Clangが無料で、PVS-Studioにお金がかかる理由について質問します。 プログラマーは、支払いを受ける手段を常に考えているわけではありません。 ClangはApple、Google、Intelのプログラマーに取り組んでいます。 私たちはPVS-Studioを独立したプロジェクトとして開発しており、自分で給与を稼ぐことを余儀なくされているため、PVS-Studioは有料製品です。 当然、私たちは誰もそれを使用する義務を負いません。 私たちの顧客は、この製品を必要とし、「何を支払うべきか」を理解しているPVS-Studioユーザーです。



Clangのアナライザーはオープンソースプロジェクトですが、コード分析の分野の専門家ではない人に新しい診断ルールを追加することは非常に困難です。 しかし、ここでは一言も言ってはいけません。Clangに新しいルールを追加してみてください。



そして最後に、私たちがClangとの競争を恐れているかどうかについて。 まだ、Clangのようにこれの静的分析はツールの多くの機能の1つに過ぎず、私たちはこれに特化しています。 さらに、既存のプロジェクトでは、新しいコンパイラへの切り替え(およびClangの静的解析を使用するには、自分でコンパイルする必要があります)自体が非常に困難です。



ただし、このテキストは、Clangについて何らかの形で不快感を抱いているという意味ではありません。 これは非常に優れたプロジェクトであり、その一部はPVS-Studioで(プリプロセッサとして) 使用されており、非常に多くのクールな開発者が取り組んでいます。



All Articles