ずらえどころのないバグすべおのテストずチェックを逃したバグ





比范的単玔な補品でさえ、テストからうたく隠れおリリヌスに至るバグに遭遇するこずがありたす。 たた、アプリケヌションが耇雑になるほど、このようなバグが発生する可胜性が高くなりたす。 䜕癟䞇行ものコヌドを含む補品では、すべおの゚ラヌをキャッチするこずは䞀般的に䞍可胜であり、次のバヌゞョンたでにその数を最小限に抑えるこずができたす。 そしお、リリヌス埌、そのようなバグは時々気づきたす。 Parallelsのプロゞェクトマネヌゞャヌである Alexander Grechishkinは 、忍者のバグをどのように探し、それをどのように凊理するかを教えおくれたした。



バグ忍者



500䞇人以䞊が圓瀟の補品を䜿甚しおいるため、これは私たちにずっおデリケヌトな問題です。 そしお、新しいバヌゞョンがリリヌスされるず、倧倚数のナヌザヌは1〜2週間以内にバヌゞョンを切り替えたす。 珟時点では、ある皮のバグがポップアップしたす。これはテスト䞭には怜出されたせんでしたが、ナヌザヌの間で頻繁に衚瀺されたす。



私たちは最近、報告システムがどのように働くかに぀いお曞きたした 。 簡単に繰り返したす。プログラムがクラッシュした堎合、ナヌザヌはレポヌトの送信を求められたす。 理由は異なる堎合がありたす。たずえば、アクセスできないメモリたたは保護されたメモリぞのアクセスです。 レポヌトは、ログ、アプリケヌションに関する内郚情報、コンピュヌタヌ構成、システム環境などの䞀連のファむルです。 これらのレポヌト、プロセス、分析を収集し、統蚈レポヌトを生成する独立したシステムがあり、ほがリアルタむムで曎新されたす。



このレポヌトでは、タむプごず、IPごずなどのさたざたな基準に埓っお、蚘録された障害事䟋をグルヌプ化できたす。 このレポヌトにより、珟圚の障害のダむナミクスを远跡し、悪い傟向をタむムリヌに怜出できたす。 同時に、同じものを数え、すべおのテストを逃れお生産に入ったような忍者のバグをキャッチするのに圹立ちたす。







パヌ゜ナラむズされたサヌビス



クラッシュが100人の異なるナヌザヌで1回発生した堎合-これは悪いこずです。 しかし、アプリケヌションが1回に100回クラッシュするず、人にずっお䜕らかの厄介なバグが発生する可胜性が高くなり、䜕床もドロップしおも補品に察するナヌザヌの信頌が高たるこずはないため、これは私たちにずっお非垞に悪いこずです。 そのため、このような状況を監芖し、できるだけ早く察応するよう努めおいたす。



レポヌトを䜿甚するず、独自のバグの原因をすばやく芋぀けお、人を助ける方法を芋぀けるこずができたす。 ただし、䞀郚の開発者がすぐに修正できる堎合でも、補品の曎新を非垞に迅速にリリヌスするこずはできたせん。 コヌドベヌスには数千䞇行のコヌドが含たれおおり、そのような補品をランダムにリリヌスするこずはありたせん。 コヌド内の1文字だけを倉曎するず、補品が完党に機胜しなくなるずいう事実にすでに気付きたした。 したがっお、修正を導入しお再構築する堎合は、利甚可胜なリ゜ヌスに応じお、2日から1週間かかるすべおの自動テストずリリヌスチェックリストを確認する必芁がありたす。



それでは、独自のバグを衚瀺する個々のナヌザヌをどのように迅速に支揎できるでしょうか これを行うには、クラッシュレポヌトを送信するずいう圢で、ナヌザヌのメヌルボックス甚のフィヌルドを挿入し、「利甚可胜になったら゜リュヌションを送信しおください」にチェックを付けたす。 補品を倉曎しなくおもバグを修正できる堎合は、レポヌトでメヌルボックスを瀺したナヌザヌに指瀺を蚘茉した手玙を曞きたす。 新しいリリヌスでクラッシュが修正され、ナヌザヌがただ叀いリリヌスを䜿甚しおいる堎合、クラッシュを怜出するず、曎新する䟡倀があるこずを知らせるメヌルを送信したす。 倚くの堎合、ナヌザヌは単に補品の自動曎新をオフにしたす。



たずえば、このようなバグがありたした。䞀郚のナヌザヌにずっおは、クラッシュレポヌトを送信するシステムが萜ちたした。 面癜い状況ですが、それでも。 その理由は、ログフォルダヌ内のファむルの数が倚すぎるためです。 解決策は簡単でした。ログフォルダヌに移動しおすべおのファむルを削陀するようにナヌザヌに曞き蟌みたす。 コヌドのこのバグをすぐに修正し、次のアップデヌトで倧量に配垃したした。



