静的アナライザーの結果を表示しない方法

広大なネットワークには、ブログ「 No Marketing Bullshit 」があります。 PVS-Studioコードアナライザーに関するいくつかのメモから明らかなように、ブログの不明な著者は私たちのファンの1人であるようです。 これらのメモの1つを翻訳することにしました。 念のため、このブログとは何の関係もありません。 これは私たちのスタイルではありません。 広告記事を作成する場合、私たちは自分自身を偽装していませんが、書いています-これは広告記事です。



Coverity Sales Forceの承認を通過せずにCoverityを試すことは不可能であるという悲しい事実に加えて、CoverityとPVS-Studioを区別する次の大きなポイントは...広告資料です。



これはどのように行うことができます



PVS-Studioを使用した典型的なプロジェクト検証レポートを見てみましょう。 これは私の目を引く最初のものだったので、私はそれにリンクをもたらします。



タイプミス...はい、わかりました。 アレイを海外に行くリスク...ここではすべてが明らかです。 その他のいくつかの小さな欠陥...なるほど。 この問題がプログラムにどのように影響するかについては少しでもわかりませんが、それらについて十分に書かれており、興味のある人には理解できます。



これらのエラーでプログラムがどのように機能するか疑問に思うかもしれません。



すべてが非常に簡単です。 何らかの形で実際に現れる欠陥は、他の方法(古き良きプログラムのデバッグ、単体テスト、同僚の助けなど)を使用してすでに早期に検出されています。他の問題を見つけるには、より多くの努力が必要です。 どういうわけか不器用なデータセットになる可能性があります。 これは、ユーザーアクションの異常なシーケンスである可能性があります。 これは、特定のエラーを示している可能性があります。 これにより、コンパイラまたはC ++ランタイムが更新される場合があります。



欠陥は欠陥です。 「しかし、コンパイラーに嘘をつくことはできません」と言えますが、すべてのエラーが同じというわけではありません。 これらの小さな詳細は何年もの間コードベースにとどまることがあり、ある日、誰かがソースでPVS-Studioアナライザーを起動し、これはイエスです! 私は同じバッグをたくさん持っています! 目の前で逃げろ!



もちろん、それ自体ではそのようなレポートは概して役に立たない-コードベースに精通し、この欠陥を修正できる開発者が必要です。 PVS-Studioレポートは必要なものです-これらの欠点を説明し、分析を提供します。



やってはいけない方法



次に、Coverityの書き込み方法を見てみましょう。 今見たものと同様のそのようなレポートを見つけることは、コベリティの資料の中では非常に難しいでしょう。 しかし、5年に1度、Coverityのメンバーはまだ「Integrity Report」を発行しています



「Integrity Report」は非常にカラフルなドキュメントで、「ミッション」、「非の打ちどころのない」、「イノベーションに焦点を当てる」などの言葉を見つけることができます。 最初は悪くありませんが、少なくともこれらのキーワードがこのドキュメントに存在するという事実は、最初の3ページにすでに多くの広告があることを明確に示しています。



表A ...うーん...この表は、プロジェクトのサイズの分布を示しています。 「分布」という言葉を使用することは、収集されたデータに統計があり、信頼できることを意味します。 たとえば45のプロジェクトをチェックした後でも、そのようなテーブルを作成しようとするのは賢明ではありません。 プロジェクトは2つだけで、700万行以上のコードがあります。 信じられない、言葉がありません。



レポートの残りの部分には、まったく同じ意味のないテーブルがたくさんあります。 いいえ、もちろん、プロジェクトで30平方センチあたり9.7654の問題を見つけることができるのは素晴らしいことです。 しかし、自分でプログラムを試してみるまで、気にしません。これらの数値は、132%以下の効率を意味するからです( 5年前の投稿ですが、まだ関連しています )。



付録Aを参照してください。表2および3は、すべての問題を要約し、カテゴリと重要度を割り当てています。 それでは、見てみましょう...



制御フローの問題。 これは何? これは、「スイッチ」内の「ケース」の最後に「ブレイク」を入れるのを忘れたときですか? あなたは、これは中程度の重要性があると言います。 まあ。 制御をすぐに返す関数「main()」はどうですか? これは制御フローの実際の問題であり、単なる中間レベルであるとは言いません。 制御フローのすべての問題が同等というわけではありません。



中レベルのNULLポインターの逆参照ですよね? まあ、もちろん、あちこちで私のコードはヌルポインターを逆参照し、そのたびにユーザーはキャンディを受け取ります。 おそらく、この整合性レポートの作成者は、ポインターがゼロであるかどうかを最初にチェックせずに逆参照される場合、潜在的にヌルのポインターを逆参照することを念頭に置いていました。 そして素晴らしいニュースは、逆参照される前に毎回ポインターをチェックするのに多くの時間がかかるということです。 繰り返しますが、nullポインターのすべての逆参照が同じというわけではありません。



エラー処理の問題は中程度です。 これは何ですか Win32 API関数のコードエラーをチェックしますか? 当然、プログラムがファイルを開くたびに、開くことができたかどうかを確認せずに読み続けるだけであるという事実は、ユーザーにとってはささいなことです。 フォルダーにアクセスできませんか? まだファイルを保存したとしましょう。 そして、そうです。 エラー処理の問題がすべて同じというわけではありません。



整数処理の問題の重要度は中程度です。 もちろん、メモリ割り当てのサイズを計算する際の整数オーバーフローは一般に意味がありません。 ある程度の量のメモリを割り当てるだけで、これが正しいサイズであると想定します。 すべての整数処理の問題が同じというわけではありません。



保護されていないデータの処理は、中程度の意味を持ちます。 これは何? まったくわかりませんが、保護されていないデータを処理するすべてのケースが類似しているとは限りません。



無効な式-中程度。 もちろん、あなたが望む場所(左のかかとが望む場所)に括弧を入れてください、どんな問題がありますか?



同時アクセス違反-平均レベル。 あなたの人生の終わりまで、あなたはこれらの場所を後で支配すると思うだけです。



API使用エラーは平均です。 あなたのコードは誤ってパスを指定することを忘れており、このため、Windows \ System32のすべてのコンテンツが削除されます。 くしゃみをします。



プログラムがハングアップ-中。 プログラムは、Windows NTドメイン外のコンピューターで起動したときにのみフリーズします。 職場のネットワークで実行するだけで、展示会に行くと、ラップトップはモニター付きのヒーターになり、数千ドルかかります。 なんてこった



そして、なぜ低カテゴリーがないのだろうか? それは、著者が低レベルのソフトウェアの欠陥に名前を付けることを敢えてしなかったからでしょうか?



それはしません。 数千の欠陥をいくつかのカテゴリに分散し、それらに重要度レベルを割り当てることは機能しません。 単に不可能です。 あなたがソフトウェア開発者であれば、間違いなくこれを理解するはずです。 それ以外の場合-最寄りのマクドナルドに行く必要があります-彼らはそこに「助けが必要」というアイテムを持っています。



一般に、整合性レポートは単なる数字とチャートの混乱です。 その利点はゼロではなく、マイナスです。 このような報告は、プログラムの質を気にする人を怖がらせるでしょう。



まとめ



それでは、PVS-StudioとCoverityの広告資料の違いは何ですか? 前者が理解および検証できる事実を提供するという事実。 そして、後者は、彼らに何とかこれを検証する機会を与えずに、単に彼らの膨大な数で彼らを怖がらせます。



誰もがCoverityの試用版に値するわけではないからです。



All Articles