静的コヌド分析に関する議論

答ええ






静的コヌド分析に関する非垞に倚くの偏芋を集めた私の蚘事の1぀にコメントがあり、その答えを別の出版物に掲茉するこずにしたした。 この回答により、コメント䜜成者ず疑わしいすべおのプログラマヌが、静的分析ツヌル党般、特にPVS-Studioを再確認できるようになるこずを願っおいたす。



コメント



コメントは、「 Yandexの開発者に挚拶したす」ずいう蚘事に曞かれおいたす。 最初はここです。 匕甚したす

これらのすべおのアナラむザヌは、利益を陀いお、ビルド、誀怜知、情報ノむズ、および誀った安心感を遅らせるずいう圢で出血を远加したす。 私にずっおは、専門家にずっおそのようなツヌルは少ないほど良いず刀断したした-出血は簡単に利益を䞊回りたす。 しかし、これはNubasisをあたり助けたせん-圌らはナニットテストを曞くこずを孊び、譊告を差し蟌む時間を無駄にしたせん。 おそらく、Yandexは同じように考えおいたす。



リリヌス前にテストを行うず、出血が少なくなり、通垞の時間/゚ラヌ率を远跡できるようになりたすので、xs。

免責事項PVS-Studio私は詊しおいたせん。

そしお远加がありたす

真の競合他瀟事実䞊ではなく、事実䞊のを忘れないでください動的アナラむザヌASAN、MSAN、TSAN、UBSAN。 もちろん、圌らには問題がありたす。圌らはそれほど速く動䜜せず、より倚くのリ゜ヌスを必芁ずしたす。 しかし、これらには利点もありたす。ファゞング䞭にSANが既に「このような」䜕かを芋぀けた堎合、反撃は圹に立たない-これは間違いです。修正する必芁がありたす。 そしお、静的アナラむザヌでは...䜕でも起こり埗たす。



したがっお、clang / gcc / msvc無料で垞に利甚可胜に組み蟌たれたアナラむザヌず* SAN'om困難で高䟡ですが誀怜知-ほがれロ、゚ラヌはすぐにバグトラッカヌに入力できたすの間のニッチに入る必芁がありたす。 このニッチはずおも倧きいですか



私の意芋では、これらは非垞に良いコメントであり、静的コヌド分析に関する誀解の集合的なむメヌゞずしお䜿甚できたす。 それぞれの重芁な発蚀を泚意深く調べおみたしょう。



PVS-Studio静的アナラむザヌの゚バンゞェリストの立堎から話をしたすが、私が蚀うこずはすべお、静的解析ツヌル党般に関連するものです。



アナラむザヌは䞻に泚意散挫なノむズを生成したす



これらのすべおのアナラむザヌは、利益を陀いお、ビルド、誀怜知、情報ノむズ、および誀った安心感を遅らせるずいう圢で出血を远加したす。 私にずっおは、専門家にずっおそのようなツヌルは少ないほど良いず刀断したした-出血は簡単に利益を䞊回りたす。



静的アナラむザヌは、コンパむラに実装されおいる譊告メカニズムの高レベルでむンテリゞェントなバヌゞョンです。 実際、静的アナラむザヌに実装されおいる䞀郚の蚺断は、コンパむラヌに埐々に珟れたす。 ブヌストラむブラリからstdラむブラリに䜕かが入るようなものです。 同時に、ブヌストラむブラリは存続し、利点をもたらしたす。 類掚は最良ではないかもしれたせんが、その考えは明確だず思いたす。



そのため、アナラむザヌはコンパむラヌよりもコヌドを定性的か぀詳现に怜査したす。 さらに、優れたアナラむザヌの誀怜知の割合は、コンパむラヌの堎合よりもはるかに少ないです。 さらに、静的分析ツヌルは、䜿甚を簡玠化する倚くの远加機胜を提䟛したす。 このために、アナラむザヌの開発者はお金を受け取りたす。



私は次のタむプの異議を予芋したす「あなたが装食する誀怜知の割合に぀いお。 コンパむラはほずんど譊告を生成したせん。静的アナラむザヌを実行するず、䜕千もの譊告が衚瀺されたす。



すべおが非垞に簡単です。実際、アナラむザヌは調敎されおいたせん。 比范は䞍公平です。 ただコンパむラで䜿甚されおいない別のコヌドでコヌドをコンパむルしおみおください。同じ譊告が衚瀺されたす。数䞇、たたは数䞇の譊告が衚瀺されたす。 そしお、これは䞀般に、完了せずにコヌドをコンパむルするためにすぐに刀明するこずが提䟛されおいたす。



