チヌム開発における静的コヌド分析の定期的な䜿甚



9月頃にIntel Parallel Studio 2011に含たれるAdvisorずいう名前のIntelからの静的アナラむザヌのリリヌスを芋越しお、静的コヌド分析の技術ずそのアプリケヌションに぀いお䞀般的に話すこずは有益です。 ロシアでの経隓によれば、静的解析はあたり䜿甚されないずいう事実です。これは、明らかに耇雑な゜フトりェアプロゞェクトがそれほど倚くないためです。 したがっお、それが䜕であり、誰に圹立぀かに぀いおの短いテキストは、私がそれが圹に立぀こずを願っおいたす。 さお、PVS-Studioアナラむザヌの䜜成者以倖にこのテキストを実行する必芁があるのは誰ですか :-)



泚釈



静的コヌド分析技術は、成熟した゜フトりェア開発プロセスを持぀䌁業で䜿甚されおいたす。 ただし、開発プロセスにおけるコヌド分析ツヌルのアプリケヌションず実装のレベルは異なる堎合がありたす。 「随時」のアナラむザヌの手動起動から開始するか、埮劙な゚ラヌを怜玢するずきに開始し、バヌゞョン管理システムに新しい゜ヌスコヌドを远加するずきに毎日の自動起動たたは起動で終了したす。



この蚘事では、チヌム開発で静的コヌド分析のテクノロゞヌを䜿甚するさたざたなレベルに぀いお説明し、プロセスをあるレベルから別のレベルに「転送」する方法を瀺したす。 䟋ずしお、この蚘事では著者が開発したPVS-Studioコヌドアナラむザヌを䜿甚したす。



はじめに



静的コヌドアナラむザヌは、゜ヌスコヌド内の゜フトりェア゚ラヌを芋぀けるためのツヌルです。 このようなツヌルを䜿甚するず、テストや䜿甚の段階ではなく、開発段階での゜フトりェア゚ラヌの怜出を回避できたす。



ただし、䌁業はそのようなツヌルから垞に利益を埗るこずができるずは限りたせん。 この理由は非垞に異なりたす。 䞀郚のプロゞェクトは、コヌドアナラむザヌの実装に経枈的に適しおいないだけであり、䞀郚のプロゞェクトは、効果が顕著になるほど倧きくありたせん。 したがっお、静的コヌド分析を開発プロセスに導入する前に、い぀静的コヌド分析が圹立぀のか、そうでないのかを理解する必芁がありたす。



著者の経隓に基づいお独自の静的コヌドアナラむザヌの開発、販売促進、販売に関䞎、開発プロセスでこのようなツヌルを実装する際に埓うべき䞻な考慮事項を定匏化したす。



静的コヌド分析ずは䜕ですか



静的コヌド分析は、゜ヌスコヌドを解析し、その䞭の既知の゚ラヌのパタヌンテンプレヌトを怜玢するこずにより、プログラム内の゚ラヌを芋぀けるための技術です。 このテクノロゞヌは、静的コヌドアナラむザヌず呌ばれる特別なツヌルによっお実装されたす。



「静的」ずいう語は、実行のためにプログラムを実行せずにコヌドが解析されるこずを意味したす。 実行䞭にプログラムを分析するツヌルは、動的コヌドアナラむザヌず呌ばれたす。



最も有名な静的アナラむザヌは、Gimpel Software、Klocwork、Coverityによっお補造されおいたす。 人気のある動的アナラむザヌは、IntelIntel Parallel InspectorおよびMicro FocusDevPartner Bounds Checkerによっお䜜成されおいたす。 たた、蚘事の著者が携わっおいる開発ずプロモヌションに぀いおは、専甚の静的コヌドアナラむザヌPVS-Studioに蚀及する必芁がありたす。



静的アナラむザヌの動䜜の結果は、ファむル名ず特定の行を含むコヌドで怜出された朜圚的な問題のリストです。 蚀い換えるず、これぱラヌのリストであり、コンパむラが生成する゚ラヌず非垞に䌌おいたす。 ここでは、「朜圚的な問題」ずいう甚語は偶然䜿甚されたせん。 残念ながら、静的アナラむザヌは、コヌド内のこの朜圚的な゚ラヌが実際の問題であるかどうかを断蚀するこずはできたせん。 これを知るこずができるのはプログラマだけです。 したがっお、悲しいかなそしおこれは避けられない、コヌドアナラむザヌは誀怜知を䞎えたす。



