Badooゞオロケヌションテストバンプ、石、束葉杖、自撮り棒

モバむルアプリケヌションのテストに関する資料は既に数千あるようですので、ここで驚くこずはありたせん。 しかし、UIのような偎面はすでに穎で䞊曞きされおいたすが、ゞオロケヌションテストはあたり䞀般的ではありたせん。 そしお、 ニコラむのラママヌであるコズロフずアレクサンダヌz3us Khozya  Badoo がハむれンバグ䌚議で圌らの経隓を共有したずき、聎衆は䌚議に非垞に興味を持ちたした。 ゞオロケヌションを取埗し、ナヌザヌの電話を拒吊しないようにするにはどうすればよいですか なぜこのテストで自撮り棒がスティックするのですか ロンドンのパブはどれくらい近くにありたすか



Habrの芖聎者も面癜いかもしれないず刀断し、ファンがビデオを芋るためずファンがカットの䞋でテキストバヌゞョンを読むための2぀のバヌゞョンで䞀床に投皿したす。









゚ントリヌ



アレクサンダヌホスティング 

最初にあなたを知りたしょう。 私の名前はAlexander Khozyaです。䌚瀟の党員が「Khozya」ずいう名前で呌んでいたすが、私は慣れおいたすが、そのように連絡するこずもできたす。 私はBadooのすべおの手動モバむルテストを担圓しおいたす。すべおのモバむルオペレヌティングシステムが同じこずを奜たないので、今日はiOSに぀いおお話したす。



ニコラむ・コズロフ

私の䌚瀟名は「Kozya」です。私もそれに慣れおいたす。 特にAndroidオペレヌティングシステムで、䞀般的にUnixラむクなガゞェットが倧奜きです。 私はiOSが奜きではありたせん。AppleWatchずiPhoneを持っおいるのは、圌らの優れたサヌビスずサヌビス品質をどれだけ嫌っおいるのかを理解するためだけです。



私たちに぀いお少し。 Badooが新しい友達を芋぀けるためのサヌビスであるこずは、おそらく既にご存知でしょう。 ナヌザヌ数は3億6,000䞇人うち月間6,000䞇人がアクティブ、1日あたり玄30䞇人の登録がありたす。 1日に3億5,000䞇のメッセヌゞを生成したす。



懞念事項ずしお、盎接報告曞。 貧匱なサヌバヌが凊理しなければならないデヌタの量を理解するために、ナヌザヌは1日に玄20億の座暙を生成したす。 これらの20億は玄1,000䞇の「亀差点」を生成したす-亀差点ずは䜕かに぀いお少し埌で説明したす。



さらに、以䞋で説明するすべおのこずは、テストナヌザヌのみが可胜です。 䜕らかの異垞やバグをチェックする堎合を陀き、実際のナヌザヌのデヌタにアクセスするこずはできたせん。この堎合でも、このアクションに察するナヌザヌ自身の蚱可が必芁です。



それで、今日お話しするこずは







ゞオロケヌションが圹立぀理由



たず、ゞオロケヌションずは䜕であるか、䜕を䜿甚しおいるか、そしお最新のデバむスでどのように機胜するかを思い出しおみたしょう。



歎史的には、2008幎のバヌゞョン2.0のリリヌスでiOSに登堎し、その埌、電話機は「IPによる蚈算」を孊びたした。 問題は、Geo IPの粟床が䜎いこずですせいぜい通りであり、モバむルデバむスの堎合、通垞は囜です。IPアドレスはほずんどの堎合浮動しおいるためです各地域のオペレヌタヌは独自のアドレス範囲を持っおいたすが、地理的に接続されおいたせん。



将来、゚ンゞニアはいわゆるセルIDを䜿甚するこずにしたした。 操䜜の原理は非垞に簡単です。空間内の基点の䜍眮を知っおおり、これらの点からの信号レベルを知っおいれば、それらたでの距離をほが決定できたす。 次に、倚数のラりンドを描画し、すべおのサヌクルの重耇領域のどこかにナヌザヌがいたす。 粟床はすでに向䞊しおいたす。小さな郜垂では1000メヌトルであり、モスクワのような倚くの基地局がある郜垂では60メヌトルです。 Wi-Fi、Bluetooth、およびその他のビヌコンを䜿甚する堎合、粟床を10メヌトルに䞊げるこずができたす。これは非垞に䟿利です。GNSSず呌ばれる次のシステムやグロヌバルナビゲヌション衛星システムを䜿甚する必芁はありたせん。







「GPS」ず蚀っおいないのはなぜですか ナビゲヌションシステムの垂堎には耇数のプレヌダヌがいるためです。 䞻なものは、GPS、GLONASS、䞭囜の北斗、ペヌロッパのガリレオです。 さらに、むンドのIRNSSず日本のQZSS 「準倩頂ナビゲヌションシステム」の2぀の地域ナビゲヌションシステムがありたす。 なぜそんなに倚くのシステムがあるのですか 必芁に応じお、すべおのデュアルナヌスシステムは、特定の堎合に、オフにするこずができたす。 たた、むンドず日本では垞に蚈算する必芁がある既知のGPS衛星オフセットがあるため、堎所を明確にするためにいく぀かのシステムが必芁です。これは䜙分な頭痛です。 日本人は粟床が倧奜きで、QZSSの導入埌、最悪の堎合は10センチメヌトル、最良の堎合は1センチメヌトルの粟床で衛星を2぀䜜成するだけで十分です。



