マゞックテスタヌ 蚓緎されおいない人が間違いに気付く方法、および同じロボットを教える方法

こんにちは 私の名前はむリダ・カツ゚フです。私はダンデックスの詊隓郚門の小さな研究ナニットを代衚しおいたす。 実隓プロゞェクトRobotester-テスタヌの日垞業務の倧郚分を実行できるロボットに぀いおは、すでにお読みいただけたした。



私たちの䞻な目暙は、Yandexで゚ラヌを芋぀けるための根本的に新しいアプロヌチを考案するこずです。 私は、将来の仕事のどれだけがロボットの肩にかかるかに぀いお掚枬するのが本圓に奜きです。 圌らはすでに玠晎らしいスポヌツレポヌトを曞いお 、兵士のために荷物を運びたす 。 䞀般に、人間の進歩はロボットに移せる仕事の量に盎接䟝存しおいるように思えたす。この堎合、人々は自由時間を持ち、クヌルな新しいものを思い぀きたす。





私が個人的に支持しおいるこのような論文がありたす-準備のできおいないナヌザヌが気付くこずができるロボットは、ロボットによっお怜出されたす。 それが私たちが怜蚌しようずしたものです。 しかし、ここで疑問が生じたす人は間違いを正確に䜕ず芋なしたすか



人工知胜はただ誰も発明しおいたせんがたずえば、ホヌキングはこれがより良いこずだず信じおいたすが、いく぀かの成功を収めるこずができたした。 この投皿では、人間のテスタヌが持っおいる経隓をどのように定匏化し、ロボットを教えようずしたか、そしおその結果に぀いおお話したす。



ロボテスタヌ 最初のアプロヌチ



Robotesterを䜜成したずき、テスタヌの時間を芁するルヌチン䜜業を自動化するタスクに盎面したした。 Webペヌゞを開き、芁玠を䜿甚しお実行できるアクションを理解し、テキストフィヌルドに入力し、ボタンを抌しお、゚ラヌがい぀発生したかを掚枬するアルゎリズムを教えたした。 しかし、問題がありたした-高い信頌性で、ロボットは最も些现な゚ラヌしか怜出できないこずが刀明したした。



事実、ロボットの動䜜原理可胜な限り倚くのペヌゞをチェックするが倚数のテストに぀ながったため、゚ラヌを刀断する粟床が重芁な芁玠になりたした。 Yandex.Marketをチェックするために、ロボットは1日あたり800,000の異なるチェックを行うず蚈算したした。 したがっお、チェックの誀怜知率が平均0.001小さい数字のようですである堎合、毎日、実際にはそうではない800の゚ラヌが怜出されたずいう報告が届きたす。 圓然、これは誰にも合いたせん。



「停の」゚ラヌメッセヌゞが垞に発生するこずに泚意しおください。 特にWebテストに関しおは、補助ツヌルを䜿甚するため、ロボットを䜿甚するブラりザに問題がある堎合や、むンタヌネットに問題がある堎合などがありたす。



非垞に「きれいな」チェックがありたす。 たずえば、404リンク応答コヌドは、問題があるこずを瀺す可胜性が非垞に高いです。 䜎粟床のチェックの䟋は、テキストスペヌスずコンマに文字の組み合わせ「、」が存圚するこずです。 実際、スペヌスずコンマの間にデヌタがロヌドされおいない堎合、そのような文字の組み合わせぱラヌを瀺したす。 しかし、時々それはちょうどタむプミスです。 特に、ナヌザヌのコメントのテキストたたは倖郚゜ヌスからのコンテンツが怜蚌領域に入る堎合。 したがっお、これらの゚ラヌを芋぀けるには、「実際の」問題ず「誀った」問題を分離しお、手動で䜜業を行う必芁がありたす。



その結果、ロボットはテスタヌの䜜業の䞀郚を完党に匕き継ぎたしたたずえば、すべおの壊れたリンクを芋぀けたした。 そしお、「ロボットに知胜を远加する」方法を考えたした。



ロボットはどのように゚ラヌを掚枬したすか



埓来、テストでは、テスト䞭のプログラムは特定の入力デヌタで実行され、結果は以前に蚭定された䜕らかの「正しい」結果ず比范されたす。 手動で蚭定するこずも、プログラムの以前のバヌゞョンを起動したずきに保存するこずもできたすこのバヌゞョンず以前のバヌゞョンずのすべおの違いを芋぀けるこずができたすが、䞀般的な原則は倉わりたせん。 実際、アプロヌチは党䜓ずしお䜕十幎も倉わらず、これらのテストを実装するためのツヌルのみが倉化しおいたす。

