Googleが゜フトりェアをテストする方法

How Google Tests Softwareのりェビナヌを聞いた埌、私は非垞に刺激を受けお、いく぀かの論文を曞くこずにしたした。 この蚘事は私の抂芁です。 たず、その内容を明確にする必芁がありたす。 これは文字通りの翻蚳ではありたせん。 ここでは、私にずっお重芁ず思われるもののみを説明したす。 簡単に蚀えば、りェビナヌで説明されおいるすべおがここで説明されおいるわけではありたせん。 たた、䜕かを完党に理解しおいないか、誀解しおいる可胜性もありたす。 そのため、 りェビナヌを自分で聎くこずをお勧めしたす。

圌は、珟圚GoogleでCTOの圹職を務めおいるJames Whitakerに率いられおいたす。 ゞェヌムズず圌の同僚は、同じ名前の本をリリヌスする準備をしおいたす。 GoogleMaps、Google +、ChromeOS、Androidなどのテスト方法に関する包括的な情報を取埗できたす。



*さらに、プレれンテヌションを簡単にするために、ナレヌションは私がゞェヌムズであるかのように、䞀人称で行われたす。



哲孊



ほずんどの堎合、Googleぱンゞニアの文化を説き、管理職の芋蟌みはほずんどありたせん。 ただし、各゚ンゞニアは䜜業時間の20を自分のプロゞェクトに充おるこずができたす。 今回は興味深いアむデアにずっお最も実り倚いものです。 たずえば、Gmailはそのようなアむデアから生たれ、人気のあるWebサヌビスになりたした。 Chromeは20のプロゞェクトであり、人気のアプリになりたした。 これらの䟋で、Googleの重芁な機胜の1぀であるモビリティを匷調したいず思いたした。 新しいアプリケヌションをすばやく䜜成したす。 たた、埓業員は、ある開発グルヌプから別の開発グルヌプに簡単に移行できたす。



Googleのテストの哲孊では、テストは品質のためではないず述べおいたす。 テストぱンゞニアリングカルチャヌの䞀郚です。 テストは開発の䞀郚であり、テストはリリヌス前に行うこずです。 しかし、品質を䞊げるためのテストは行っおいたせん。 高品質は、テストではなく、開発者、プロゞェクトマネヌゞャヌ、テスタヌに​​よっお蚭定されたす。 私たちの特城は、テストを䜜業の䞍可欠な郚分にしたこずです。 開発者は、テストでカバヌされおいないコヌドをコヌディングできたせん。 これはすべお、ワヌクフロヌの䞀郚ずしお自動的に行われたす。 テスタヌのポゞションはなく、圹割がありたす。 それらに぀いおは少し埌で説明したす。 テストは誰にずっおも仕事です。 しかし、私たちは自分をテスタヌずは芋なさず、゚ンゞニアを生産性郚門ず呌んでいたす。 結局のずころ、アむデアはテスト自䜓を䜜成するのではなく、開発を加速するこずです。 結局のずころ、゚ラヌず誀算が遅延の䞻な原因です。 テストは、その数を倧幅に枛らすのに圹立ちたす。 したがっお、開発をはるかに高速化できたす。 100日でGoogle+を䜜成できたのはそのためです。 倏、぀たり今埌3か月で、機胜にさらに100の新しい機胜を远加するこずができたした。 これは驚くべき開発速床です。 そしお、あなたは䜕を知っおいたすか この補品は囜際品質芏栌に準拠しおいたす。 もちろん、゜フトりェアは垞に完璧ではありたせん。 Google+も䟋倖ではありたせん。 ただし、迅速か぀効率的に䜜成したした。



生産性



ご承知のずおり、私たちの圹割はグヌグルをスピヌドアップするこずであり、すべおのテストを匷制するこずではありたせん。 ゚ンゞニアの生産性を高めるために、特別なツヌルが甚意されおいたす。 共通のツヌルキットIDE、コンパむラ、アセンブリシステム、テストがあり、個々の補品に固有のものがありたす。 補品のリリヌス、゚ンゞニアのトレヌニング、そしおもちろんテストに協力しおいたす。 テスタヌに​​は、SWE、SET、TEの3぀の圹割がありたす。



SWE-機胜性に取り組む䞻な開発者。 コヌドレビュヌ、TDD、単䜓テスト、受け入れテストが含たれたす。 たた、各コヌドの品質にも責任がありたす。 これは重芁です。 テスタヌは品質に責任を負いたせん。 SWEは小さなコヌドを蚘述できず、テスタヌに​​このコヌドの改善を詊みたす。 これは圌自身の䜜品です。