同時に、すべおのナビゲヌションシステムの䞻な問題はコヌルドスタヌトです。 工堎からリリヌスされたばかりで、ゞオロケヌションを受信したこずがないデバむスの堎合、最初の起動では、A-GPSを䜿甚しないコヌルドスタヌトは15分です。星空のアトラスを12分半ダりンロヌドし、さらに2分半埌に出発したす衛星からの信号を受信したす。 これは倧きな問題であるため、A-GPSシステムを思い付きたした。GeoIPずセルIDを䜿甚しお、電話機はおおよその䜍眮をすばやく決定し、アトラスを送信する特別なサヌバヌに送信したす。 そしお、2〜3分埌ほずんどの堎合、さらに短い時間、電話はすぐに衛星を芋぀け、珟圚地を非垞に䟿利に衚瀺したす。



では、ゞオロケヌションが䞀般的に必芁な理由に぀いお話したしょう。 たず、コンテンツをカスタマむズしたす。



補品がナビゲヌションシステムであり、ゞオロケヌションを䜿甚しおいない堎合、ほずんどのナヌザヌはそれを䜿甚したせん。 䜕らかの広告アプリケヌションを䜜成しおいる堎合、パヌ゜ナラむズも可胜ですある店を通り過ぎるず、電話がこれを理解し、プッシュ通知がトリガヌされたす。この店では、珟圚50の割匕がありたす。 デヌトでは、ゞオロケヌションも非垞に重芁です。 私たちのナヌザヌは自分の街にいる人を芋たいず思っおいたすが、できるだけ近くにいるこずが望たしいです。 たた、他の囜のナヌザヌを衚瀺したくない。 ゞオロケヌションの助けを借りお、この問題や他の倚くの問題を解決したす。



亀差点サヌビスのゞオロケヌションに関連するすべおの改善点を開発したした。サヌシャに぀いおは、少し埌で説明したす。 私は、これがナヌザヌ、ロゞックの芳点からどのように機胜するかが明確であるずのみ蚀いたす。 しかし、できるだけ少ない電力でできるだけ倚くの座暙ずゞオデヌタを取埗する方法は完党に理解できたせんでした。 2014幎で、これをすべおクラむアント偎で実装する方法に関する倚くの情報がありたしたが、それをテストする方法に関する情報はたったくありたせんでした。 残念ながら、自分ですべおを芋぀け、ドキュメントをれロから䜜成する必芁がありたした。 次に、䜍眮情報を䜿甚する堎所ず方法に぀いお説明したす。







ホスティング

最初のメむン画面は、ナヌザヌがお互いに投祚するデヌトです。 Kolyaが前述したように、近くにいる人を芋぀けおコミュニケヌションをずるこずは非垞に興味深いため、ゞオロケヌションは、サヌバヌがナヌザヌを盞互に発行する最も重芁な重みの1぀です。



次の画面には「近くの人」ずいう蚀葉がありたす。最初のセクションでは、できるだけ近くにいる人が衚瀺されたす。 もちろん、ゞオロケヌションサヌビスぞのアクセスを蚱可しおくれない限り。 あなたがそれを䞎えなかったなら、我々はあなたに少なくずも郜垂に入るよう頌みたす。 ナヌザヌプロファむルを開き、近くにいるこずを確認したす。たずえば、Alenaは私たちから300メヌトルのずころにいたした。







同じ画面で亀差点を衚瀺しおいるだけです。今床はすべおがどのように機胜するかを説明したす。 理論的にはそれほど難しいこずではありたせん。特定の時点で移動し、特定の瞬間にあなたず他のナヌザヌの軌跡が亀差するか、たたは可胜な限り近く20メヌトルなどでした。 1人のナヌザヌずパスを亀差させるず、パヌ゜ナラむズされたプッシュが生成されたす。 このナヌザヌず䌚話したかどうかを確認したす。たずえば、あなたは圌が奜きかチャットか、圌はあなたをお気に入りずしお远加したしたなど。 私たちはパヌ゜ナラむズされたプッシュを送信し、プロファむルを開いお、特定の堎所で亀差しおいるこずを確認できたすゲヌトりェむであなたに䌚いたい邪悪な倧根を取り陀くために。 すぐに3〜4人ず亀差した堎合、「近くの人」画面に衚瀺され、亀差したナヌザヌには特別なチェックマヌクが付けられたす。



チャットでゞオロケヌションを共有したり、リク゚ストしたりするこずもできたす。ナヌザヌがあなたに来たずしたしょう。あなたはカフェにいお、ゞオロケヌションを送信しお、ずおも䟿利です。



たた、副産物の1぀では、䜍眮情報がチェックむンに䜿甚されたす。 原則ずしお、プラスたたはマむナスのSwarmですが、デヌトに぀いおです。 あなたが同じステヌキハりスに行き、他の誰がステヌキに぀いお話をするのか䞍思議に思ったずしたしょう。 たたは、クラブに来おアプリケヌションを起動したずころ、クラブには珟圚24人の人がいるこずがわかりたす。 デヌタが瀺すように、共通の堎所を芋぀けるず、メッセヌゞを受信する可胜性が玄40増加したす。 たた、スパム察策では䜍眮情報を䜿甚したす。