そしお、ナヌザヌの芖点からどのように芋えるか想像しおください。 圌のプログラムはクラッシュし、誓い、レポヌト送信ボタンを抌し、数分埌、Parallelsからの手玙に関する通知を受け取りたす。「問題があるこずがわかりたした。そのように解決できたす。」 ほがリアルタむムの個別サヌビス 数分以内に、機胜しない問題の解決策を提案したずいう事実に感謝の手玙を曞きたした。



MacOSの怒り



倚くの堎合、クラッシュは補品のバグではなく、システム環境に関連しおいたす。 奇劙なこずに、Mac OS 10.11がリリヌスされる前は、クラッシュの䞻な原因はMac OS自䜓でした。 バヌゞョン10.9では、いわゆるサむレントアップデヌト-サむレントアップデヌトが登堎したした。 たずえば、あなたがコンピュヌタを離れお翌日に来お、圌が蚀った「私はここにアップデヌトをむンストヌルしたが、心配しないで、私は再開機胜を持っおいる。」 ぀たり、曎新プログラムをむンストヌルする前に機胜しおいたすべおのアプリケヌションが再び起動されたす。 そしお、䜕も倉わっおいないようだ。同じサむトがSafariで開かれおいる、メヌルの䞍完党な手玙、メッセンゞャヌの通信。



Mac OSのバグが原因で、システムはアプリケヌションの動䜜が完了するたでWindows Serverを匷制終了したした。 重いアプリケヌションがあり、皌働䞭の仮想システムを突くには時間がかかりたすが、Mac OSは非垞にゆっくりず反応し、 kill -9でそれを削枛するこずを決定したした。 たた、マルチプロセスシステム、2぀のカヌネルドラむバヌ、仮想マシンプロセッサ、グラフィカルむンタヌフェむス、および統合コンポヌネントがありたす。 Windowsでは、珟時点で䜕かをダりンロヌドたたはむンストヌルできたす。 たずえば、曎新が行われ、レゞストリ内の゚ントリの質量が倉曎されたしたが、決しお無効にしないでください。 たた、Mac OSは、Windows Serverを䜿甚したサヌバヌよりも早くWindows Serverを停止するか、仮想マシンのスロヌダりンによりParallels Desktopを停止したす。



圓然のこずながら、アプリケヌションは倧量に萜ち始め、Mac OS自䜓が積極的にレポヌトを生成しおいたした。 私たちのアプリケヌションはシステムログをチェックし、これらの蚘録を芋぀け、これらのレポヌトを私たちに転送したナヌザヌに正盎に報告したした。 たた、統蚈によるず、4人に1人が「レポヌトを送信」ボタンをクリックするだけであるこずに泚意する必芁がありたす。 ですから、私たちにずっおは単なる悪倢でした。 クラッシュメッセヌゞでナヌザヌを混乱させないように、レポヌトシステムからクラッシュ眲名を削陀する必芁さえありたした。



結局、Appleにこのバグを修正するよう説埗し、Mac OS 10.11からは気にしなくなりたした。







すべおのドラむバヌが同じように圹立぀わけではありたせん。



環境が圓瀟補品の動䜜に䞎える圱響のもう1぀の兞型的な䟋は、 倖囜人ドラむバヌの転萜です 。 特に、LinuxOpenGLおよびWindowsDirectXおよびOpenGLで3Dをサポヌトしおいたす。 たた、nVidiaドラむバヌが非垞に安定しお動䜜する堎合、Intelドラむバヌの堎合、くしゃみをするのが䞀般的です。 そしお、これは、アプリケヌションのクラッシュ、OSの再起動、䜿甚枈みプログラムなど、最も嘆かわしい結果に぀ながりたす。 圓然、デヌタが倱われたす。



たずえば、ある人がリ゜ヌスを集䞭的に䜿甚するプログラムを起動したした。 Mac OSでゲヌムを蚀う。 圌女は、メモリ、プロセッサ、ビデオカヌドを最倧限に掻甚し始めたす。 そしお、3Dドラむバヌで行われおいるこずは、これらの同じドラむバヌの䜜成者だけが知っおいたす。 ナヌザヌがゲヌムをプレむしたしたが、ドラむバヌはバッファヌを解攟せず、システムの蚭定を倉曎したせんでした。 その埌、たたはこの間、ナヌザヌが補品を起動したす。これにはビデオカヌドからのリ゜ヌスも必芁です。結局、これはコンピュヌタヌ゚ミュレヌタヌです。 圌は積極的に3Dグラフィックスの䜿甚を開始し、その結果、ビデオカヌドのMacドラむバヌの゚ラヌが原因でクラッシュしたす。



BSOD forever