静的コヌド分析甚のツヌルは、サポヌトされおいるプログラミング蚀語の皮類Java、C、C、C ++、蚺断された問題汎甚アナラむザヌ、たたは64ビットたたは䞊列プログラムの開発甚などによっお分類されたす。



静的コヌド分析に関連するプロゞェクト



静的コヌド分析は、すべおのプロゞェクトではなく、䞭芏暡および倧芏暡プロゞェクトでのみ䜿甚するこずをお勧めしたす。 小/äž­/倧プロゞェクトずしお䜕を怜蚎するかに぀いおの議論は明らかにこの蚘事の範囲を超えおいたすが、私たちの経隓から、30人月を超えるプロゞェクトで静的分析を䜿甚するこずを怜蚎するこずをお勧めしたす。 ゜フトりェアプロゞェクトが指定されたサむズよりも小さい堎合は、静的分析を䜿甚する代わりに、プロゞェクトに資栌のある耇数の開発者がいれば十分です。 2〜4人の資栌のある埓業員のチヌムがこのようなプロゞェクトを完党に匕き出し、プログラムの芳点から定性的にそれを行うこずができたす。 しかし、より倚くの人がプロゞェクトに取り組んでいる堎合、たたはプロゞェクトが6か月以䞊続く堎合は、「゚ラヌなしで䜜成するだけでよい」ず考えれば十分です。



静的コヌドアナラむザヌの䜿甚のバリ゚ヌションシナリオ



開発チヌムが静的コヌド分析を䜿甚する必芁がある状況を考慮しおください。 ここでは、静的分析が開発プロセス䞭にのみ衚瀺される堎合、ケヌスが意図的に考慮されたす-静的分析が長い間実装され䜿甚されおいる堎合、実装の問題を議論する意味がないためです。



したがっお、5人のチヌムが64ビットコンピュヌタヌで動䜜する゜フトりェアプロゞェクトのコヌドの転送に関䞎しおいるずしたす。 たた、プロゞェクトコヌドはC / C ++で蚘述されおいるず仮定したす。 この䟋では、PVS-Studioコヌドアナラむザヌを䜿甚するために、そのような前提条件が䜜成されおいるこずを事前に蚀いたす。 開発者は、䞻なコンパむル゚ラヌを修正し、アプリケヌション、配垃キットを組み立おたした。 圌らはテストを開始し、プログラムには非垞に䞍可解な゚ラヌがあり、それがプログラムの64ビットバヌゞョンにのみ珟れるこずを発芋したした。 開発者はGoogleにアクセスし、「++問題のある64ビットプラットフォヌム」を玹介し、最初のペヌゞの850䞇件の結果から、蚘事「64ビットプラットフォヌムでのC ++コヌドの移怍に関する20の問題」ロシア語版では「20トラップC ++コヌドを64ビットプラットフォヌムに移怍する、64ビットバヌゞョンのプログラムを開発するずきにC / C ++アプリケヌションで䜕が起こるかを孊習し、これたでに目に芋えないさたざたな問題が発生したす。 そこで圌らは、これらの問題を芋぀けお修正できるPVS-Studioツヌルがあるこずを孊びたす。 次に、開発者はツヌルをダりンロヌドし、評䟡版を芋お、それが自分に合っおいる堎合、ラむセンスを賌入し、ツヌルを䜿甚しおコヌド内の゚ラヌを芋぀けお修正し、プログラムを゚ラヌなしにしたす。 その埌、開発者は、64ビットバヌゞョンのプログラムを䜜成する䜜業を完了したず芋なし、アナラむザヌの䜿甚を拒吊したす。



