最初はこのメモを「PVS-StudioでCHEAPを使用して開発プロセスに静的コード分析を導入する方法」と呼びたかったのですが、「安い」という言葉の曖昧な解釈のためにあえてしませんでした。 したがって、私たちが製品を使用するために絶えず解決しなければならなかったエンジニアリング上の問題についてお話します。 将来的には、私には思えるように、私たちはそれを解決したと言います。
そのため、2007年初頭に静的コードアナライザーの最初のバージョン(Viva64と呼ばれ、64ビットエラーを検出)を開発したため、クライアント用のツールを実装するという問題に直面しました。 私たちのクライアントは、少なくとも数十人の開発者と少なくとも数十万行のコードを持つ会社です。 このようなコードの静的アナライザーは、大量の警告を生成します。 たとえば、このツールを使用すると、プロジェクトごとに最大数千のメッセージを受け取りました。
はい、もちろん、アナライザーの誤検知には問題があります。 ただし、どのアナライザーにも誤検知があり、それらから逃れることはできません。 質問が発生しました-ユーザーが受信する多数のメッセージをどうするか? つまり、問題は次のようになります。 潜在的なユーザーがプログラムをダウンロード(試用)し、それを起動して、1万のメッセージを受け取ります。 当然、これは彼を悲しませてからアンインストールし、クライアントを失いました。
最初にしたことは、重複したメッセージをすぐに削除することでした。 アナライザーはC / C ++プロジェクトをチェックし、それを使用するいくつかの.cppファイルをチェックすると、.hファイルでエラーが発生することがあります。 これはここでは複製されません。 次に、分析結果をフィルタリングする機能を追加しました(そして常に改善しました)。エラーコード、メッセージテキスト、マスクでファイルをスキャンしない機能などによるフィルタリングです。 これらすべてにより、メッセージの数を大幅に減らすことができましたが、それは構成後のみです。 ユーザーは初めて大量のメッセージを受け取りました。 したがって、メッセージフィルタリングは重要なツールですが、元の問題(ツールを開発プロセスに導入することの難しさ)は解決しませんでした。
次に、新しいメカニズムである「誤警報としてマーク」がアナライザーに表示されました。 これは、アナライザーメッセージを抑制するための特別な種類のコメント(//-V112)のコードへの挿入です。 将来この方法でコードをマークアップすると、そのようなマークアップがまだないコードフラグメントでのみ問題に関するメッセージを受信できます。 理想的には、これは単なる新しいコードです。 アナライザーをチーム開発プロセスに導入する問題は少し簡単になりましたが、とにかく、チームの数人が最初にコードをマークアップして、明らかに不要なメッセージを排除する必要があります。
実装の問題を解決するための次のステップは、過去数日間に変更されたファイルのみをチェックする機能でした。 これは、すぐに静的解析の恩恵を受け始めています。 しかし、問題はまだ残っています。 結局のところ、ユーザーはこの機能について知らないので、デフォルトで有効にした場合、なぜそれほど多くのファイルがチェックされないのか明確ではありません。 しかし、再び、方向は私たちにとって正しいように見えました。
そこで、「ビルド後の増分分析」と呼ばれる新しいスーパー機能を作成しました。 これで、アナライザーはコンパイル直後に起動し、ユーザーの編集によって「影響を受けた」ファイルのみをチェックします。 数日でファイルをチェックするのとは異なり(開発チームの編集をチェックできる場合)、ユーザーは直接触れるコードにのみエラーが表示されます。
プログラマーは、自分が触れない大量のコードを心配する必要がなくなります。 おそらく、このコードは5年以上前のものです。 実際には変更されておらず、そのほとんどの欠陥はすでに修正されています。 最初にチェックするためにこのコードを急ぐ必要はなく、アナライザはこれを行いません。 プログラマーは、最新のコードでのみ警告を見ます。 また、時間に余裕がある場合は、プロジェクト全体を常に確認し、めったに訪れない場所を見ることができます。
はい、アナライザーからまだ誤検知があります。 はい、とにかくフィルターの関連性は失われていません。 しかし、別の重要なこと。 静的アナライザーの導入コスト(委託する人間の努力のコスト)をゼロに削減することができました。 つまり、今では人が静的アナライザーをダウンロードしてインストールし、追加アクションなしですぐにその恩恵を受け始めます。
しかし、最後の仕上げは十分ではありませんでした。 すべては問題ありませんが、アナライザーがエラーを検出したことのみが非常に目立ちません。 PVS-Studioウィンドウアイコンの色の変化(最初に行ったように)はそれほど目立たず、Visual Studio 2005ではこれはまったく機能しません。 解決策はポップアップ通知でした。
もちろん、私たちはすべての種類の迷惑なポップアップ通知が好きではありません。 しかし、この場合、プログラマーにとって明らかに有用であり、コードエラーを悪用しない限り、めったに表示されません。
このようにして、静的分析を開発プロセスに導入するというエンジニアリングタスクが解決されました。 したがって、PVS-Studio 4.34では、ビルドモード後のインクリメンタル分析がデフォルトで有効になります。
結論は簡単です。 開発者は静的コード分析の実装の難しさを恐れることはできませんが、PVS-Studioを
ダウンロードしてインストールし、開発されたばかりの新しいコードで検出されるエラーを確認するだけです。