Kozya

たず、ナヌザヌが他のナヌザヌを䞉角枬量するのを困難にしたす。 さらに、地理䜍眮情報を䜿甚しお、ナヌザヌが自分の䜍眮を突然倉曎したこずを刀断できたす。2぀の堎合がありたす。 スパム察策が機胜したか、ナヌザヌが別の囜に移動しお他のナヌザヌを困らせるか、ナヌザヌが別の囜のハッカヌのアカりントに乗っ取られたかのいずれかです。 そのような堎合には、察策を講じたす。



さらに、亀差点サヌビスのために、いわゆる「タクシヌドラむバヌモヌド」を開発したした。 ナビゲヌタヌをオンにしお垞に街䞭を移動する人々は、倚くの正確なゞオデヌタを生成したす。 倚くの亀差点があるこずは明らかです。 これらのナヌザヌが銎染みを持たず、他のナヌザヌに迷惑をかけないように、亀差点は、より厳しいフィルタリングを備えた特別なアルゎリズムによっお生成されたす。



ゞオロケヌションが優れおいる理由、およびそれを䜿甚する堎所に぀いお説明したしたが、別の問題、぀たりゞオデヌタ収集の問題に぀いお説明したす。



ロケヌションコレクション









これはタむムラむンであり、アプリケヌションが起動しおから特定の粟床でゞオロケヌションを受信するたでに時間がかかる堎合がありたす。 地理䜍眮情報をより速く取埗するには、バッテリヌの芳点から䞍経枈なセンサヌ気圧蚈、ゞャむロスコヌプなどを远加で䜿甚する必芁がありたす。 ただし、デバむス䞊にあるすべおの可胜なセンサヌを䜿甚する堎合でも、指定された座暙の粟床を取埗する保蚌はありたせん。



Googleのドキュメントで、粟床の定矩を盎接読んでみたしょう「粟床ずは、ナヌザヌが68の確率でいる点の呚りの半埄です」。



たたは、簡単に蚀えば、68の確率で、私たちは今ここのどこかにいたす。







そしお、そうではないかもしれたせん。 ご芧のずおり、2぀のポむントが来おおり、それらの間の距離はそれらが䞎える粟床よりもはるかに小さくなっおいたす。 たた、そのようなゞオデヌタを操䜜できる必芁がありたす。







正確なゞオデヌタの取埗は時間に䟝存したすが、たったく取埗されない可胜性があるため、それを凊理できる必芁がありたす。 早い段階で、オフィスを離れずにアセンブリをテストし、堎所を送信する方法に぀いお話したしょう。システムが少なくずも䜕らかの方法でゞオロケヌションを受け入れる方法を知っおいるこずを確認する必芁がある堎合。



これを行うには、利甚可胜な最も単玔なツヌル、たずえばAndroid゚ミュレヌタを䜿甚するのが劥圓です。 ゚ミュレヌションモヌドでは、ロケヌションには、ロケヌション自䜓の゚ミュレヌションやGPXルヌトの読み蟌みなど、最も単玔なものが含たれたす。これに぀いおは、埌でSashaが説明したす。







Android゚ミュレヌタヌのデフォルトの堎所がアむスランドのDalvikの村であるこずは興味深いです。 Dalvikは、バヌゞョン5.0たでのAndroidの仮想マシンです。



䞀方、iOSの堎合、䜕らかの理由で、シミュレヌタヌの方がはるかに豊富である理由を私自身は理解しおいたせん。



ホスティング

はい、確かに。 通垞、アップルは非垞にナヌザヌフレンドリヌですが、゚ンゞニアは巚倧なポポヌルを持っおいたす。 ただし、この堎合、Appleは私たちのこずを考えお、ゞョギング、サむクリング、高速道路でのラむディングずいう3぀の遞択肢を甚意しおいたす。







システムは、座暙自䜓、速床、動きベクトル、氎平および垂盎速床、堎合によっおは床に関する必芁なすべおのデヌタをシステムに返すため、これは䟿利です。 オフィスを離れずにゞオロケヌションをテストするのに非垞に䟿利です。



ただし、アプリケヌションをバックグラりンドに最小化するず、システムから座暙がたったく送信されない堎合がありたす。 これは、Xcode、シミュレヌタ、たたはmacOS自䜓のバグです。 これを無効にするには、Xcodeたたはシミュレヌタヌを匷制終了する必芁がありたす。いずれも解決しない堎合は、再起動しおください。 しかし、シミュレヌタを起動しおすべおがうたく機胜し、いく぀かの操䜜埌に停止した堎合、おそらくこれはただアプリケヌションのバグです。



次に䜿甚するのは、お気に入りのXcode開発環境です。 デバッガヌをシミュレヌタヌたたは実際のデバむスのいずれかに接続したすこれは重芁です。実際のiOSデバむスでゞオロケヌションをシミュレヌトできるこずを知っおいる人はほずんどいたせん。青い矢印をクリックするか、メニュヌの[デバッグ]> [ロケヌションのシミュレヌト]を遞択し、 Appleの远加-モスクワ、ロンドンなど しかし、最䞋郚にある[GPXファむルを職堎に远加]ボタンを䜿甚するず、GPXルヌトを远加できたす。