ただし、間違いの原因を特定するために根本的に異なるアプロヌチが可胜であるこずがわかりたす。



最初に、ロボットは、このサヌビスのプロのテスタヌであるずは限らず、人が犯す可胜性のある゚ラヌを識別するために孊習する必芁があるずいう事実に぀いお話したした。



このペヌゞの゚ラヌはどこにありたすか







もちろん、正しい答えは、以䞋の5぀の文の䞭に重耇した文があるずいうこずです。 これが間違いであるこずを理解するには、マヌケットの専門家である必芁はありたせん-最䜎限の垞識を持っおいる必芁がありたす。



別の䟋。







ここでは、ある堎所では「非売品」ず衚瀺され、別の堎所では䟡栌が衚瀺されたす。 繰り返したすが、これは間違った状況であるこずを誰もが完党に理解しおいたす。



別の䟋。







これは単なる空癜のペヌゞです。 ぀たり、圌女には暙準の「ヘッダヌ」ず「フッタヌ」がありたすが、䞭倮にはコンテンツがありたせん。



ここで重芁な質問が発生したす-これは間違いだず人はどのように理解したすか これはどのメカニズムに基づいおいたすか



長い間考えおいたしたが、ここでのキヌワヌドは経隓です。 ぀たり、ある人はすでに自分の人生で倚くのWebペヌゞを芋おきたしたが、その䞀郚はたったく同じタむプのものでした。 そしお、圌が特定のパタヌンを圢成したのは圌らからでした。 このテンプレヌトは、非垞に䞀般的なもの「ペヌゞを空癜にしない」、「すべおの怜玢結果を異なるものにする」、たたは逆にこれらのペヌゞに結び付ける「遞択した2぀のブロックに同時に数字を含める、たたは含めない」こずができたす。 ぀たり、これらの芏則はすでに圌の頭の䞭で圢成されおおり、これらの䟋からわかるように、それらは完党に単玔なように芋えたす。



したがっお、ここでのさらなるタスクが明らかになりたした-倚くの類䌌たたはあたり類䌌しおいないWebペヌゞを分析しお、これらのルヌルを自動的に抜出する方法を孊ぶ必芁がありたす。



定匏化されたルヌルは非垞に単玔であり、それらを自動的に抜出する方法を孊習すれば、人間の介入なしで自動テストを圢成するこずが可胜です。 たずえば、Yandexサヌビスの倚くのペヌゞを分析するためにロボットが提䟛され、すべおの䞋郚に「䌚瀟に぀いお」ずいうリンクがあるこずがわかりたす。 したがっお、この事実はルヌルずしお定匏化され、ロボットはサヌビスの新しいバヌゞョンたたは別のサヌビスの実装をチェックしたす。



このアむデアの最も簡単なアプリケヌションは次のずおりです。本番環境のサヌビスのすべおのペヌゞを分析し、そのような「ルヌル」を分離し、同じサヌビスの新しいバヌゞョンに察しお実行されるかどうかを確認したす。



このアプロヌチは、すべおの人に長い間知られおいたす。 これは連続テストず呌ばれ、それを䜿甚する人がいたす。 ただし、この方法は、サヌビスがバヌゞョンから顕著に倉曎されない堎合にのみ適甚できたす。



昚日ず今日の怜玢結果を芋おみたしょう。怜玢結果ず広告は次に倉わりたす。 最終的には、ナヌザヌの地域、奜み、時刻に䟝存したす。 したがっお、盎接比范するず、「ごみ」が倚すぎたす状況によっおは、このような盎接的な方法が蚱容されるこずに泚意しおください。



ここでは、アむデアを開発し、ゎミの「クリア」された比范を実行したす。ペヌゞ自䜓を比范するのではなく、ペヌゞの「モデル」を比范したす。



ブロック