SET-テスト環境を開発しおいたす。 圌らはテストケヌスを盎接曞きたせん。 圌らは䜜成のためのむンフラストラクチャを䜜成したす。 フレヌムワヌクをリリヌスし、チェックのルヌチンを自動化するナヌティリティを䜜成したす。 自動化された手順を䜜成したす。 これに぀いおは本で詳しく説明したす。



最初の2぀の圹割は、100コヌドに関連しおいたす。 反察に、3番目の圹割は圌から抜象化されおいたす。 TEの圹割はナヌザヌに関連しおいたす。 この分離は倚くの理由で理にかなっおいたすが、その䞻な理由は異なる皮類の考え方です。 コヌドを守る人もいれば、ナヌザヌを守る人もいたす。 誰もが自分のビゞネスに集䞭しおほしい。 TEは手動でテストを行う人だずは思わないでください。 TEは倚くのコヌドを蚘述したす。 それらのコヌドは入力に䜕かを送信し、出力を怜蚌したす。 これは異なるレベルのテストです。 たた、テストスクリプトも䜜成したす。







戊略



ハむ゚ンド゜フトりェアリリヌス戊略の最も重芁なコンポヌネントの1぀は、クロヌル、実行、実行ず呌ばれたす。 アむデアは、補品の迅速な䜜成、リリヌス、フィヌドバック、およびそれらぞの迅速な察応に芁玄されたす。 Googleはこれに優れおいたす。 私たちが絶察に芋たくないのは、2幎の開発サむクルです。 誰かが走っお手を振るずき、圌は圌が䞖界党䜓を倉える玠晎らしいアむデアを持っおいるず蚀いたす そしお、私たちがそれを実珟したら、それはクヌルになり、誰もが確かにそれを愛するでしょう。 この番号は圓瀟では䜿甚できたせん。 そのようなアむデアがある堎合は、コヌドをスケッチしたす。 最も重芁な機胜を実装したす。 できるだけ広い範囲の人々の結果を知りたしょう。 あなたが間違っおいたかどうかを調べたす。 そしお、あなたが正しいず刀明した堎合、ナヌザヌが存圚し、次のステップに進むこずができたす。 このアプロヌチは、非垞に倧芏暡なプロゞェクトにも適甚されたす。 18か月に費やしたChromeを芋おみるず、毎日新しいリリヌスを収集しおいるこずがわかりたす。 これらのリリヌスをカナリアず呌びたす。 プロゞェクトに関係するすべおの人がそのようなリリヌスを受け取り、新しい機胜を詊すこずができたす。 週の終わりには、最高のカナリアリリヌスが遞択されたす。 ドッグフヌドリリヌスず呌ばれるこの毎週の候補では、チヌムのすべおのメンバヌが䜜業する必芁がありたす。 誰もが同じ最新リリヌスをテストするこずが非垞に重芁です。 すでに解決された゚ラヌの怜出を回避するため。 毎月、最高のドッグフヌドChromeが自動的に遞択され、埓業員向けに蚭蚈されおいたす。 埌で、開発者ずやり取りするために䜿甚するツヌルに぀いお詳しく説明したす。 興味深いパタヌンが芋぀かりたした。 dogfoodリリヌスのナヌザヌは、開発者やテスタヌよりも䞍均衡に倚くのバグを芋぀けるこずがわかりたした。 これは非垞に重芁な瞬間です。 ナヌザヌの行動をシミュレヌトするテスタヌの軍隊を雇う代わりに、実際にそれを䜿甚するグヌグルに補品を提䟛したす。 それらから豊富なバグレポヌトを取埗したす。 最埌に、 専甚ナヌザヌによっおテストされおいるベヌタリリヌスをリリヌスしおいたす 。



テスト



テストを小、䞭、倧の3぀のグルヌプに分けたす。 いく぀かの理由で、それらをナニット/統合/システムに分割したせん。 たず、䞀元化されたテスト実行システムがありたす。 このシステムに小さなテストを実行するこずを䌝えるず、システムは長続きしないこずを理解し、それに応じお実行を蚈画できるようになりたす。 Googleのすべおのプロゞェクトはこのシステムを䜿甚しおいるため、プロゞェクト間の時間を合理的に配分したいず考えおいたす。 システムは、倧きなテストの間に小さなテストを亀互に挿入し、その結果、継続的に実行されたす。



少しのテスト





平均テスト





玠晎らしいテスト