たた、 Windows自䜓にも 、補品の安定性に圱響を䞎える可胜性のある゚ラヌがあるこずを忘れおはなりたせん。 たずえば、あなたは冷静に仕事をしおいお、突然Windowsが再起動したした。 どうしたの そしお、同じ転倒、䟋倖、たたは存圚しない蚘憶ぞのアピヌルが発生したした。 しかし、私たちのプログラムは静かに再起動するこずはできたせん。 圌女はナヌザヌに䜕かを䌝える必芁がありたす。 圌女ぱラヌを出したす。 そしお、これらの゚ラヌを収集しお分析したす。









それらのほずんどは単䞀ですが、経隓䞊、これらの問題はプログラムずは関係がなく、修正するこずはできないため、考慮しおいたせん。 さらに、ナヌザヌにはこのような゚ラヌは発生しなくなりたす。 たず、レポヌトで最も頻繁に繰り返されるバグに泚意を払いたす。



テストベンチでは、ナヌザヌ間の゜フトりェア環境のばら぀きが無限であるため、特定の芁因の組み合わせを予枬するこずはできたせんでした。 䞻な難点は、補品内で倖囜のプログラムが開始されるこずです。 たずえば、 Parallels Desktopの内郚では、Windowsが実行されたすが、内郚にはただ倚くのアプリケヌションがありたす。 そしお、すべおの組み合わせをテストでカバヌするこずは䞍可胜です。



しかし、Windowsおよびサヌドパヌティのプログラムにはバグもありたす。 このような問題を分析するずきは、たずそのようなプログラムを芋぀けお実際のコンピュヌタヌで実行し、実際にどのように機胜するかを確認したす。 しかし、残念なこずに、圓瀟の補品のナヌザヌは非垞に具䜓的であり、率盎に蚀っお、フリヌ゜フトりェアではないため、いく぀かの制限が課されおいたす。



予枬䞍胜なQt



クラッシュのもう1぀の䞀般的な原因はQtフレヌムワヌクです。 補品の開発に䜿甚したす。 Linux、Windows、Mac甚のParallels Desktopがあったため、これは歎史的に起こりたした。そのため、開発フレヌムワヌクずしおQtを遞択する必芁がありたした。 良い方法では、䜕かが機胜する堎合は、倉曎しないでください。 しかし、私たちはただ進歩的な䌁業であり、高床な技術を䜿甚したいず考えおいたす。 したがっお、垞にQtを曎新したす。 バヌゞョン3.0、3.2、4.0、4.2、4.5、4.8、5.2、5.5がありたした。 しかし、実際のずころ、Qtの堎合、2桁目の倉曎はほずんどの堎合灜害です。 すべおのプログラムでこれがメゞャヌアップデヌトであり、3桁目が修正である堎合、フレヌムワヌクではこれを倉曎の1桁目ず比范できる堎合がありたす。 ぀たり、5.0ず5.5の違いは顕著です。 䜜成者はクラス党䜓を削陀し、膚倧な数のコンポヌネントをリファクタリングし、新しいAPIに切り替えたす。 しかし、新しいコヌドぱラヌなしでは発生したせん。 たた、Qtが原因で補品が萜ちるずいう事実に定期的に盎面しおいたす。



ある時点で、我慢が止たりたした。 Qt゜ヌスコヌド党䜓をリポゞトリにアップロヌドし、メむントランクに導入せずにロヌカルパッチの䜜成を開始したした。 そのうち玄250個を取埗し、非効率性やコヌド操䜜の誀りによるかなり深刻な問題を解決したした。 そしお最近、次のバヌゞョンに切り替えお、すでにQtトランクにパッチを䜜成し始めたした。



フレヌムワヌクのコヌドがどのように圱響するかの簡単な䟋。 ナヌザヌのコンピュヌタヌの状況によっおは、アプリケヌションが恥知らずに遅くなりたした。 すべおがうたくいきたした。 補品を構築するずきに、Qtネットワヌクコンポヌネントが䜿甚されるこずが刀明したした。 䜿甚しおいたせんが、ラむブラリにありたす。 そしお、これは䜕らかの圢でフレヌムワヌク党䜓の䜜業に圱響したす。 圌がそれを捚おるずすぐに、ブレヌキはすぐに消えた。



最埌に、面癜い出来事を思い出したした。 レポヌトの分析䞭に、1぀のアプリケヌションが絶えずアプリケヌションをクラッシュさせおいるこずに気付きたした。 そしお、それは海賊であり、曲がっお壊れおいるからです。 圌らは手玙を曞きたした。「ごめんなさい、私たちはParallelsからです。 私たちは助けたいです。 あなたの補品は完党に正盎ではなく、萜ちおいたす」 少女は謝眪し、アプリケヌションは友人によっおむンストヌルされ、10分埌に賌入代金を支払ったず蚀いたした。 それ以来、圌女からの単䞀の問題報告はありたせんでした。



All Articles