生成するには、 Maps to GPX converterを䜿甚するこずをお勧めしたす。 入り口で、圌はGoogleマップから完党なURLず短瞮URLの䞡方を远跡したす。 出力はGPXファむルを生成したす。実際には、時間ず空間内のポむントを含むXMLのサブセットにすぎず、システム自䜓がすべおを補間したす。 このGPXファむルは、Android、iOSおよびWindows Phone、GPSトラッカヌなどず互換性がありたす。



実際、このツヌルはPokemon Goのブヌムの間に䜜成されたもので、そのおかげでテストが倧幅に容易になりたした。 唯䞀のこずは、このツヌルでGPXファむルを生成する堎合、システムはiOSの移動速床を決定しないため、速床を知る必芁がある堎合は、シミュレヌタを䜿甚するこずをお勧めしたす。



今、緑のバケツに぀いお話したしょう。



Kozya

゚ミュレヌタはiOSシミュレヌタほどリッチではないこずに気付いたので、アプリケヌションを制限なく配眮できるずいう事実を利甚したした。



私が䜿甚するこずをお勧めする最初のアプリケヌションはLockitoで 、これは非垞に䟿利で、実際にはAppleが持っおいるトラックのシミュレヌションを眮き換えたす。 ポむントは次のずおりです。アプリケヌションを起動し、空間内のポむント、これらのポむント間の移動のタむプ盎線たたはある皮の茞送を指定し、座暙、速床などのパラメヌタヌを指定したす。 シミュレヌションを実行し、アプリケヌションで宇宙空間をどのように移動するかを芳察したす。



2番目のアプリケヌションはGPS StatusToolboxです。 䟿利な機胜マルチりィンドりモヌドで実行し、小さなデバむスで、倧きなデバむスで盎接アプリケヌションがどのように芋えるかを確認できたす。 さお、デバむスのゞオデヌタシステムが提䟛するもの、アプリケヌションが受け取るものを瀺し、比范したす。 あなたの堎所が実際の堎所ず䞀臎しないずきに䜕らかの異垞ゟヌンにいるこずに気付いた堎合たずえば、突然Vnukovoに移動した堎合、 GPS Testを䜿甚しおこれが起こった理由を理解できたす。



Lockitoを䜿甚するずき、アプリケヌションで䜿甚したゞオデヌタ゜ヌスを䜿甚する問題を解決するラむブラリを䜿甚する堎合、Location Mockを䜿甚できる必芁があるこずに泚意しおください。 たた、Androidですべおのゞオデヌタ゜ヌスをデフォルトで有効にしおいる堎合、シミュレヌションの時点に戻っおしたうこずがよくありたす。 理由は䜕ですか堎所を゚ミュレヌトするアプリケヌションはGPSサブシステムのみを゚ミュレヌトするため、蚭定ではGPSデヌタなどのデヌタ゜ヌスを切り替える必芁がありたす。



少したずめおみたしょう。Mapsto GPX Converterは非垞に優れおいるこずがわかりたした。GPXファむルを異なるデバむスに同時にアップロヌドし、異なるオペレヌティングシステムが同じルヌトを凊理する方法を確認できたす。 残念ながら、iOSは残念ながらAndroidよりもリッチですが、Androidは環境に優しく、矎しく、䞀般的に優れおいたす



これで、システムがデヌタを受信しお​​いるこずがわかりたした。 ここで、䜕かが䜕らかの圢で機胜しおいるこず、぀たりビゞネスロゞックのテストを開始するこずを理解する必芁がありたす。



ビゞネスロゞックテスト



たず、ビゞネスロゞックが倧きすぎるずいう事実に盎面し、すべおを念頭に眮くこずができたせんでした。 問題点特定のロケヌション凊理システムを担圓するファむル、機胜、クラスが倚数ありたした。 ゞオデヌタ凊理の間隔たたは座暙を取埗する間隔を短瞮するには、すべおを探しお倉曎し、アプリケヌションを組み立おる必芁がありたす。すべおを頭の䞭に保持できないため、䜕かを芋逃す可胜性がありたす。



これを行うために、䟿利な構成ファむルを䜜成したした。 iOSの蚭定ファむルの䟋を次に瀺したす。ここでは、必芁なデヌタをすべお倉曎し、お気に入りのXcodeでアプリケヌションを構築しお、䜿甚を開始できたす。







ホスティング

, — , (, ), , . , . , . , , .



, , . , , . , . , , .



, , background, , foreground, UI .



, : GPS, - , , , API (, geofencing, visits API significant location change API iOS).



, : , , , , . , . , : , (, , , ), Wi-Fi ..



, , , .



-, , , 30 . - : -, . out of memory killer, , . - - API. , .



, , - : , -. , , . , , . , PHP-, , . , , -, , -:







, , . , , « », , . - , , . , , , ( /, , - ). , — , .



:

, , , , , 
 c :) , 7 . , , , — .







debug menu . Android . , GNSSLogger Google , , . , , , . , , , . , , ! , , - : , , , , .



iOS , iOS.



:

, , Android, . , iOS , ! , — location manager.







, , , - , . debug- , : , , . : , , .



Apple-, , , : , . , . , Visits API, iOS 8, . , , - . -, : «, , , - », , - . , , . , , , , 45 . «» : , , . API, , . iOS 7.



, , , , : foreground, — background, — visit.







, , . debug- , — .





:

, . , 2014 , , , , .



, . Power Meter. : , -, — , . , — .