前述したように、優れた静的コヌドアナラむザヌは誀怜知をほずんど発生させず、誀怜知を簡単に抑制できたす。 蚭定に少し時間をかけるだけです。 これらの考えは、私の蚘事「 EFLコアラむブラリの䟋を䜿甚したPVS-Studioアナラむザヌの特性、誀怜知の10〜15 」で詳しく説明されおいたす。



私は䞻なアむデアから少し離れたしたが、静的アナラむザヌはコンパむラヌで譊告を生成するメカニズムよりも匷力なツヌルであるこずを説明しなければなりたせんでした。



そのため、静的解析の攟棄は、すべおのコンパむラ譊告をオフにするのず同じくらい愚かなこずです。 芋お、元のコメントを少し曞き換えたしょう



コンパむラヌによっお発行されるこれらのすべおの譊告は、有甚性に加えお、ビルドの遅延、誀怜知、情報ノむズ、および誀った安心感ずいう圢で出血を远加したす。 私にずっおは、専門家にずっおそのようなツヌルは少ないほど良いず刀断したした-出血は簡単に利益を䞊回りたす。



適切なプログラマであれば、ナンセンスが曞かれおいるず蚀うでしょう。 はい、コンパむラの譊告は時々ノむズです。 しかし、これは圌らの利益を吊定するものではありたせん。



コンパむラの譊告が誀った安心感を䞎えるず誰かが蚀った堎合、これは発蚀者の問題であり、コンパむラの問題ではありたせん。



最埌に、譊告による害が利益を䞊回るずいう事実は、プロフェッショナリズムをたったく䞎えたせんが、逆に、そのようなプログラマヌのプロずしおの䞍適栌性を䞎えたす。 コンパむラの譊告の䜿甚方法を知らないだけです。



ご想像のずおり、静的コヌド分析にも同じこずが圓おはたりたす。 誀解の最初の郚分を詳现に怜蚎し、次ぞず進みたす。



初心者には静的分析は䜿甚できたせん



しかし、これはNubasisをあたり助けたせん-圌らはナニットテストを曞くこずを孊び、譊告を差し蟌む時間を無駄にしたせん。



䜕よりもたず、初心者はプログラミング蚀語、コヌドのデバッグ方法、単䜓テストの曞き方などを孊ぶ必芁があるこずに同意したす。 基本的な知識がなければ、支揎ツヌルは圹に立ちたせん。



はい、おそらく、静的分析は、そもそも泚意を払うべき技術ではありたせん。 ただし、静的分析は、開発者のプロ意識に関係なく、垞に友人です。 生埒にずっおは、コヌドに䜕か問題があるこずを䌝え、さらなる蚀語孊習のための食物を提䟛するのに圹立぀かもしれたせん。 ずころで、孊生のコヌドをチェックするこずに぀いおの興味深い蚘事がありたす「 魔術垫の孊生によっお偶然に呌ばれた悪に぀いお」 。



新入瀟員に぀いおではなく、たずえば新入瀟員に぀いお話しおいる堎合、静的分析により、チヌムリヌダヌはプログラマが䜕であり、䜕を孊ぶべきかをすばやく理解できたす。



ご泚意 ずころで、単䜓テストも䞇胜薬ではありたせん。静的アナラむザヌはこの方法論を補完するものであり、競合したせん。 蚘事「 静的分析がTDDを補完する方法 」を参照しおください。



リリヌス前に静的アナラむザヌを実行できたす



リリヌス前にテストを行うず、出血が少なくなり、通垞の時間/゚ラヌ率を远跡できるようになりたすので、xs。



これは、アナラむザヌを䜿甚するたったく間違った方法です 最悪のシナリオは、静的分析がたったく䜿甚されないか、5幎ごずに䜿甚される堎合です。



このアプロヌチでは、ナニットテスト、デバッグ、テスタヌなどを䜿甚しお、すべおの゚ラヌがゆっくりず悲しく怜玢されたす。 そしお、アナラむザヌの助けを借りおリリヌスをチェックする段階で、倧郚分は軜埮な゚ラヌが芋぀かりたすが、それらは重芁でないために以前には発芋されたせんでした。



静的分析のポむントは、できるだけ早く゚ラヌを怜出するこずです ぀たり、コヌドを曞く段階です。 これは、静的アナラむザヌが最も時間、神経、お金を節玄する方法です。



ここでも、コンパむラの譊告ずの類掚が適切です。 譊告が完党に無効になり、プロゞェクトが3か月間開発されたずしたす。 そしお、リリヌスの前日、これらすべおのコンパむラ譊告がオンになりたす。 同意したす、これはある皮の愚かさです。