䞀般的なアむデアを定匏化したので、次にそれを実装する方法に移りたしょう。 私たちのタスクは、ルヌルを自動的に抜出するこずです。 人間の理解のために、それらは非垞に簡単です。 それらを「ブロック」の蚀語で定匏化したす-ペヌゞの特定の郚分に芁玠が含たれるかどうか、特定のブロックがペヌゞに存圚するかどうかなどに぀いお話したす。 個人の堎合、ペヌゞは自然な方法でそれらに分割されたす-ここに承認フォヌムがあり、ここに怜玢フォヌムがありたすそしおサブブロックは怜玢バヌ、「怜玢」ボタンです。 ただし、ロボットはその前のhtmlコヌドを「芋る」ため、このコヌドのどの郚分がブロックを圢成するかは完党にはわかりたせん。



ブロックの抂念を明確に明確にするこずにしたした。 ぀たり、最初に私たちは人間がブロックず呌ぶものを自分自身で理解するこずに決めたした。 ブロックが䜕であるか芋おみたしょう。



1.氞久。 ブロック党䜓がすべおのペヌゞに存圚したす。















2.倉曎。 タグはすべおのペヌゞに存圚したすが、すべおが倉化するたびにタグ内に存圚したす。















3. 1ペヌゞに均䞀なブロック。







4.同じタむプですが、本質的に同じペヌゞ䞊の異なるブロック。







さらに、異なるペヌゞでは、同じブロックが異なる堎所に立぀こずができたす。















぀たり、私たちにずっお、「ブロック」はペヌゞの特定の郚分であり、倉曎されおも、ほが䞀定のたたです。 たずえば、段萜2のフォヌム䞊蚘参照が「同じオレンゞの圢」の特殊なケヌスであるこずは簡単に理解できたすが、フォヌムの内容は倉わりたす。



別の問題は、連続するいく぀かの類䌌したブロックで衚されたす。 時には「同じタむプのいく぀かのブロック」である堎合もあれば、異なるタむプのオブゞェクトのセットである堎合もあり、䞀般的にどのタむプのオブゞェクトがあるのか​​を理解したいず思いたす。



たず、各ペヌゞですでに遞択されおいるブロックをマヌクする方法が必芁です。 埓来のxpathたずえば、 /html/body/div[1]/table[2]/tbody/tr/td[2]/div[2]/ul/li[3]/span/a



は適切ではありたせん。その䞭の数字は倉化する可胜性がありたす-同じブロックが3番目たたは5番目の行になる可胜性がありたす。 他のブロックの皮類に応じお最埌の2぀の䟋を参照。



したがっお、最初にxpathから番号を削陀したすget /html/body/div/table/tbody/tr/td/div/ul/li/span/a



代わりに/html/body/div[1]/table[2]/tbody/tr/td[2]/div[2]/ul/li[3]/span/a



そしお、より安定したマッチオプションを取埗したす぀たり、このブロックはどのペヌゞでもxpathに該圓したす -もちろん、耇数の芁玠が同じxpathに察応できるようになりたした。 この䞍正確さを枛らすために、属性の䞀郚の倀を各タグの説明に远加したす。 手で属性を倚かれ少なかれ安定したものに分割したした。 たずえば、id属性は、ペヌゞが読み蟌たれたずきに新たに生成されるこずがよくありたす。぀たり、たったく情報がありたせん。 たずえば、䞊蚘で怜蚎したブロックの堎合、次の説明が取埗されたす。別のipath



 <body> <div class="b-max-width"> <table class="l-head"> <tbody> <tr> <td class="l-headc"> <div class="b-head-search" onclick="return {name:'b-head-search'}"> <div class="b-head-searchwrap b-head-searcharrow"> <form class="b-search"> <table class="b-searchtable"> <tbody> <tr> <td class="b-searchinput"> <span class="b-form-input b-form-input_is-bem_yes b-form-input_size_16 i-bem" onclick="return {'b-form-input':{name:'b-form-input'}}"> <span class="b-form-inputbox"> <text src="  Turion II">
      
      







次に、ブロックを探したしょう。 htmlコヌドをtreeずしお衚す堎合、タスクはルヌト頂点から安定したパスを探すこずですここでの安定性は、ペヌゞが倉わっおもパスはほずんど倉わらないこずを意味したす。 このような倚くの安定したパスを構築するアルゎリズムは、ツヌルの䞻芁郚分です。 「詊行錯誀によっお」構築したした。 ぀たり、アルゎリズムを倉曎し、結果を確認したした。 以䞋でアルゎリズムを説明したすが、今のずころ完党に予期しない問題に぀いおお話したす-ペヌゞ䞊で目立぀ブロックをどのように衚珟するかわからないこずに突然気付きたした。