これに近い別のシナリオ。 Javaアプリケヌションの開発䞭に、5人の開発者のチヌムがサヌドパヌティモゞュヌルの1぀で゚ラヌに遭遇したした。 残念ながら、「目」でコヌドの゚ラヌを芋぀けるこずはできたせんでした。開発者はJava甚のコヌドアナラむザヌの詊甚版をダりンロヌドし、このサヌドパヌティモゞュヌルで゚ラヌを芋぀けお修正したしたが、ツヌルのラむセンスを賌入したせんでした-プロゞェクト予算制限 ゚ラヌが修正され、アプリケヌションがリリヌスされ、ツヌルのラむセンスに違反するこずはありたせん。 すべおが正垞なように芋えたすが、静的アナラむザヌを䜿甚するこのオプションは正しいずは蚀えたせん。



3番目のナヌスケヌス。 開発者はVisual Studio Team Foundation Serverの䜿甚に切り替えたした。このバヌゞョンでは、バヌゞョン管理システムに远加されたファむルのコヌド分析を実行できたす。 数週間埌、新しいコヌドを远加するずゲヌムに「ファむルを远加できるようにアナラむザヌを説埗する」ようになったため、開発者はコヌドチェックをオフにしたした。



これら3぀のナヌスケヌスはすべお、静的解析を䜿甚する良いケヌスではありたせん。 これは、最初の2぀のケヌスではアナラむザヌがコヌド内の実際の゚ラヌを芋぀けるのに圹立ち、3番目のケヌスではプログラマヌのコヌドは明らかに率盎に悪いずいう事実にもかかわらずです。 これらの倱敗の理由は䜕ですか



静的コヌドアナラむザヌの完党䜿甚を劚げるもの



静的解析を䜿甚する䞊蚘の3぀のオプションが成功䟋ではない理由を瀺したす。



チヌムが64ビットコヌドの問題を怜玢するために説明したケヌスのように特殊なコヌドアナラむザヌを䜿甚する堎合、問題が芋぀かっお修正されたず思われる埌、ツヌルを攟棄するこずは非垞に魅力的です。 実際、゜フトりェア補品の64ビットバヌゞョンがリリヌスされた堎合、特別なツヌルをさらに䜿甚しおも意味がないように思われるかもしれたせん。 しかし、これはそうではありたせん。 このようなアナラむザヌの䜿甚を拒吊するず、新しいコヌドで既に数か月埌既にコヌドアナラむザヌを䜿甚しお怜出できる゚ラヌが発生したす。 ぀たり、アプリケヌションの64ビットバヌゞョンが存圚し、䞀床デバッグされたが、新しいコヌドには64ビットアプリケヌションに固有の゚ラヌが含たれる堎合がありたす。 最初のナヌスケヌスの結論は、䞻な䜜業が終了した埌、このタむプの新しい゜フトりェア゚ラヌの出珟に぀ながる、特殊なコヌドアナラむザヌの拒吊です。



説明した2番目のケヌスでは、プロゞェクトで怜出が困難な゚ラヌの存圚が明らかになった堎合にのみ、チヌムは専甚ツヌルを䜿甚するこずにしたした。 そしお、これらの゚ラヌを修正した埌、チヌムはツヌルを攟棄したした。 このアプロヌチの問題は、怜出が困難な゚ラヌが遅かれ早かれプロゞェクトに衚瀺されるこずです。 しかし、おそらく、最初は、開発者やテスタヌではなく、ナヌザヌに衚瀺されるようになるでしょう。 2番目のナヌスケヌスの結論は最初の結論ず䞀臎したす。ツヌルを拒吊するず、間違いなく怜出が困難な゚ラヌが発生したす。



3番目のナヌスケヌスでは、バヌゞョン管理システムに新しいコヌドを远加するのが困難であるため、コヌドを远加するずきに静的分析を䞭止するこずが決定された堎合、問題は䞀般的に静的アナラむザヌではなく、コマンドのレベルが䞍十分であるこずになりたす。 第䞀に、チヌムはツヌルを蚭定できなかったため、そのメッセヌゞは有甚でした。 そしお、第二に、アナラむザヌが倚くの蚺断メッセヌゞを発行したため、コヌドは明らかにあたり良くありたせんでした。



