¿Cómo probaría la función "Obtener indicaciones" de Google Maps?

13

(Me imagino que esta sería una buena pregunta para la entrevista , pero en mi caso es más pragmática que eso).

Tenemos una aplicación grande y compleja que modela un proceso de reacción química extremadamente largo y sofisticado entre docenas de componentes químicos. Estamos en la etapa de diseño de las Pruebas de aceptación para la aplicación, pero estamos algo intimidados por la cantidad insoluble de posibles rutas para probar. Se me ocurrió que nuestra situación es muy parecida a la que el equipo de desarrollo de Google Maps debió enfrentar cuando llegó el momento de probar el algoritmo de planificación de ruta en su función "Obtener indicaciones". Obviamente no pudieron probar (verificar y validar) todas las rutas posibles. Entonces, ¿cómo obtuvieron la confianza de que su aplicación funcionaría en cada situación?

Y como no espero descubrir cómo lo hicieron, déjame preguntarte: ¿cómo harías para diseñar un conjunto de pruebas con una cobertura de código adecuada, para asegurarte de que una aplicación determinada es sólida, cuando es literalmente imposible? para sondear cada ruta potencial a través del sistema?

Lo que estoy buscando son los principios que usaría para dividir un problema intratable en piezas más pequeñas y manejables, cuya suma proporciona una estimación satisfactoria del conjunto: "No puedo probar todo, pero puedo probar esto , esto y esto, y eso es suficiente ". No estoy buscando un enfoque que sea "demostrablemente correcto", sino uno que sea prudente , dadas las limitaciones de presupuesto / tiempo del mundo real.

(Estoy usando el ejemplo de Google Maps como una especie de papel de aluminio para solicitar respuestas que sean lo más específicas posible).

kmote
fuente
En el pasado, Google Maps ha tratado de dirigirme hacia las calles de solo autobuses, por el camino equivocado por las calles de un solo sentido, y hacer giros en las intersecciones que no existen (por ejemplo, un paso elevado con solo una rampa). Creo que tienen la función "informar direcciones incorrectas", pero probablemente no sea algo que funcione en su situación. ¿La respuesta al bit sobre ellos probando todo? No lo hicieron, y realmente no necesitaban hacerlo.
John Lyon el
Como siempre con este tipo de preguntas, le recomiendo que lea los libros y artículos de Nassim Nicholas Taleb. Aquí hay un artículo técnico que se centra en las matemáticas, pero recomiendo leer sus libros.
jfrankcarr
No creo que pueda diseñar una prueba que cubra todos los casos para algo que sea suficientemente complejo. Si sabes cómo funciona el interior, puedes hacer pruebas para cada camino obvio, pero siempre habrá cosas en las que nadie haya pensado. Solo piensa en tantos como puede y espera que los que echa de menos no sean un problema demasiado grande.
Loren Pechtel
2
@jozzas: Todo lo que está describiendo son errores de la base de datos, en realidad no es un problema con el algoritmo de dirección de Google. Un equivalente sería esta mañana, mi satélite intentó dirigirme por un camino sin mantenimiento. Por otro lado, cuando me dio un aviso de cierre de carril sobre una carretera que estaba a punto de abandonar, es un error real. (El aviso obviamente solo mira la carretera en la que estás, no la ruta que está siguiendo.)
Loren Pechtel
1
Llámalo "Beta". Hecho. Es el camino de Google.
Paystey

Respuestas:

10

Trabajé en el campo de navegación para automóviles hace más de una década.

Paso A) Use un paquete de referencia y seleccione un conjunto de muestra grande, ejecute pruebas A / B. Sin buscar exactitud, buscando valores atípicos: el conjunto de referencia mostró Reroute 1234 como 10.34 km, y calculamos 123.5 km.

Paso B) - Refine nuestro software y el software de referencia - Agregue más muestras y reduzca las tolerancias.

Paso C): pruebas internas utilizando el conocimiento local en conjuntos de datos globales.

Paso D) UAT ... "Prueba de aceptación del usuario" Como en "Vender estas cosas y ver de qué se quejan más los clientes"

Si alguna vez usó productos de mapeo alrededor de mediados de la década de 1990 - 2000, sabe a lo que me refiero, aquellos de nosotros que todavía verificamos las instrucciones paso a paso cada vez.