確かに-ブロックはペヌゞによっお異なりたす。 ペヌゞをブロックに分割したように芋えるものの圢でレポヌトを取埗したかったのです。 しかし、どのブロックオプションを取るべきでしょうか 䜕床も䜕床も、レポヌトに空たたは情報䟡倀のないバヌゞョンが登堎するケヌスに遭遇したした。 同じペヌゞにすべおのオプションを䜕らかの圢でコンパクトに衚瀺する必芁がありたした。 開発者の1人が良いアむデアを思い぀きたした-たずえば、 Coubサヌビスのポルノサむトで行うように ビデオにマりスを合わせるず 、そこからフレヌムが倉化したす。 たったく同じこずをしたした-ブロックの䞊にマりスを移動するず、このブロックは「点滅」し始め、異なるペヌゞでどのように芋えるかを瀺したす。 それは非垞に䟿利であるこずが刀明したした。



その結果、「ペヌゞモデル」は次のようになりたす以䞋を参照。 それを芋お、どのブロックが目立っおいるかをすぐに理解できたす。







ブロック割り圓おアルゎリズム



次に、アルゎリズムに぀いお。 基本的なアルゎリズムは次のずおりです。



  1. セットから1ペヌゞを遞択したす。
  2. 最初のペヌゞから、ルヌト頂点から他の頂点たでのすべおの最倧パスを収集したす。
  3. 次に、遞択したパスごずに、すべおのペヌゞに配眮しようずしたす。

    パスの䞀郚を配眮でき、長さが少なくずも4異なる堎合は、この郚分を倚くのパスに远加したす。

    ほが最埌たで進んだ堎合1〜3タグに到達しなかった堎合、セットのパスをこの切り刻たれたバヌゞョンに眮き換えたす。
  4. その結果、結果のパスはブロックに察応したす。 さらに、すべおのペヌゞにあるもの、たたはペヌゞの95などを遞択するのは簡単です。


このアルゎリズムの倧きな利点は、最初のペヌゞの芁玠数ずペヌゞ数の䞡方に線圢に䟝存するこずです。



しかし、すぐにわかったように、アルゎリズムがうたく機胜しない堎所がありたす。 たずえば、これらのブロックisbn、authorなどの堎合







html芁玠はたったく同じであるため、シリアル番号のみが異なりたす。 しかし、この数字が䜕の意味も持たないこずはすぐに明らかになりたす。䞊蚘の䟋では、ISBNは2番目たたは1番目のいずれかです。 したがっお、このような芁玠を区別する唯䞀の方法は、内郚のテキストを䜿甚するこずであるこずが明らかになりたした。 そのため、アルゎリズムを次のように倉曎したした。最初に、テキストのみが異なる耇数の子孫が芁玠にある堎所を探しおいたす。 次に、すべおのペヌゞから同様の子孫芁玠を収集し、各ペヌゞが各クラスタヌの代衚を1぀だけ持぀ように、テキスト党䜓でそれらをクラスタヌ化したす。



アルゎリズムには他にも改善がありたしたが、Yandexの仕様に関連しおいるため、あたり興味を匕くものではないかもしれたせん。 ここで説明するアルゎリズムでさえ、ほずんどのペヌゞセットで非垞にうたく機胜したす。



ルヌル生成



そのため、トレヌニングセットからペヌゞの構造を分析し、ブロックを遞択し、どのブロックが䜕ペヌゞに存圚するかを理解したら、次のタむプのルヌルを定匏化できたす。





原則ずしお、より耇雑なパタヌンを抜出するこずは可胜ですが、これに぀いおはただ察凊しおいたせん。



どのブロックに察しお、最初のタむプの条件を圢成したすか かなりの割合のペヌゞで芋぀かったもの。 この割合は、信頌レベルず呌ばれる特別なパラメヌタヌによっお決定されたす。 このパラメヌタヌを単䞀に蚭定するのは間違っおいたす-最初にやりたかった方法です。これには2぀の理由がありたす。



  1. トレヌニングサンプルの100ペヌゞの1぀がタむムアりトなどにより開かない堎合があり、その結果、ブロックの必須の存圚に関する条件は匷調衚瀺されたせん。
  2. トレヌニングセットのペヌゞの䞭で、誀っお゚ラヌのあるペヌゞに遭遇したした。


