PVS-Studio for Visual C ++

PVS-Studio小

かなり前に、私たちの蚘事はすべお、PVS-Studioツヌル自䜓ではなく、あらゆるこずに専念し始めたした。 実瞟のあるプロゞェクト、C ++蚀語の耇雑さ、Cでのプラグむンの䜜成、コマンドラむンからのPVS-Studioの起動に぀いお説明したす。 しかし、たず第䞀に、PVS-StudioはVisual Studioを䜿甚する開発者を察象ずしおいたす。 このツヌルを䜿いやすくするために倚くのこずをしたした。 しかし、これは倚くの堎合、舞台裏にあるものです。 私はこの状況を修正し、PVS-Studioプラグむンに぀いおれロから䌝えるこずにしたした。 Visual C ++を䜿甚しおいる堎合は、この蚘事が圹立ちたす。



静的コヌド分析ずは䜕か、なぜ必芁なのか



静的コヌド分析は、プログラムの゜ヌスコヌドの゚ラヌず欠点を識別するプロセスです。 静的分析は、自動化されたコヌドレビュヌプロセスず芋なすこずができたす。 共同コヌドレビュヌ 、優れた方法論。 しかし、これには重倧な欠点もありたす-高コストです。 新しいコヌドをレビュヌしたり、掚奚事項を䜜成した埌にコヌドを再レビュヌしたりするために、定期的に耇数のプログラマヌを集める必芁がありたす。



䞀方では、定期的にコヌドをレビュヌしたいず思いたす。 䞀方、高すぎたす。 トレヌドオフは静的コヌド分析ツヌルです。 圌らはプログラムの゜ヌスコヌドをたゆみなく凊理し、プログラマヌにコヌドの特定のセクションにもっず泚意を払うように勧めおいたす。 もちろん、プログラムは、プログラマヌのチヌムによっお実行されたコヌドの完党なレビュヌに代わるものではありたせん。 ただし、利益/䟡栌比により、静的分析の䜿甚は倚くの䌁業にずっお非垞に有甚なプラクティスになりたす。



倚数の商甚および無料の静的コヌドアナラむザヌがありたす。 静的アナラむザヌの倧芏暡なリストは、りィキペディアで入手できたす 静的コヌド分析のためのツヌルのリスト 。 静的コヌドアナラむザヌが存圚する蚀語のリストも非垞に倚くなっおいたすC、C ++、C、Java、Ada、Fortran、Perl、Rubyなど。 圓然、 PVS-Studioアナラむザヌに぀いお説明したす。



静的解析の䞻な利点は、プログラムの欠陥をなくすコストを倧幅に削枛できるこずです。 ゚ラヌが早く特定されるず、修正のコストが䜎くなりたす。 したがっお、McConnellの著曞「Perfect Code」に蚘茉されおいるデヌタによるず、テスト段階での間違いの修正には、蚭蚈執筆段階よりも10倍の費甚がかかりたす。



図1.欠陥の導入ず怜出の時間に応じた欠陥修正の平均コスト衚のデヌタはS. McConnell Perfect Codeの本から取られおいたす。画像をクリックしお拡倧したす。



図1.欠陥の導入ず怜出の時間に応じた欠陥修正の平均コスト衚のデヌタはS. McConnell "Perfect Code"による本から取られおいたす。 画像をクリックしお拡倧したす。



静的分析ツヌルを䜿甚するず、蚭蚈段階で倚数の゚ラヌを特定できるため、プロゞェクト党䜓の開発コストを倧幅に削枛できたす。 たずえば、PVS-Studio静的コヌドアナラむザヌはコンパむル盎埌にバックグラりンドで起動でき、朜圚的な゚ラヌが芋぀かった堎合はプログラマヌに通知したす。 このモヌドの詳现に぀いおは、以䞋で説明したす。



コヌドレビュヌず静的分析のトピックに぀いおは、蚘事の最埌に匕甚されおいる蚘事[ 1、2、3 ]で詳现に説明されおいたす。



PVS-Studio Static Code Analyzer



PVS-Studioは、C、C ++、C ++ 11、C ++ / CXのアプリケヌションの゜ヌスコヌドの゚ラヌを怜出する静的アナラむザヌです。 䞻にVisual Studioのナヌザヌを察象ずしおいたす他の環境のサポヌトに぀いおは、補品ペヌゞを参照しおください 。 アナラむザヌはVS2005-VS2012ず完党に統合されたす。 たもなくVS2013のサポヌトを远加したす。 その結果、ナヌザヌはメむンメニュヌの远加項目「PVS-Studio」ず蚺断メッセヌゞを操䜜するためのりィンドりを受け取りたす図2を参照。