De vuelta a tu pregunta de ejemplo. Lo que se le pregunta es cómo demostrar que un software es correcto. Si desea una prueba matemática, se ha demostrado que se puede hacer: para un software simple a un precio que excede cualquier presupuesto realista, para un paquete de software complejo, bueno, eso sigue siendo investigación ... La NASA tiene modelos para escribir software altamente confiable dentro de precios económicamente manejables, como lo hacen el Departamento de Defensa y la industria de la aviación, aunque aún son mucho más altos de lo que la mayoría está dispuesta a pagar. Al final, todo se reduce a cuánto estás dispuesto a pagar .....

Editar: Acabo de volver a leer tu OP. Parece que lo que está buscando es una forma rápida y económica de probar la calidad de un software complejo. No se puede probar en calidad. Debe tener un proceso robusto para saber que lo que está construido funciona correctamente. Si tiene que pensar en cómo demostrar que es correcto y ya tiene una "aplicación grande y compleja", es demasiado tarde.

Mattnz
fuente
5

Somos uno de los competidores de Google. Nuestra respuesta? Básicamente dos.

Primero, calculamos la solución completa de dirección a dirección. Sí, esa es una gran matriz. Peor aún, lo hacemos para todos los momentos del día, todos los días de la semana. Hay suficiente similitud en el dominio de entrada para almacenar en caché los resultados intermedios, lo que hace que el problema sea manejable. Aún así, trate de obtener una tarifa masiva en los discos duros.

Tenga en cuenta que este cálculo fuera de línea se realiza utilizando un algoritmo diferente. Utiliza mucha más memoria que el algoritmo que pretendemos probar, pero no linealmente más (es decir, utiliza menos de 1000 veces más memoria al calcular mil rutas).

En segundo lugar, los usuarios participantes nos proporcionan resultados del mundo real. Validamos millones de rutas conducidas. ¿Son las rutas reales tan rápidas como se predijeron?

Y seguro, sí encuentras errores de esa manera. Todos los tiempos. Por ejemplo, un tramo de carretera que está delimitado a ambos lados por una "zona de tráfico local solamente" *. Solo hay una forma;) que lo encontrará en las pruebas, y es cuando planifica una ruta a esa carretera en particular.

* Una "zona de solo tráfico local" solo se puede utilizar cuando comienza o finaliza una ruta en dicha zona. Por lo tanto, el tramo en el medio está desconectado de la red de carreteras principal. Esto es una falla de zonificación o de mapa.

MSalters
fuente
3

No es que Google escriba un código separado para cada par de direcciones en el mundo. Con la excepción de las heurísticas que entran en acción a mayor escala, el algoritmo para un viaje de 3 tramos es exactamente el mismo que para un tramo de 3000 tramos. Usted prueba a fondo las rutas más cortas y utiliza la inducción para mostrar que la prueba se aplica también a las rutas más largas.

Elige una muestra saludable de rutas del mundo real y compárala con lo que se le ocurre a un humano. Presta mucha atención a los comentarios de los usuarios finales en sus primeros lanzamientos, y les facilita proporcionarlos. Usted prueba las condiciones de contorno, como si la mejor ruta realmente requiere viajar lejos del destino por un tiempo, o si la ruta más corta por distancia tiene 18 vueltas en comparación con una ruta más directa que es un poco más larga. Hace pruebas negativas, como si estuviera tratando de conducir de California a Hawai, y se asegura de que haya huevos de Pascua listos.

Karl Bielefeldt
fuente
Estoy seguro de que todo lo que ha sugerido es exacto, pero no puedo evitar sentir que todavía no es lo suficientemente riguroso. "Elegir una muestra saludable de rutas" suena más como lo que podría hacer para un proyecto universitario, que lo que un equipo de desarrollo de clase mundial idearía. Y aunque estoy de acuerdo con su observación sobre las rutas de 3 tramos frente a las de 3000 tramos, probar incluso una gran fracción de las rutas de 3 tramos todavía parece bastante ambicioso. Siento que todavía nos falta algo fundamental aquí.
kmote
@kmote: "pero no puedo evitar sentir que todavía no es lo suficientemente riguroso" Por qué no, funcionó para la industria del software durante una generación, y no hay ninguna señal real de que esté a punto de ser reemplazado en el corto plazo. Nos pagan por escribir código que genera dinero, no por escribir código que sea perfecto. Ahora que lo pienso, se utiliza en medicina, ingeniería y prácticamente en todas las profesiones, y parece que funciona bien en esas industrias.
mattnz