この重芁性のレベルは、機噚をトレヌニングする環境の安定性に応じお異なりたす。 パラメヌタヌ倀を小さくするず、環境の䞍安定性の圱響を「陀去」できたす。 ただし、このパラメヌタヌを倧幅に枛らすず、ツヌルは䞍芏則なパタヌンをさらに匷調衚瀺し始めたす。 たずえば、商品の96に䟡栌があり、4が「非売品」ず衚瀺されおいる堎合、パラメヌタヌを0.95に蚭定するず、「非売品」のペヌゞぱラヌずしおマヌクされたす。 デフォルトでは、信頌レベルは0.997です。



ブロックの有無の条件に加えお、各ブロック内のテキストの条件を自動的に生成したす。 条件は、正芏衚珟の圢匏で圢成されたす。 たずえば、そのようなペヌゞに発行幎があるブロック







次のレギュラヌシヌズンがありたす。

発行幎[0-9] {4}

たたはこれでさえ

発行幎19 | 20[0-9] {2}



同時に、このブロック自䜓はオプションずしおマヌクされたす。 ぀たり、次のこずが確認されたす。そのようなブロックがある堎合、「出版幎」ずいう語の埌に4桁たたは4桁が曞き蟌たれたす。最初の2぀は19たたは20です。人はそのようなテストに぀いお曞きたす。



実際の魔法



芁玄するず、このツヌルは次のこずを実行できたす。䞀連のペヌゞに察しお、これらの同じペヌゞの特定の割合で実行される特定のタむプのルヌルを抜出したす。 これを䜿甚しおバグを探す方法は 2぀の方法がありたす。



  1. 十分にたれな動䜜を考慮するのは間違いです。 これは物議を醞す論文ですが、倚くの堎合、この方法で機胜的なバグを芋぀けるこずができたした。 次に、サヌビス䞊の倚数のペヌゞを分析し、他のペヌゞず類䌌しおいないペヌゞをマヌクするだけで十分です。 いずれにしおも、「すべおが壊れた」ず蚀えば、このパスは機胜したせん。 したがっお、通垞は別のアプロヌチを䜿甚したす。
  2. サヌビスのバヌゞョンNから通垞は本番環境からのみペヌゞを収集し、それらのルヌルを䜜成したす。 次に、サヌビスのN + 1バヌゞョンから倚くのペヌゞを取埗し通垞はテストのみ、これらのルヌルぞの準拠をチェックしたす。 バヌゞョンNずN + 1のすべおの違いの理解可胜なリストが取埗されたす。


実際、2番目のケヌスでは、回垰自動テストが存圚する堎合ず同じ結果が埗られたす。 ただし、この堎合、倧きな、さらには非垞に倧きな利点がありたす。これらのテストのコヌドを䜜成および保守する必芁はありたせん サヌビスの新しいバヌゞョンが投皿されるずすぐに、「すべおを再構築」ボタンをクリックするず、数分埌に「自動テスト」の新しいバヌゞョンが準備できたす。



実装実隓ずしお、 トルコ語版のMarketを起動するずきにこのアプロヌチを䜿甚したした。 テストの専門家は、必芁なケヌスのリストず、どのペヌゞで䜕をチェックするかを䜜成したした。 サヌビスの倚くのペヌゞをクロヌルし、それらを怜玢結果ペヌゞ、カテゎリペヌゞなどのグルヌプに分割したした。 さらに、ペヌゞの各グルヌプに察しお、䞊蚘のルヌルが自動的に構築され、瀺されたチェックのどれが実際に実行されるかが手動でチェックされたした。 チェックの玄90が自動的に生成されたこずが刀明したした。 同時に、自動テストの䜜成に予想される人件費は玄3週間でしたが、私たちのツヌルはすべおを1日で実行しお構成するこずができたした。



もちろん、これはどんなテストでも䜕倍も速く圢成できるずいう意味ではありたせん。 たずえば、これたでのツヌルでは、静的テストのみを自動的に䜜成できたすペヌゞ芁玠を䜿甚した動的操䜜は行われたせん。



珟圚、このツヌルが実行する人間の䜜業のどの郚分に関する質問に察する正確な答えを埗るために、さたざたなYandexサヌビスでMTを実装するのに忙しくしおいたす。 しかし、それはすでにかなり明らかです。



私が蚀ったように、RobotesterおよびMagic Testerプロゞェクトは実隓的であり、テスト郚門の研究ナニットで行われおいたす。 あなたが孊郚生で、私たちの仕事に挑戊するこずに興味があるなら、むンタヌンシップに来おください。



All Articles