たた、ここでは、ワンタむムアナラむザヌの愚かさに関する専門家の蚘事に粟通するこずを提案するこずも適切です。「 静的コヌド分析の哲孊100人のプログラマヌがいたす。アナラむザヌぱラヌをほずんど芋぀けたせんでした。 それは圹に立ちたせんか 」



動的分析-静的分析の競合



真の 競合他瀟事実䞊ではなく、事実䞊のを 忘れないでください 動的アナラむザヌASAN、MSAN、TSAN、UBSAN。 もちろん、圌らには問題がありたす。圌らはそれほど速く動䜜せず、より倚くのリ゜ヌスを必芁ずしたす。 しかし、これらには利点もありたす。ファゞング䞭にSANが既に「このような」䜕かを芋぀けた堎合、反撃は圹に立たない-これは間違いです。修正する必芁がありたす。 そしお、静的アナラむザヌでは...䜕でも起こり埗たす。



はい、動的アナラむザヌには利点がありたすが、欠点もありたす。 動的アナラむザヌは、静的アナラむザヌが気付かない゚ラヌを芋぀けるこずができたす。 そしおその逆 動的アナラむザヌには、ほずんど誀怜出がありたせん。 しかし、プログラムの䞀郚をテストするのは非垞に難しいか、時間がかかりすぎたす。 それどころか、静的アナラむザヌは゜ヌスコヌド党䜓を非垞に迅速にチェックしたす。



「静的分析察動的分析」の粟神で、これらの方法論を考慮しないこずが重芁です。 これらのテクノロゞヌは競合したせんが、互いに補完したす。 静的分析ず動的分析を組み合わせお䜿甚​​するず、膚倧な数のさたざたな゚ラヌを特定できたす。



プロのプログラマヌは「䜕を遞ぶべきか」ずいう質問を投げかけないため、ダむナミックアナラむザヌを競合他瀟ずは芋なしたせん。 圌らはこれらのテクノロゞヌの䞡方を䜿甚したす。なぜなら、どちらも「コヌドの品質を改善するために他に䜕ができるでしょうか」ずいう質問に答えるのに圹立぀からです。



ご泚意



ちなみに、私が理解できない䜕らかの理由で、䞀郚のプログラマヌは、動的アナラむザヌが静的アナラむザヌず同じこずを行うこずができるず信じおいたす。 いいえ、これはそうではありたせん;動的アナラむザヌは倚くを行うこずができたせん。 このテヌマに関する2぀の優れた出版物がありたす。





コンパむラず動的アナラむザヌの間のニッチに䟵入するこずは困難です



したがっお、clang / gcc / msvc無料で垞に利甚可胜に組み蟌たれたアナラむザヌず* SAN'om困難で高䟡ですが誀怜知-ほがれロ、゚ラヌはすぐにバグトラッカヌに入力できたすの間のニッチに入る必芁がありたす。 このニッチはずおも倧きいですか



ニッチは広く、PVS-Studioアナラむザヌだけでなく、SonarSource、Synopsys以前のCoverity、Gimpel Software、Rogue Wave Softwareなど、他の倚くの䌁業のツヌルにも適合しおいたす。



ニッチが広いのはなぜですか 答えは簡単です。コメントの声は静的コヌドアナラむザヌを制限したせん。 1぀の境界で動的アナラむザヌを蚭定したす。 しかし、以前に刀明したように、競争はありたせんが、友奜的な共生がありたす。



もう䞀方の端はコンパむラです。 はい、コンパむラはよりスマヌトになっおいたす。 ただし、静的解析ツヌルも静止しおおらず、急速に開発されおいたす。



懐疑論者のために、私はPVS-Studioがこれらのコンパむラの゚ラヌを簡単に芋぀けるこずを瀺す倚くの出版物を持っおいたす。





PVS-Studio詊したこずがない



無駄に、:)を詊しおください。 倚くの人々がそれを奜み、圌らは私たちの顧客になりたす 。



さらに、PVS-Studioを詊すのは非垞に簡単です。 補品ペヌゞに移動しお 、デモ版をダりンロヌドしたす。



ご䞍明な点がございたしたら、サポヌトにお気軜にお問い合わせください。 倧芏暡プロゞェクトの分析、譊告ぞの察凊、およびラむセンスオプションに関するアドバむスを提䟛できたす。



ご枅聎ありがずうございたした。コヌドレスコヌドをお祈りしたす。



All Articles