図2. Visual Studioぞの統合䞭にPVS-Studioアナラむザヌによっお远加された䞻な芁玠。画像をクリックしお拡倧したす。



図2. Visual Studioぞの統合䞭にPVS-Studioアナラむザヌによっお远加された䞻な芁玠。 画像をクリックしお拡倧したす。



初期蚭定



分析装眮は、蚭眮埌すぐに操䜜できる状態になりたす。 ほずんどの堎合、最初の実行を完了するために䜕も構成する必芁はありたせん。 最初に必芁な蚭定は、サヌドパヌティのラむブラリを陀倖するこずだけです。 jpegラむブラリ゜ヌスファむルの内容はただ線集したせん。 したがっお、確認する必芁はありたせん。 さらに、分析からフォルダヌを陀倖するず、分析時間が短瞮されたす。 分析から陀倖されるディレクトリは、ここで蚭定されたすオプション->ファむルをチェックしない-> PathMasks図3を参照。



図3.アナラむザヌがチェックしないディレクトリヌのリストの線集。画像をクリックしお拡倧したす。



図3.アナラむザヌがチェックしないディレクトリヌのリストの線集。 画像をクリックしお拡倧したす。



指定された名前のいずれかがファむルのフルパスにある堎合、分析は実行されたせん。 デフォルトでは、䞀郚のディレクトリの名前はすでにリストに含たれおいたす。 ただし、プロゞェクトでは、ZLibラむブラリを含むフォルダは「zlib」ではなく、「zip_lib」などず呌ばれる堎合がありたす。 したがっお、このリストを線集する必芁がありたす。 線集を開始するには、3぀の点があるボタンをクリックしたす。



PathMasksリストの有効なマスクの䟋 フォルダ党䜓を陀倖するこずに加えお、個々のファむルを陀倖するマスクを指定できたす。 このために、FileNameMasks蚭定がありたす。 陀倖リストの䜿甚方法の詳现に぀いおは、ドキュメント 蚭定ファむルをチェックしないを参照しおください 。



プロゞェクト怜蚌



初期蚭定が完了するず、プロゞェクトのチェックを開始できたす。 ほずんどの堎合、゜リュヌション党䜓をすぐに確認できたす。 これを行うには、PVS-Studio-> Check-> Solutionメニュヌ項目を遞択したす図4を参照。



図4. PVS-Studioアナラむザヌを䜿甚した゜リュヌションの怜蚌。



図4. PVS-Studioアナラむザヌを䜿甚した゜リュヌションの怜蚌。



確認に問題がある堎合は、圓瀟のWebサむトの「 確認できたせんか 」セクションを参照するこずをお勧めしたす。 これらは無知な「プラグが差し蟌たれおいるこずを確認する」コンセントではありたせん。 このセクションでは、ナヌザヌが私たちに連絡した兞型的な状況に぀いお説明し、アクションの掚奚オプションを瀺したす。



蚺断メッセヌゞのリストを操䜜する



チェック埌、すべおの蚺断メッセヌゞが特別なりィンドりに衚瀺されたす。 りィンドりには倚くのコントロヌルがありたす。 それらはすべお、ナヌザヌにずっお関心のある蚺断メッセヌゞを正確に衚瀺するのに圹立ちたす。 ただし、最初はりィンドりが耇雑に芋えるかもしれたせん。 すべおのコントロヌルを芋おみたしょう図5を参照。



図5.蚺断メッセヌゞが衚瀺されたりィンドり。画像をクリックしお拡倧したす。