. : , , , . .



, ( Android, ). , , , , Android . . , Power Meter , , . iOS .



« », , Heisenbug, . , , , , . , , , , Arduino, . , , !



. Android, .



, Android — , , . , . , , , , .







Android, : CPU foreground, background, (, GPS), ..



Google Play Services? Android : Android 8.0 Google Play Services «», . Google , « Google Play Services» : «, , , ». , .







, — Test Fairy, -sandbox, . -, , .



— , . 1-2 , , , , ( , , 3000+ ). , 22- , , . , , , .







, , — Battery Historian . Google, , «» , - . , , .



, , , , 3 . , , , : , . , developer infinite loop . .







, , . , , , .



, : , , , . , , , . iOS .



:

, iOS ( , Android), .







, : «» — «». , : , . , .



. , . , 5 , 55 , , . , , , , , , .







— Energy impact Xcode. , , : , , , , .



, : , CPU 100%, , , GPS , . : , CPU , GPS, , . , . .



— : «Settings — Developer — Instruments», . , .



, , , , - — . - , -, Android. , , . , 1/17 , 17 .



, , instruments . , , .



iOS, , - , . Android — Battery Historian, , .





:

, , , . , , - - , . , . Location Manager iOS , Apple , 100 .



. , , , . « »: , . , , , . «» Apple .



, , , iOS, Android. , , . , : , ( 1000 - ), . , , « » , , 15 (, , ). «, », .







, - . , , , , , , , . , , , , - , . , , , , unit-, .



, : 20 ( , ) . 20 — , :) 20 , , , .



Significant location change API. , GPS ( ), API, , . .



«», «significant»? , , , , , . , 750 , 750 . , . , , Apple .



, , Android. , , . -, , . : encounters ( ), - , . .



Visits API. , API iOS 7, .



Apple , - , , , . .



: . iOS 120 , NSurlsession , . , , , 30 . , - , , , , 5 . 120 , , , . , Wi-Fi, 3G:



Android.



:

Android Fused Location Provider . , , . GPS .



— . , iOS, Android . , , : - , , ., , , .



, . , , . , , « 100 », , . : , - , - . , , .



, , Fused Location Provider 90% . 9% Legacy Location Provider — , Android . , , Google Play Services, Google Play Services, , Xiaomi.



, Aggressive Location Provider. Legacy Location Provider, :



-, , Fused Location Provider (, , , ). - , .



. Google Play Services — , , «», , , — .



Aggressive Location Provider . , 20%, , Aggressive Location Provider . .



, Activity Recognition API Google Play Services — . 4 : , , ( ).



, , , still. , , - , , , . still , , still, . , , , . , - - .



, : , --, , , , still. , , , , , , still, , , , -. : - , , — .



だから、あなたはあなたの実隓宀の条件で持っおいるすべおのものを実行し、それが䜕らかの圢で機胜するこずを理解しおいたすが、それはただ真空䞭の球圢の銬です。これを行うには、「フィヌルドに」行く必芁がありたす。



「フィヌルドで」終了



Kozya

そしお、フィヌルドに出お行くために、あなたはあなたず䞀緒に持っおいくものを理解する必芁がありたす。 OSの異なるバヌゞョン、Wi-Fiのオン/オフ、さたざたな省゚ネ蚭定、SIMカヌドの有無にかかわらず、実際のデバむスを䜿甚する必芁がありたす。 2皮類のSIMカヌドで消費電力が異なる堎合があるこずに泚意しおください。たずえば、4Gをサポヌトするものずそうでないものがありたす。 同じ呚波数をサポヌトする2枚のSIMカヌドでも、ファヌムりェアが異なるため、消費電力が異なるこずがありたす。 Sashaず私は、さたざたな関係者のVodafone SIMカヌドを䜿甚しおこれに出䌚いたした。



次に、ナヌザヌを理解する必芁がありたす。 ナヌザヌのバグを芋぀けるためには、ナヌザヌのようになる必芁があり、ナヌザヌずしお行動し、ナヌザヌが行うこずを行う必芁があるためです。 アプリケヌションのナヌザヌになるために、結局、誰もドッグフヌディングをキャンセルしたせんでした。 そしお、これが私たちがしたこずです。



ホスティング

たず、オフィスを出お近所を少し散歩するこずにしたした。 なぜそんなに䟿利なのですか はい。建物の密床、Wi-Fiネットワヌク、セルラヌネットワヌクの密床が異なるため、堎所を特定する粟床が非垞に高くなるためです。 ロンドンは非垞に䞍均䞀です。



たた、「䞍芏則な」歩行ペヌスにより、送信間隔を確認できたす。 あなたは同じ速床で歩いおいたせん。あなたの前の誰かがくすんだり、誰かを远い越したり、暪断歩道に立ったり、地䞋通路に降りたりしたした。 具䜓的には、この堎合、バグを芋぀けるこずさえできたした。 座暙の束の圢成䞭に、座暙が送信前に受信された堎合、座暙は送信甚のパックずキャッシュの䞡方に远加されたした。 したがっお、たれに、これらの座暙を耇補したした。 正盎に蚀っお、偶然に再珟されたしたが、このケヌスは興味深いものです。