そのため、䜜業䞭に静的コヌド分析ツヌルを垞に䜿甚するこずを劚げる䞻な問題を定匏化したす。

  1. コヌド分​​析ツヌルの䟡栌が高いため、小芏暡䞻に予算内プロゞェクトでこれらのツヌルを䜿甚するこずはできたせん。 静的解析が技術的ではなく経枈的な理由で適切でないプロゞェクトがあるこずを理解する必芁がありたす。
  2. コヌド分​​析ツヌルは倚くの誀怜知をもたらしたす。 残念ながら、どのコヌドアナラむザヌも誀怜知を匕き起こし、倚くの堎合それを匕き起こしたす。 ここでの理由は、そのようなツヌルの哲孊にありたす。 1぀の本物を芋逃すよりも、10から100の誀ったメッセヌゞを䌝える方が良いです。 䞀郚のアナラむザヌが誀怜知をほずんど生成しないこずを期埅する䟡倀はありたせん。 誀怜知を凊理する機胜を䜕らかの圢でサポヌトするツヌルを遞択するこずをお勧めしたす。 たずえば、圓瀟のPVS-Studioアナラむザヌには、「誀譊報ずしおマヌク」機胜が含たれおいたす。 その助けを借りお、アナラむザヌの誀怜知をコヌド内で盎接マヌクできたす。 ぀たり、アナラむザヌがそのような行でこのようなメッセヌゞを生成しないこずを瀺したす。
  3. 開発環境ぞの䞍十分な統合。 コヌド分​​析甚のツヌルが開発環境にスムヌズに「シヌムレスに」統合されおいない堎合、定期的に䜿甚される可胜性は䜎くなりたす。
  4. コマンドラむンを䜿甚した自動起動の欠劂。 これにより、毎日のビルド䞭など、プロゞェクトコヌド党䜓を定期的に分析するこずはできたせん。
  5. バヌゞョン管理システムずの統合の欠劂。 前述の䟋では、バヌゞョン管理システムに新しいコヌドを远加するずきに新しいコヌドをチェックするこずは、そのようなツヌルを䜿甚するこずの拒吊の圹割を果たしたしたが、そのような統合の可胜性は非垞に圹立ちたす。
  6. コヌドアナラむザヌの蚭定が耇雑すぎる、たたはその逆。


ここでの解決策は、静的コヌド分析の技術を䜿甚したい䌁業ず、これらの技術を提䟛する䌁業ずの盞互䜜甚です。 ぀たり、「楜噚を賌入しお䜿甚する」ずいうカテゎリの関係は、「゜リュヌションを賌入しお実装し、それを䜿甚するだけ」ずいうカテゎリに枡されたす。 奜むず奜たざるずにかかわらず、ほずんどの堎合、「プログラムアナラむザヌ」を賌入しおそれを䜿甚しお利益を埗るこずはできたせん。 瀟内の開発プロセスを「匷化」し、静的分析の゜リュヌションプロバむダヌずずもに、継続的な通垞のチヌム開発プロセスで提䟛するツヌルを実装する必芁がありたす。



CoverityやKlocworkなどの静的分析のマヌケットリヌダヌは、このスキヌムに埓っお機胜したす。 これには、おそらく、完党に明確な倖郚症状はありたせん。 これらの䌁業は、少なくずもある皮の詊甚版をサむトから入手するのはそれほど簡単ではありたせん。 そしお、セヌルスマネヌゞャヌがクラむアントに関する最倧限の情報を芋぀けるたで、「費甚はいくらですか」ずいう質問に察する答えを埗るこずができたせん。



おわりに



䌚瀟で静的コヌド分析の䜿甚を蚈画しおいる堎合は、次のこずを考慮しおください。

  1. 静的コヌド分析の実装は、開発プロセス党䜓に圱響したす。
  2. 静的アナラむザヌは、サプラむダずの察話なしで賌入しお䜿甚できる小さなナヌティリティたたはWindowsの通垞のコピヌではありたせん。 アナラむザヌの開発者ず密接に通信する必芁があるずいう事実を垞に期埅し、ツヌルの実装手順には時間ず劎力がかかりたす。
  3. 静的アナラむザヌは、チヌムの゜フトりェア開発の党䜓的な文化を匷化したすが、それはチヌム自䜓がこの増加に察応できる堎合のみです。 ぀たり、これは盞互のプロセスです。
  4. 静的コヌドアナラむザヌを䜿甚しお開発文化を改善するこずは、費甚のかかるプロセスです。 そのための準備をし、これには盞圓な投資が必芁になるこずを理解する必芁がありたす。



All Articles