図5.蚺断メッセヌゞが衚瀺されたりィンドり。 画像をクリックしお拡倧したす。

  1. 実際にはPVS-Studioりィンドり。
  2. ボタンには、「問題が発生したした」ずいうメッセヌゞが含たれおいたす。 たずえば、ファむルの1぀を前凊理するこずはできたせん。
  3. さたざたなレベルのアラヌトを含むボタン。 珟圚、3぀の蚺断レベルがすべお含たれおいたす。 同時に、第1レベルの132個の譊告、第2レベルの235個の譊告、および第3レベルの390個の譊告がりィンドりに衚瀺されたす。 メッセヌゞレベルは、番号付きの䞉角圢の圢でいずれかの列に衚瀺されたす。
  4. 蚺断ルヌルのアクティブなセット。 GA-䞀般蚺断、OP-最適化、64-64ビット蚺断、MP-OpenMP関連の゚ラヌ、CS-ナヌザヌ蚺断。 このりィンドりには、GAおよびMPに関連する譊告が衚瀺されたす。
  5. falseずマヌクされたメッセヌゞの衚瀺を有効/無効にしたす。 誀ったアラヌトがオンになりたした。 この機胜の詳现に぀いおは、ドキュメント 誀譊告の抑制を参照しおください 。
  6. 蚺断メッセヌゞを怜玢したす。
  7. クむックフィルタヌ。 たずえば、コヌドV501を持ち、XYZプロゞェクトにあるメッセヌゞのみをリストに残すこずができたす。
  8. 前/次のメッセヌゞに移動したす。 これにより、察応するファむルが開き、カヌ゜ルが朜圚的な゚ラヌのある行に眮かれたす。 たた、ダブルクリックしお、リストから蚺断をい぀でも遞択できたす。
  9. 蚭定りィンドりを開きたす。
蚺断メッセヌゞの衚は、次の列に分かれおいたす。 はい、これをすべお読むのは倧倉でした。 ただし、䜿甚を開始するず、すぐにツヌルに慣れるこずができたす。 たた、蚭定するために䜕かを抌すこずはほずんどありたせん。



コンテキストメニュヌ



したがっお、メッセヌゞをダブルクリックするず、目的のテキストの断片に移動したす。 マりスの右ボタンを抌すず、コンテキストメニュヌが開きたす。



メニュヌは非垞にシンプルで、各項目の説明で蚘事をオヌバヌロヌドしないでください。 䞍明な点がある堎合は、ドキュメントをご芧ください。



ただし、非垞に䟿利な機胜に぀いお説明したす。



蚭定で、陀倖するフォルダヌ/ファむルを远加できるこずに泚意しおください図2を参照。 そのため、䜕かを远加するのは思ったよりもずっず簡単です



「ファむルをチェックせず、すべおのメッセヌゞを非衚瀺にしない」ずいう項目に泚意しおください。 クリックするず、䟋倖に远加できるパスのリストが衚瀺されたす図6を参照。



図6.スキャンからファむルを陀倖したす。画像をクリックしお拡倧したす。



図6.スキャンからファむルを陀倖したす。 画像をクリックしお拡倧したす。



別のファむルたたはディレクトリのいずれかを遞択できたす。 この図は、フォルダヌ「E\ [Build] \ VirualDub \ src \ test」が遞択されおいるこずを瀺しおいたす。 これは、このフォルダヌずすべおのサブフォルダヌ内のすべおのファむルが分析から陀倖されるこずを意味したす。 さらに、これらのファむルに関連するすべおのメッセヌゞはリストからすぐに消えたす。 ずおも快適です。 テストフォルダヌ「test」に関連するすべおのメッセヌゞを削陀するために、分析を再開する必芁はありたせん。



増分分析モヌド



最も重芁な機胜の1぀であるむンクリメンタルコヌド分析に぀いお話さないず、PVS-Studioの抂芁は䞍完党になりたす。



゚ラヌが早く発芋されるほど、修正のコストは安くなりたす。 プログラムの線集枈みテキストの゚ラヌをすぐに匷調するこずが理想的です。 ただし、技術的に難しく、リ゜ヌスを倧量に消費したす。 したがっお、PVS-Studioは、修正されたコヌドが正垞にコンパむルされた時点でバックグラりンドで起動したす。 したがっお、゚ラヌは倉曎されたばかりのコヌドで怜玢されたす。 分析が行われおいるずいう事実は、システムトレむのアむコンによっお刀断できたす。



゚ラヌが芋぀かるず、危険を譊告するポップアップりィンドりが衚瀺されたす図7を参照。



図7.線集されたファむルに疑わしい堎所が芋぀かったずいうポップアップメッセヌゞ。



図7.線集されたファむルに疑わしい堎所が芋぀かったずいうポップアップメッセヌゞ。



このポップアップメッセヌゞをクリックするず、PVS-Studioりィンドりが開き図2を参照、疑わしいコヌドフラグメントを調べるこずができたす。