iOSで「蚪問」をテストするこずも非垞に䟿利です。 2぀の意味倉化ポむント間の距離は750メヌトルであり、プラスたたはマむナス5分埌に「蚪問」が遅れお送信されるこずを思い出させおください。 䟿利な理由ロンドン䞭心郚のパブ間の距離は、これらの750メヌトルよりもはるかに短いです。



したがっお、あなたはパブに行き、ピントチカを飲んで、倖に出お、5分で次のパブに着きたす、そしお䜕かが起こるかもしれたせん。 具䜓的には、iOSの堎合、前の機関の出口か、次の機関の入口を噛みたした時間的に非垞に近いこずが刀明した堎合。 党䜓をSwiftに曞き盎すこずで、静的アナラむザヌがより良く機胜し、間違った定数を䜿甚し、匏が垞にfalseであるず刀断できるようになりたした。



䞀般的に、テストは簡単で快適です。ピントを飲み通垞はダギずピントを飲みたした、亀差し、プッシュし、開きたす。 堎所が正しい堎合、および/たたはすでにテストされおいる堎合は、家に垰らなければなりたせん。



たた、あらゆる皮類の機関に行くこずで、蚓緎システム党䜓を砎壊する朜圚的なバグを芋぀けるこずができたした。 ロンドンでは、パブに加えお、平方メヌトルあたりのあらゆる皮類の斜蚭がたくさんありたす。 100〜200平方メヌトルの゚リアに4〜5のカフェがありたす。 そしお私達ずの正確さは通垞10-30メヌトルです。 したがっお、特定のカフェにいるず刀断するのは非垞に困難です。 そしお、私たちは非垞に非自明に行動しおいたすカフェに行き、゚ントリむベントを取埗し、接続されたWi-FiポむントずそのMACアドレスもちろん、ある堎合を取埗し、サヌバヌに送信したす。 ぀たり、ナヌザヌが絶えずこのポむントにアクセスする堎合、ナヌザヌは同じWi-Fiを䜿甚しおいるため、高い確率でこの堎所にいるこずになりたす。



しかし、刀明したように、ロンドンにはただオヌプンWi-Fiネットワヌクがあり、3分で次の機関に行き、すでにそこにいお、再びアクセスポむントを取埗しおサヌバヌに送信できたす。 それだけでなく、サヌバヌは、゚ントリヌむベントず゚グゞットむベント甚の2぀の異なるWi-Fiネットワヌクを持っおいるずいう事実に驚いおいたしたが、物理的にそれらの間の距離は300-400メヌトルにもなりたす。 歩く速さに応じお、これを考慮に入れる必芁があるため、自発的な決定により、出口むベントぞのアクセスポむントの名前の入力を無効にしたした。



その埌、公共亀通機関に乗るこずにしたした。 ロンドンの䞭心郚は非垞に混雑しおおり、バスは平均速床が䜎いため、最初に行うのはバスです。 たた、動きの性質の決定を確認し、そらすこずができたしたあなたが行く、行くなど。 そのような定矩は確率です。぀たり、条件付きでバスに乗る堎合、90の確率でバスに乗るず決定され、10の確率で、たずえば自転車に乗るこずになりたす。 堎合によっおは、察応するりェむトを締める必芁がありたす。



たた、バスに乗っおいる間に、面癜いサヌバヌのバグを芋぀けたした。 暪断歩道や信号で止たるず、堎所を芋぀けるこずがありたす。 サヌバヌは、次の堎所を取埗する方法ず、以前に速床を萜ずしたものを認識できなかったため、バス停に最も近い斜蚭で私たちをチェックしようずしたした。 この問題は単玔に解決したした。速床定矩メヌトル/秒を远加したした。速床がれロでない堎合、この機関で確認する必芁はありたせん。



それから、ロンドン地䞋鉄に行くこずにしたした。 非垞に叀く、セルラヌネットワヌクがなく、GPSを捕捉しないため、Wi-Fiを䜿甚しお堎所を特定するのが最も簡単です。車に乗り、次の駅に行き、Wi-Fiが自動的に接続され、堎所が特定され、非垞に䟿利で䟿利です。



それから、車ずタクシヌを運転するこずにしたした。 これが䟿利な理由高速で移動しおいお、ナビゲヌタがオンになっおいない堎合、オペレヌティングシステムは電力消費を調敎しようずしおいたす。 したがっお、20-30 km / hの速床で運転する堎合、これはバックグラりンドで750メヌトルであり、110 km / hを運転する堎合はすでに2-4 kmであり、高速列車で空枯に旅行しおいる堎合ロンドンで玄250 km移動したす/ hセルタワヌがあたりない堎合、高速移動するGPSオブゞェクトを修正するのが難しく、列車には倚くの金属が含たれおいるため、タワヌの密床に応じおすでに4〜11 kmになりたす。これは枬䜍の粟床に寄䞎したせん。



たた、移動速床に応じお、Geofencing APIを䜿甚する堎合は、半埄を正しく蚭定する必芁がありたす。 ゞオフェンシングは非垞に簡単に機胜したす。ポむントに移動し、半埄を蚭定し、そこから抜け出すためのアクションを実行したすたずえば、座暙の束を送信したす。 たたは、逆に、特定の堎所に行きたす。 マクドナルドに行っお、圌らがあなたを特定し、「今日のハンバヌガヌはあなたにずっお2倍安い」ずいうプッシュを送信するずしたす。 高速で移動しおいる堎合は、より倧きな半埄を蚭定する必芁がありたす。 そうしないず、バッテリヌを着陞させたり、この半埄を離れるこずがよくありたす。逆に、座暙の粟床がそれを超える堎合は、離れるこずはありたせん。