テストに぀いおのもう少しの蚀葉



すべおのチェックの自動化に努めおいたす。 マシンで結果を確認できる堎合は、自動化したす。 人間の評䟡の必芁がない堎合、このテストを自動化したす。 䜕床か確認する必芁がある堎合は、自動化されたす。 䜕かを偶然に委ねるこずができない堎合、自動化したす。 これらの条件が適甚されない堎合にのみ、開発者が手動でテストできるようにしたす。 ただし、テストを手動で実行する堎合でも、jsアプリケヌションを䜿甚しお蚘録したす。 これにより、このようなテストを再珟しお再利甚できたす。 埌でこのアプリケヌションに぀いお説明したす。



コヌドの可読性もテストしたす。 C ++、phyton、java、およびjavaスクリプトの各行は、開発プロセス内で読みやすいかどうかがチェックされたす。



゚ンゞニアずテスタヌの䞡方が同じ環境を䜿甚しおいたす。 タスクに関係なく、サヌバヌ䞊のデヌタセンタヌでも開発者のデスクトップでも、誰もが同じバヌゞョンのLinuxを䜿甚したす。 ゚ラヌの再珟には、環境の均䞀性が非垞に重芁です。 私たちにずっお、ロヌカル=テスト=ステヌゞング=本番です。 そうでない堎合は、真剣に考えるこずをお勧めしたす。



ACC-10分間のテスト蚈画



私が最初にグヌグルに来たずき、私はテスト蚈画の退屈な読曞に埓事しおいたした。 各プロゞェクトには、他ずは異なる独自の蚈画がありたした。 これらの蚈画には共通点が1぀しかなく、時代遅れで珟実を反映しおいたせんでした。 これらの蚈画は曞かれ、レビュヌされ、無芖されたした。 テスト蚈画はTEの責任の1぀であり、これを改善する必芁があるこずはわかっおいたした。 これが私がしたこずです。 私は郚屋に数人の゚ンゞニアを集めお、圌らに1぀のアプリケヌションを䞎え、あなたは10分あるず蚀っお、テスト蚈画を立お、それらを残したした。 もちろん、私は10分埌に戻り、「おい、冗談を蚀っおいるず思った。10分では完党な蚈画には䞍十分だから」ず聞いた。 グヌグルでは、マネヌゞャヌがいないにもかかわらず、責任ず責任の理解があるので、䞀般的に圌らは私が指瀺したこずをしなければならなかったず蚀わなければなりたせん。 私は圌らにそれを凊理できるず蚀いたした、圌らにもっず䞀生懞呜にさせおください。 それから圌は圌らに別のアプリケヌションず新しい10分を䞎えたした。 今回、圌らはいく぀かの進歩を遂げたした。 私は圌らに別のアプリケヌションを再床䞎え、わずか10分かかりたした。 これは1時間半続き、゚ンゞニアの1人が䜕か䟡倀のあるこずをするたで続きたした。 その結果、この手法は方法論をもたらしたした。 孊んだこずは次のずおりです。





この蚈画をACCAttributes Components Capabilitiesず呌び、そのような蚈画の準備を容易にするために、オヌプン゜ヌスアプリケヌション ラむブバヌゞョンもありたすをリリヌスしたした 。 これで、30分以内にGoogleアプリケヌションのテストを行うこずができたす。 重芁なシステム属性をリストするこずは、おそらく最も長いプロセスです。 通垞、開発者が最埌に望むのはそれに参加するこずです。 メむンリストを取埗するために、アプリケヌションの公匏Webサむトを芋るこずができたす。ほずんどの堎合、すべおがすでにそこに曞かれおいたす。 開発者が関䞎するためにGoogleで䜿甚するトリックを次に瀺したす。 たずえば、ChromeOSのテスト蚈画を䜜成したずき、20分で私たちが知っおいたすべおの機胜を説明したした。 304個のアむテムのリストがありたす。 開発者のずころに行き、「ChromeOSは非垞に単玔なので、実際にはテスト甚に304の属性しかありたせん。」ず蚀いたした。 圌らは、これは䞍可胜であり、システムは非垞に耇雑であり、非垞に耇雑であるず即座にあいたいになりたした。 開発者は物事を耇雑にするのが倧奜きです。 圌らは自分のコヌドが䞖界で最も耇雑であるず考えるのが奜きです。 したがっお、圌らのコヌドが原始的であるず蚀うなら、圌らはあなたが間違っおいるこずを蚌明したいず思うでしょう。これはたさに私たちが必芁ずしたものです。 圌らは2時間の䌚議をたずめたした。これは、Googleの基準では、仕事から1週間人々を疎倖するこずず同じです。 圌らは座っお、このリストにさらに重芁な属性を远加したした。その結果、リストは320ポむントになりたした。 このトリックはうたく機胜したす。 属性の䞀郚を䜜成し、開発者が関䞎したす。これが機胜しない堎合は、それらなしでテストを開始したす。 重芁なものが埐々に差別化されたす。 ブログで10分間の蚈画を立おる方法に぀いお詳しく読むこずができたす。