実際、このモヌドを説明するよりも、このモヌドを䜿甚する方が簡単です。 前ず同じようにコヌドを曞きたす。 必芁に応じお、アナラむザヌが邪魔したす。 詊しおみおください



私たちは垞にこのモヌドを䜿甚しおいたす。 はい、コヌディング゚ラヌが発生するこずもありたす。 たた、それらをすぐに修正する機胜により、欠陥を怜出する時間ず、プログラムが蚈画どおりに動䜜しない理由を理解しようずする時間が倧幅に短瞮されたす。 デバッグに15〜20分費やしおから、むンデックスのタむプミスを芋぀けるのは残念です。 PVS-Studioがコヌドに衚瀺された盎埌にPVS-Studioで゚ラヌを怜出した最埌のケヌスの1぀を次に瀺したす。

if (in[0] == '\\' && in[1] == '.' && in[1] == '\\') { in += 2; continue; }
      
      





しかし、これらはもちろん花です。 PVS-Studioアナラむザヌは非垞に䟿利な堎合がありたす。 アナラむザヌに関するレビュヌの1぀は、「 静的アナラむザヌの䜿甚䟋 」です。 テキストはあなたに考えさせたす。



たずめたす。 むンクリメンタル分析は、間違いなく詊しおみるべきものです。 新しいコヌドでいく぀かの間違いを芋぀けたらすぐに圌を愛するでしょう。



PVS-Studioの機胜



簡単にしたしょう。 PVS-Studioで利甚可胜なすべおの蚺断を簡朔に説明するこずは䞍可胜です。 蚺断の完党なリストずその詳现な説明は、ドキュメント「蚺断された゚ラヌの説明」に蚘茉されおいたす。 蚺断をタむプごずにグルヌプ化したテヌブルに限定したす。 䞀郚の蚺断は、耇数のグルヌプに含たれおいたす。 実際、分割は非垞にarbitrary意的です。 たずえば、タむプミスにより、初期化されおいないメモリが䜿甚される可胜性がありたす。 それどころか、いく぀かの゚ラヌはテヌブル内の堎所を芋぀けられたせんでした;それらはあたりにも具䜓的です。 それでも、衚党䜓を芋るず、静的コヌドアナラむザヌの機胜がわかりたす図8を参照。



図8. PVS-Studioの機胜。画像をクリックしお拡倧したす。



図8. PVS-Studioの機胜。 画像をクリックしお拡倧したす。



ご芧のずおり、タむプミスにより発生した゚ラヌの怜玢、コピヌペヌストなどの領域で、アナラむザは可胜な限り顕圚化したす。 コヌドセキュリティに関連する問題を蚺断したす。



これが実際にどのように機胜するかに぀いおは、゚ラヌデヌタベヌスを調べるずわかりたす 。 このデヌタベヌスでは、さたざたなオヌプン゜ヌスプロゞェクトをチェックするこずで発芋したすべおの゚ラヌを収集したす。



おわりに



もちろん、ここでは楜噚に぀いおすべおを説明したせんでした。 すべおを䌝えるず、蚘事はドキュメントに倉わりたす。 目暙は、Visual Studio環境内でツヌルを䜿甚するこずがいかに簡単かを瀺すこずでした。 他の環境ず動䜜モヌドに぀いおは、圓瀟のWebサむトにあるドキュメントず他の蚘事で読むこずができたす。 ちなみに、プログラマヌにずっおは興味深いこずがたくさんありたす。 歩き回っおください。



トラブルのないコヌドをお祈りし、PVS-Studioをお楜しみください。 ご質問がある堎合は、い぀でもお気軜にお問い合わせください。 私たちに曞いおください 。



远加のリ゜ヌス



  1. コヌドレビュヌ
  2. 静的コヌド分析 。
  3. 静的コヌド分析ツヌル 。
  4. 静的解析に関する神話。 2番目の神話は、プロの開発者が愚かな間違いを犯さないずいうこずです。
  5. PVS-Studioをダりンロヌドしお詊しおください。
  6. ゚ラヌがほずんどないのはなぜですか レオトルストむず静的コヌド分析 。
  7. チヌムのPVS-Studioアナラむザヌの䟡栌ずその賌入方法に぀いお話し合いたす PVS-Studioを賌入したす。
  8. 蚘事を読んだ埌によく聞かれる質問ぞの回答。




曎新

蚘事の曎新版 PVS-Studio for Visual C ++ 。



All Articles