Kozya

さらに、Android 7以降では別のゞョヌクが発生する堎合がありたす。 電話があり、車に乗り、助手垭に乗せお、ポむントAからポむントBに行きたす。到着したので、電話が受信した堎所の数を確認したいのですが、そうではありたせん。 この理由は䜕ですか Googleはナヌザヌにずっおは良いこず、開発者にずっおは悪いこずをするこずを決定し、いわゆる居眠り、スリヌプモヌドを導入したした。 それだけでなく、携垯電話が䜿甚されおいないずきは「スリヌプ」するため、Android 7.1のバヌゞョンではGoogleが積極的な居眠りを远加したした。 なぜ悪いのかあなたの電話は状況をより速く分析し始め、助手垭でそれを投げおポむントBに行った堎合にそれが需芁がないこずを理解し、結果ずしお座暙を受け取りたせん。 ドキュメントを読んだ埌、黒い矊から房の毛たで、少なくずも1時間に4回は座暙を取埗できるこずがわかりたした。



私たちの銬はもはや球圢ではなく、本物であるこずに気付きたした。 最悪に぀いお話したしょう。



フィヌルド出力の裏偎



Kozya

最初の恐ろしいこずは、デバむスが砎損しお萜䞋する可胜性があるため、フィヌルドを出る前に適切なカバヌを甚意するこずです。



2぀目は回垰です。



ホスティング

䞻な機胜であるバグ修正を確認した埌、最初に尋ねるのは、収集および送信された座暙を芋逃したかどうかです。 キャップは、2぀のデバむスを取り、それらに異なるアセンブリを配眮し、それらず䞀緒に散歩し、座暙を比范する必芁があるこずを瀺唆しおいたす。 しかし、どんなに。 Kolyaは、消費電力の異なるSIMカヌドに぀いお話をしおいたしたが、デバむスを同じ状態にするのが非垞に難しいこずを蚌明する別の興味深い方法に出䌚いたした。



右偎のポケットに1぀のテストデバむスがあり、バックパックにもう1぀のテストデバむスがありたした。バックポケットに入れるのは危険なので、圌らはそれを匕き出すこずができたす。 結局のずころ、歩いおいるず、ポケットに入っおいたデバむスがより動き、目を芚たし、より倚くの座暙を収集したす。 仕事に着くず、バックパックに入っおいたデバむスがそれらを収集するのが1.5倍少なく、アプリケヌションのさたざたなビルドがこれずは䜕の関係もないこずがわかりたした。 したがっお、デバむスを最も類䌌した状態に配眮しおください。







たた、最新のデバむスには倧量のRAMがあるため、バックグラりンドで長期的なサヌビスチェックを行うこずをお勧めしたす。 たずえば、OnePlus 5〜6ギガバむトず8ギガバむトのRAMの倉曎がありたす。この堎合、アプリケヌションは非垞に長く存続し、存続する堎合は正垞に動䜜したす。 通垞、倜間たたは週末は、アプリケヌションをデバッガヌに接続したたた、動䜜のシミュレヌションモヌドのたたにしたす。



しかし、この機胜のリリヌス䞭にモスクワからロンドンたで車を運転しなければならなかったずき、Kolyaはテストで最も助けおくれたした。 私たちは圌にいく぀かのテストデバむスの箱を枡したした。2日間ず3000キロメヌトルで膚倧な量の座暙を収集し、機胜をオフにしたナヌザヌ自分自身を含むず亀差し、ギガバむトのログを収集しお、バグを芋぀けたした。起動前に修正されたした。



バグに぀いお話したしょう、結局のずころ、テスト䌚議がありたす。



Kozya

この機胜のリリヌス埌、過去ず未来から座暙を受け取り始めたした。 問題の原因ナヌザヌは移動し、タむムゟヌンを超えたり、初期座暙が取埗されたタむムスタンプに関しお過去ず未来に移動したりする可胜性がありたす。



タむムゟヌンを超えたずきにタむムスタンプを決定する際のデバむスのバグずファヌムりェアに加えお、同様の゚ラヌは他のバグが原因であるこずが刀明しおいたすが、これは簡単に解決できたす。 デバむスには垞にれロより倧きい時間がありたす。これは、起動埌の皌働時間です。 座暙を取埗するずきに远加し、この座暙のパックをサヌバヌに送信する必芁がある堎合にのみ、皌働時間ずずもに送信したす。 原則ずしお、これでほずんどの問題が解決したす。



2番目の問題は、テレポヌトを開始する人々です。 前述のこずナヌザヌが他のナヌザヌを煩わせるために座暙を急激に倉曎するか、アカりントを乗っ取るに加えお、非垞に珟実的なナヌザヌも宇宙にテレポヌトし始めたす。 これに関連するものたず第䞀に、座暙を指定するずき、ポむントは歩くこずができるずいう事実。 座暙の粟密化ず䞭心の倉䜍は、非垞に高速で発生する可胜性がありたす。 そしお、ナヌザヌの移動の最倧可胜速床を乗客ラむナヌの速床に制限したしたが、これたでのずころ非珟実的です。 これにより、いく぀かの興味深い䟋倖を陀き、99.9の問題が解決したした。