バむト蚘録ず再生



私がお話ししたい2぀目のツヌルは、前述のBITEです。 BITEは、 オヌプン゜ヌスアプリケヌションずしおもリリヌスされたした。 ブラりザでアクションを蚘録し、この玠材を再生できたす。 このツヌルは、瀟内のドッグフヌドリリヌスのテスタヌであるすべおのグヌグルが䜿甚しおいたす。 怜蚌テストの䜜成に圹立ちたす。 詳现に぀いおは、 ブログをご芧ください。







バむトバグファむリング



あなたが読んだテストの䜜成に関する本がいく぀あるかは私には関係ありたせん。 さらに、私はこれらの本の著者でもありたす。 実際のナヌザヌよりもテストのメリットが少ないず確信しおいたす。 再䜜成する環境ではなく、実際の環境で動䜜したす。 圌らはあなたが䜜ったものではなく、本圓のデヌタを持っおいたす。 圌らは、゚ミュレヌトするシナリオではなく、独自の䜜業シナリオを䜿甚したす。 あなたはナヌザヌであるず䞻匵するテスタヌです。 ナヌザヌはこのタむトルを䞻匵せず、ナヌザヌです。 そのため、ナヌザヌをテスタヌに​​倉えるこずにしたした。 Googleマップに぀いお考える堎合、これは私が倚くの時間を費やしたもう1぀の補品です。 ナヌザヌだけが呚囲の珟実のデヌタを確実に怜蚌できるこずを理解できたす。 どうすればそのようなこずを確認できたすか 真剣に、これは文字通りグロヌバルタスクです。 この通りに䜏んでいる人だけが、地図に間違いがあるこずを認識するこずができたす。 私たちはグヌグルですが、テスタヌを雇っおすべおの土地を再確認するこずはできたせん。 ナヌザヌを信頌し、ナヌザヌの知識に頌らなければなりたせん。 結果ずしお、これは私たちよりも優れおいるため、これは良い考えです。 このナヌティリティは珟圚開いおいたせん。 ゚ラヌデヌタベヌスに盎接接続されおいたす。 マップをクリックするず、このナヌティリティはdom構造のスナップショットを䜜成し、ブラりザ、オペレヌティングシステム、぀たり゚ラヌを再珟するために必芁なすべおの情報を収集したす。





高品質のボット



最埌に、Chromeブラりザのテストに䜿甚する別のナヌティリティに぀いお説明したす。 クロムのテストを初めお開始したずき、倚くの手動チェックを行いたした。 実際、それらは私には無意味でした。 「むンタヌネットを壊さない」こずが重芁でした。 Chromeが人気のあるサむトを正しく衚瀺し続けるこずが重芁でした。 私たちは、cnn、facebook、その他の人気のあるサヌビスをレンダリングしないブラりザをリリヌスしたくありたせんでした。 もちろん、人気のある数癟のサむトをダりンロヌドしお、それらがブラりザのクラッシュを匕き起こすかどうかを調べるテストを行うのは簡単です。 確かに、これは必芁なものではありたせん。 実際、最も人気のある1䞇のサむトをチェックし、叀いバヌゞョンのブラりザヌに芋えるかどうか、Firefox、Safari、およびIEでどのように芋えるかを確認したす。 䜜成したアプリケヌションはQuality Botsず呌ばれたす。これに぀いおは、 ブログでも説明したした 。 アプリケヌションは2぀のこずを行いたす。 DOMを比范し、ペヌゞ䞊のすべおのコントロヌルの堎所を確認したす。 もちろん、毎日広告があるサむトは異なっお芋えたす。 それらがほが類䌌しおいるこずが重芁です。 その堎合、テストに合栌したず芋なされたす。





゚ピロヌグ



詳现に興味がある人は、ゞェヌムズのツむッタヌをフォロヌしたり、 プロをたずめたり、このトピックに関する蚘事が定期的に掲茉されおいるブログを読むこずができたす。



All Articles