Googleマップの「ルート検索」機能をどのようにテストしますか?


13

(これは良いインタビューの質問になると思いますが、私の場合はそれよりも実用的です。)

数十の化学成分間の非常に長く洗練された化学反応プロセスをモデルする大規模で複雑なアプリケーションがあります。私たちは、アプリケーションの受け入れテストを設計する段階にありますが、テストするのに手に負えないほどの数の可能性のあるパスにやや気が進まないのです。私たちの状況は、Googleマップの開発チームが「ルートの取得」機能でルート計画アルゴリズムをテストするときに直面したものと非常によく似ていることがわかりました。明らかに、すべての可能なルートをテスト(検証および検証)することはできませんでした。では、どのような状況でもアプリケーションが機能するという自信をどのようにして得たのでしょうか?

そして、私は彼らがそれをどのようしたかを知ることを期待していないので、あなたに尋ねましょう:特定のアプリケーションが堅牢であることを満足させるために、適切なコードカバレッジを備えたテストスイートをどのように設計しますか?システムを通るすべての潜在的な経路を調査するために?

私が探しているのは、手に負えない問題を小さく扱いやすい部分に分解するために使用する原則です。その合計は、全体の満足のいく推定を提供します。「すべてをテストすることはできませんが、これをテストすることはできます、これ、そしてこれで十分です。」「確かに正しい」アプローチを探しているのではなく、実際の予算/時間の制約を考慮して、慎重なアプローチを探しています。

(Googleマップの例を使用して、できるだけ具体的な回答を求めています。)


過去のGoogleマップは、一方通行の道を誤ってバスのみの道に誘導し、存在しない交差点(例:オフランプのみの高架道路)で方向転換しようとしました。彼らには「間違った方向を報告する」機能があると思いますが、それはおそらくあなたの状況ではうまくいかないでしょう。彼らがすべてをテストすることについてのビットへの答えは?彼らはそうしませんでしたし、本当に必要もありませんでした。
ジョンリヨン

この種の質問と同様に、Nassim Nicholas Talebの本と記事を読むことをお勧めします。ここに数学に入る技術記事がありますが、彼の本を読むことを強くお勧めします。
jfrankcarr

十分に複雑なもののすべてのケースをカバーするテストを設計できるとは思わない。内部がどのように機能するかを知っていれば、すべての明白なパスのテストを考え出すことができますが、誰も考えもしなかったことが常にあります。できるだけ多くのことを考え、見逃しているものがあまり大きな問題にならないことを望みます。
ローレンペクテル

2
@jozzas:あなたが説明していることはすべてデータベースエラーであり、実際にはGoogleの方向アルゴリズムの問​​題ではありません。同等のものは、今朝、私のsatnavが手入れの行き届いていない道に私を誘導しようとしたことでしょう。一方、車線閉鎖のアドバイスを与えてくれた道路については、実際のバグです。(アドバイザリは明らかにあなたが通っている道路だけを見て、それがたどっているルートではありません。)
ローレンペクテル

1
それを「ベータ」と呼びます。できた これがGoogleのやり方です。
-Paystey

回答:


10

私は10年以上前にカーナビゲーションの分野で働いていました。

ステップA)参照パッケージを使用して、大きなサンプルセットを選択し、A / Bテストを実行します。正確さを求めず、外れ値を探します-参照セットはReroute 1234を10.34kmとして示し、123.5kmを計算しました。

ステップB)-ソフトウェアと参照ソフトウェアを改良します-サンプルを追加し、許容誤差を減らします。

ステップC)-グローバルデータセット全体のローカルな知識を使用した社内テスト。

ステップD)UAT ...「ユーザー受け入れテスト」「これを販売して、顧客が最も不満を持っているものを確認する」のように

1990年代半ばから2000年ごろまでにマッピング製品を使用したことがあるなら、私が何を意味するか知っているでしょう。

