web-dev-qa-db-fra.com

Comment testeriez-vous la fonctionnalité Google Maps "Obtenir des directions"?

(J'imagine que ce serait une bonne question d'entrevue , mais dans mon cas, il est plus pragmatique que cela.)

Nous avons une application large et complexe qui modélise un processus de réaction chimique extrêmement long et sophistiqué entre des dizaines de composants chimiques. Nous sommes au stade de la conception de tests d'acceptation pour la demande, mais nous sommes quelque peu découragés par le nombre intractif de chemins possibles à tester. Cela m'est arrivé que notre situation ressemble beaucoup à ce que l'équipe Google Maps Dev doit être confrontée lorsqu'il est venu de tester l'algorithme de planification de l'itinéraire dans leur fonctionnalité "Obtenir des directions". De toute évidence, ils ne pouvaient pas tester (vérifier et valider) tous les itinéraires possibles. Alors, comment ont-ils eu confiance que leur application fonctionnerait dans toutes les situations?

Et puisque je ne m'attends pas à savoir comment , ils l'ont fait, laissez-moi vous demander: comment vous Convient à la conception d'une suite de tests avec une couverture de code adéquate, pour vous satisfaire qu'une application donnée est robuste - quand il est littéralement impossible de sonder chaque chemin potentiel à travers le système?

Ce que je cherche, ce sont les principes que vous utiliseriez pour décomposer un problème intraitable en pièces de plus en plus petites, dont la somme fournit une estimation satisfaisante de l'ensemble: "Je ne peux pas tout tester, mais je peux tester cela , cela et ceci - et ça suffit. " Je ne cherche pas une approche "de manière prouvable", mais plutôt une prudent , compte tenu du budget/du temps réel des contraintes de temps.

(J'utilise l'exemple de Google Maps comme une autre du papier d'aluminium pour solliciter des réponses aussi spécifiques que possible.)

13
kmote

J'ai travaillé dans le domaine de la navigation de voiture au cours d'une décennie il y a une décennie.

L'étape a) Utilisez un package de référence et sélectionnez un grand jeu d'échantillons, exécutez des tests A/B. Ne cherchez pas exactement, recherchez des valeurs aberrantes - L'ensemble de référence a montré Reroute 1234 sous 10.34km et nous avons calculé 123,5 km.

Étape B) - Affinez notre logiciel et le logiciel de référence - ajoutez plus d'échantillons et réduisez les tolérances.

Étape C) - Dans les tests hébergés en utilisant des connaissances locales dans des ensembles de données mondiaux.

Étape d) uat ... "test d'acceptation des utilisateurs" comme dans "Vendre ce produit et vois ce que les clients se plaignent du plus"

Si vous avez déjà utilisé des produits de cartographie Circa Mid 1990 - 2000, vous savez ce que je veux dire, ceux d'entre nous qui vérifiaient toujours le tour à chaque fois.

Retour à vous exemple de question. Ce que vous êtes demandé est de savoir comment prouver qu'un logiciel est correct. Si vous voulez une preuve mathématique, il a été démontré que cela peut être fait - pour un logiciel simple à un prix dépassant des budgets réalistes, pour un ensemble de logiciels complexes, bien, c'est toujours des recherches ... NASA dispose de modèles d'écriture de logiciels hautement fiables À propos des prix économiquement gérables, de même que le DOD et de l'industrie de l'aviation - bien que toujours beaucoup plus élevés que la plupart sont disposés à payer. En fin de compte, cela vient à quel point êtes-vous prêt à payer .....

EDIT: Je viens de vous lire sur OP. Il semble que vous recherchez est un moyen rapide et bon marché de tester la qualité d'un logiciel complexe. Vous ne pouvez pas tester de qualité. Vous devez avoir un processus robuste afin que vous sachiez que ce qui est construit fonctionne correctement. Si vous devez penser à la façon de prouver qu'il est correct et que vous avez déjà une "application grande et complexe", vous êtes trop tard.

10
mattnz

Nous sommes l'un des concurrents de Google. Notre réponse? Fondamentalement deux.

Premièrement, nous calculons la solution complète d'adresse à adresses. Yup, c'est une grosse matrice. Pire encore, nous le faisons pour tous les temps de la journée, tous les jours de la semaine. Il existe une similitude suffisante dans le domaine d'entrée pour mettre en cache les résultats intermédiaires en cache, ce qui rend le problème piégéble. Néanmoins, essayez d'obtenir un taux en vrac sur des hardDisks.

Notez que ce calcul hors ligne est effectué à l'aide d'un algorithme différent. Il utilise beaucoup plus de mémoire que l'algorithme que nous avons l'intention de tester, mais pas de manière linéairement plus (c'est-à-dire qu'elle utilise moins de 1000 fois plus de mémoire lors de la calcul de mille itinéraires).

Deuxièmement, les utilisateurs participants nous fournissent des résultats du monde réel. Nous validons des millions de routes pilotées. Les itinéraires réels sont-ils aussi rapides que prévu?

Et bien sûr, vous trouverez des bugs de cette façon. Tout le temps. Par exemple. une tronçon de route qui est délimitée des deux côtés par une "zone de trafic local uniquement" *. Il n'y a qu'un seul moyen;) que vous allez constater que dans les tests, et c'est lorsque vous planifiez un itinéraire vers cette route particulière.

* Une "zone de trafic local que" ne peut être utilisée que lorsque vous démarrez ou mettez en fin d'une route dans une telle zone. L'étirement au milieu est donc débranché du roadnet principal principal. Ceci est un zonage ou une faute de carte.

5
MSalters

Ce n'est pas comme si Google écrit un code séparé pour chaque paire d'adresses du monde. À l'exception de l'heuristique qui frappe à une plus grande échelle, l'algorithme d'un voyage à 3 jambes est exactement la même que pour une 3000 jambe. Vous testez de manière approfondie les chemins plus courts et utilisez l'induction pour montrer que les tests s'appliquent également aux chemins plus longs.

Vous choisissez un échantillon sain d'itinéraires réels et vérifiez-le contre ce qu'un humain propose. Vous payez beaucoup d'attention aux commentaires de l'utilisateur final dans vos premières versions et que vous leur permet de la fournir. Vous testez les conditions limites, telles que si le meilleur itinéraire nécessite en réalité des voyages de la destination pendant un moment ou si la route la plus courte de la distance est de 18 tours par rapport à une route plus directe légèrement plus longue. Vous faites des tests négatifs, comme si vous essayez de conduire de la Californie à Hawaii et assurez-vous que les œufs de Pâques intelligents sont en place.

3
Karl Bielefeldt