ホスティング

GPSがキャッチされない、たたはオフになっおいる堎合、䜍眮はWi-Fiたたはベヌスステヌションから取埗されたす。 少なくずも2぀の゚ラヌが発生したした。 1぀目は、Badooがそれぞれ非垞に厚い壁ず倩井のある矎しいカントリヌハりスで10幎を祝ったずき、GPSを捕捉できたせんでした。 私たちの勇敢な管理者は、ロンドンオフィスからアクセスポむントを傷぀けたした。マップアプリケヌションずアプリケヌションを起動するず、ロンドンオフィスにいるこずがわかりたした。 幞いなこずに、最新のアクセスポむントは、数分から数日たでかなり迅速に堎所を曎新できたす。 数時間でこのすべおが修正されたす。



そしお、モスクワに䜏んでいる人々は、より人気のある物語を知っおいたす。クレムリンに近づくず、ノヌヌコボに「テレポヌト」できたす。これは私たちにも起こりたした。 グヌグルでは、GPS / GLONASS座暙を眮き換え、VnukovoでセルID座暙を蚭定しおいるこずがわかりたした。 Yandex.Taxiの人たちは、そこから人を連れおくるか拟うために、ハックをしなければなりたせんでした。



たた、䞀郚のナヌザヌは䞭囜ずブラゞルにテレポヌトしたした。 刀明したように、䞻にBlackberryデバむスからブラゞルにテレポヌトされたした。GPSサブシステムに䜕かが発生するず、ブラゞルのデバむスのアセンブリサむトにテレポヌトされたこずがわかりたした。 そしお、䞭囜の携垯電話は䞭囜に移動しおいたした。



たた、iOS䞊のいく぀かのデバむスを2぀のポむントの間に投げたした。 メモリが提䟛される堎合、iOS 9.2より前の非垞に厄介なバグがありたした。バックグラりンドで䜍眮を受信するず、10〜15ミリ秒の差があるシステムは、たずえば6〜8時間前に受信した非垞に叀い䜍眮を抑制したした。 あなたは前進し、その埌ゞャンプしお戻り、そしお前進したす。 このために、クラむアントずサヌバヌ䞊の束葉杖の䞡方で、叀くなった座暙のフィルタリングを䜜成する必芁がありたしたが、クラむアントでこれを行うこずが垞に可胜ずは限りたせん。 サヌバヌはこのすべおをスムヌズにしたす。



私が個人的に倧量の血を飲んだ最埌のバグ実際のデバむスでゞオロケヌションのふりをしお、その時点でXcodeが「悪くなった」堎合、たたはデバッグセッション䞭にコヌドを抜いた堎合、デバむスは最埌の既知のゞオロケヌションでフリヌズしたす。 私の状況の面癜いずころは、家に垰る前に私たちのオフィスの正確な座暙をシミュレヌトし、このデバむスを家に持ち垰っお戻っおきお、䞀床も座暙を受け取っおいないこずに驚いたこずでした。私ず開発者。



私たちは皆、私たちが望んでいたこずを話したした、芁玄したしょう。



おわりに



Kozya

最初に気づいたのは、IDE、ログ、远加アプリケヌションなどの優れたツヌルがなければ、ゞオロケヌションサヌビスをテストするず、実際のメリットよりも倚くの情報ノむズが発生するこずです。



ゞオサヌビスをテストするずきにフィヌルドを終了する必芁があるこずは明らかですが、問題はフィヌルドに出おも、すべおのバグを芋぀けるこずができないこずです。 萜ずし穎の䞀郚のみを説明したしたが、その方法に応じお、さらに倚くの可胜性があるか、たったくない可胜性がありたす。



あなたによっお発芋されたすべおのバグは、䜕らかの方法で分類し、メモするこずが望たしいです。 これらは、Vnukovoぞの転送の堎合のように、機胜のバグ、APIのバグ、デバむス自䜓のバグ、たたは䜍眮情報である可胜性がありたす。 これらのバグは念頭に眮いおおく必芁がありたす。もし芋぀かった堎合は、すぐに蚀っおください。これは「ゞオロケヌション」クラスのバグであり、意味をなさないため修正したせん。



テスタヌは、ナヌザヌずビゞネスの間のリンクです。 ビゞネスが私たちに倚くの座暙を持぀こずを望んでいるこずは明らかであり、ナヌザヌはバッテリヌが急激に消耗するこずを本圓に嫌いたす。 このため、゚ネルギヌ消費をできるだけ早く枬定するこずを怜蚎する必芁がありたす。 しかし同時に、テストず開発がより困難になるため、開発の非垞に早い段階で再最適化しないこずが重芁です。



そしお、この䌚議で今日私たちができる最も重芁な結論CISのパブの密床はロンドンのパブの密床よりもはるかに䜎く、急にゞオロケヌションサヌビスを正確にテストする必芁がある堎合は、光景を歩き、私たちのずころに来おください。お手䌝いしたす。 よろしくお願いしたす



関連リンク







広告の分。 ハむれンバグ䌚議のこのレポヌトが気に入った堎合、新しいハむれンバグ5月17〜18日、サンクトペテルブルクがすでに近づいおいるこずに泚意しおください 。 たくさんの皆様にお䌚いできるこずを楜しみにしおいたす



All Articles