質問の例に戻ります。あなたが求められているのは、ソフトウェアが正しいことを証明する方法です。数学的な証明が必要な場合、それができることが示されています-現実的な予算を超える価格の単純なソフトウェア、複雑なソフトウェアパッケージ、それはまだ研究中です...国防総省や航空業界と同様に、経済的に管理可能な価格内で-しかし、ほとんどの人が支払おうとするよりもはるかに高い。最終的には、あなたがいくら支払う準備ができているかによって決まります.....

編集:私はあなたのOPを読み直します。あなたが探しているのは、複雑なソフトウェアの品質をテストするための迅速で安価な方法のようです。品質をテストすることはできません。構築されたものが正しく機能することを知るには、堅牢なプロセスが必要です。それが正しいことを証明する方法について考えなければならず、すでに「大規模で複雑なアプリケーション」を持っているなら、手遅れです。


5

私たちはGoogleのライバルです。答えは?基本的に2つ。

まず、完全なアドレス間ソリューションを計算します。うん、それは大きな行列です。さらに悪いことに、1日のすべての時間、すべての曜日にそうします。入力ドメインには中間結果をキャッシュするのに十分な類似性があるため、問題を扱いやすくしています。それでも、ハードディスクのバルクレートを取得してみてください。

このオフライン計算は別のアルゴリズムを使用して行われることに注意してください。テストするアルゴリズムよりもはるかに多くのメモリを使用しますが、直線的には使用しません(つまり、1000のルートを計算するときに使用するメモリは1000倍未満です)。

第二に、参加しているユーザーは実際の結果を提供してくれます。何百万ものルートが検証されています。実際のルートは予測どおりの速さですか?

そして、あなたはそのようにしてバグを見つけます。いつも。たとえば、両側が「ローカルトラフィックのみのゾーン」*で区切られた一続きの道路です。唯一の方法があります;)テストでそれを見つけるのは、その特定の道路へのルートを計画するときです。

*「ローカルトラフィック専用ゾーン」は、そのようなゾーンでルートを開始または終了するときにのみ使用できます。したがって、中央のストレッチはメインの道路網から切り離されています。これは、ゾーニングまたはマップ障害です。


3

Googleが世界中のアドレスのペアごとに別々のコードを書くわけではありません。大規模に開始されるヒューリスティックを除き、3脚の旅のアルゴリズムは3000脚の旅とまったく同じです。短いパスを徹底的にテストし、誘導を使用して、長いパスにもテストが適用されることを示します。

実際のルートの健全なサンプルを選択し、人間が思い付くものと照合します。最初のリリースでは、エンドユーザーのフィードバックに多くの注意を払い簡単に提供できるようにします。最適なルートが実際に目的地からしばらく離れる必要がある場合や、距離による最短ルートがわずかに長い直接ルートと比較して18ターンある場合など、境界条件をテストします。カリフォルニアからハワイへ車で行こうとしている場合など、ネガティブなテストを行い、賢いイースターエッグが所定の位置にあることを確認します。


あなたが提案したことはすべて正確であると確信していますが、それでもまだ十分に厳密ではないと感じざるを得ません。「ルートの健全なサンプルを選択する」というのは、世界クラスの開発チームが考案するものよりも、大学の学期プロジェクトで行うことのように思えます。そして、3本足と3000本足のルートについてのあなたの観察に同意しますが、3本足のルートの大部分でさえテストすることはまだ非常に野心的です。ここにはまだ根本的なものが欠けていると感じています。
kmote

@kmote:「しかし、私はそれがまだ十分に厳密ではないと感じずにはいられません」なぜ、それはある世代のソフトウェア業界で働いており、すぐに置き換えられるという真の兆候はありません。完璧なコードを書くのではなく、お金を稼ぐコードを書くことで報酬を得ます。考えてみてください、それは医学、工学、事実上すべての職業で使用されているものであり、それらの産業を適切に行っているようです。
マッテンツ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.