Как бы вы протестировали функцию «Проложить маршрут» на Картах Google?

13

(Я думаю, это был бы хороший вопрос для интервью , но в моем случае это более прагматично, чем это.)

У нас есть большое и сложное приложение, которое моделирует чрезвычайно длительный и сложный процесс химической реакции между десятками химических компонентов. Мы находимся на стадии разработки Приемочных тестов для приложения, но нас несколько пугает несметное количество возможных путей для тестирования. Мне пришло в голову, что наша ситуация очень похожа на то, с чем столкнулась команда разработчиков Google Maps, когда пришло время протестировать алгоритм планирования маршрута в их функции «Получить направления». Очевидно, они не могли проверить (проверить и подтвердить) каждый возможный маршрут. Так как же они получили уверенность, что их приложение будет работать в любой ситуации?

И поскольку я не ожидаю узнать, как они это сделали, позвольте мне спросить вас: как бы вы разработали набор тестов с адекватным покрытием кода, чтобы убедиться, что данное приложение устойчиво - когда оно буквально невозможно исследовать каждый потенциальный путь через систему?

То, что я ищу, - это принципы, которые вы бы использовали, чтобы разбить неразрешимую проблему на более мелкие, поддающиеся обработке куски, сумма которых обеспечивает удовлетворительную оценку целого: «Я не могу проверить все, но я могу проверить это , этого и этого - и этого достаточно. Я не искал подход , который является «доказуемо правильным», а тот , который благоразумен , учитывая реальные ограничения бюджета / время.

(Я использую пример карт Google как нечто вроде фольги, чтобы получить ответы, которые являются как можно более конкретными.)

kmote
источник
Google Maps в прошлом пытался направить меня на автобусные улицы, неправильным путем по улицам с односторонним движением, и делать повороты на перекрестках, которые не существуют (например, эстакада только с выездом). Я считаю, что у них есть функция «сообщить о неверных направлениях», но это, вероятно, не то, что будет работать в вашей ситуации. Ответ на бит о том, что они все тестируют? Они не сделали, и им действительно не нужно.
Джон Лион
Как всегда с этим вопросом, я рекомендую вам прочитать книги и статьи Насима Николаса Талеба. Вот техническая статья , посвященная математике, но я настоятельно рекомендую прочитать его книги.
jfrankcarr
Я не верю, что вы можете разработать тест, который охватывает все случаи для чего-то достаточно сложного. Если вы знаете, как работает внутренность, вы можете придумать тесты для каждого очевидного пути, но всегда найдутся вещи, о которых никто никогда не думал. Вы просто думаете о как можно большем количестве и надеетесь, что те, по которым вы скучаете, не слишком большая проблема.
Лорен Печтел
2
@jozzas: Все, что вы описываете, это ошибки базы данных, а не проблема алгоритма направления Google. Аналогичным было бы сегодня утром мой сатнав попытался направить меня по необслуживаемой дороге. С другой стороны, когда он давал мне рекомендации по закрытию полосы движения на дороге, которую я собирался оставить, это настоящая ошибка. (Очевидно, что консультативный совет смотрит только на дорогу, по которой вы идете, а не на маршрут, по
которому
1
Назовите это "Бета". Выполнено. Это путь Google.
Пейстей

Ответы:

10

Я работал в области автомобильной навигации более десяти лет назад.

Шаг A) Используйте справочный пакет и выберите большой набор образцов, запустите A / B тесты. Не ищем точности, ищем выбросы - контрольный набор показал Reroute 1234 как 10,34 км, и мы вычислили 123,5 км.

Шаг B). Уточнение нашего программного обеспечения и эталонного программного обеспечения. Добавление большего количества образцов и уменьшение допусков.

Шаг C) - Внутреннее тестирование с использованием локальных знаний в глобальных наборах данных.

Шаг D) UAT ... «Приемочный тест пользователя» Как в «Продайте этот материал и посмотрите, на что клиенты больше всего жалуются»

Если вы когда-либо пользовались картографическими продуктами примерно в середине 1990-х - 2000-х, вы знаете, что я имею в виду, те из нас, кто все еще проверял направление поворота за поворотом каждый раз.

Обратно к вам пример вопроса. Вас спрашивают, как доказать, что часть программного обеспечения верна. Если вам нужны математические доказательства, было показано, что это можно сделать - для простого программного обеспечения по цене, превышающей любые реалистичные бюджеты, для сложного программного пакета, ну, это все еще исследование ... У НАСА есть модели для написания высоконадежного программного обеспечения. в экономически управляемых ценах, как DoD и авиационная промышленность - хотя все еще намного выше, чем большинство готовы платить. В конце концов, все сводится к тому, сколько вы готовы заплатить .....

Изменить: я просто перечитал вас ОП. Кажется, вы ищете быстрый и дешевый способ проверить качество сложного программного обеспечения. Вы не можете проверить качество. Вы должны иметь надежный процесс, чтобы вы знали, что то, что построено, работает правильно. Если вам нужно подумать о том, как доказать, что это правильно, и у вас уже есть «большое и сложное приложение», вы опоздали.

mattnz
источник
5

Мы один из конкурентов Google. Наш ответ? В основном два.

Во-первых, мы рассчитываем полное адресное решение. Да, это большая матрица. Еще хуже, мы делаем это для всех времен дня, всех дней недели. Существует достаточное сходство во входной области для кэширования промежуточных результатов, что делает проблему доступной. Тем не менее, попробуйте получить оптовую ставку на жестких дисках.

Обратите внимание, что это автономное вычисление выполняется с использованием другого алгоритма. Он использует гораздо больше памяти, чем алгоритм, который мы намереваемся протестировать, но не линейно больше (то есть он использует менее чем в 1000 раз больше памяти при вычислении тысячи маршрутов).

Во-вторых, участвующие пользователи предоставляют нам реальные результаты. Мы проверяем миллионы пройденных маршрутов. Являются ли реальные маршруты такими же быстрыми, как и предполагалось?

И конечно, вы находите ошибки именно таким образом. Постоянно. Например, участок дороги, ограниченный с обеих сторон «зоной только местного движения» *. Есть только один способ;) что вы найдете это в тестировании, и именно тогда вы планируете маршрут к этой конкретной дороге.

* «Зона только для местного трафика» может использоваться только когда вы начинаете или заканчиваете маршрут в такой зоне. Поэтому участок посередине отсоединен от главной дорожной сети. Это ошибка зонирования или карты.

MSalters
источник
3

Это не так, как Google пишет отдельный код для каждой пары адресов в мире. За исключением эвристики, которая включается в большем масштабе, алгоритм для 3-этапного путешествия точно такой же, как и для 3000-этапного. Вы тщательно тестируете более короткие пути и используете индукцию, чтобы показать, что тестирование применимо и к более длинным трассам.

Вы выбираете здоровый образец реальных маршрутов и сравниваете его с тем, что придумывает человек. Вы уделяете большое внимание отзывам конечных пользователей в своих первых выпусках и облегчаете их предоставление. Вы проверяете граничные условия, например, если лучший маршрут действительно требует некоторого времени отъезда от пункта назначения или если самый короткий маршрут на расстоянии имеет 18 поворотов по сравнению с более прямым маршрутом, который немного длиннее. Вы проводите отрицательное тестирование, например, если вы пытаетесь ехать из Калифорнии на Гавайи, и убедитесь, что на месте есть умные пасхальные яйца.

Карл Билефельдт
источник
Я уверен, что все, что вы предложили, является точным, но я не могу не чувствовать, что оно все еще недостаточно строго. «Выбор здорового образца маршрутов» больше напоминает то, что я мог бы сделать для проекта семестрового обучения, чем то, что разработала бы команда разработчиков мирового уровня. И хотя я согласен с вашим наблюдением о маршрутах с 3 участками против 3000, проверка даже значительной части маршрутов с 3 участками все еще кажется довольно амбициозной. Я чувствую, что мы все еще упускаем что-то фундаментальное здесь.
kmote
@kmote: «но я не могу не почувствовать, что он все еще недостаточно строг». Почему бы и нет, это сработало для индустрии программного обеспечения целое поколение, и нет никаких реальных признаков того, что он скоро будет заменен. Нам платят за написание кода, который делает деньги, а не за то, что он пишет идеально. Если подумать, то, что используется в медицине, машиностроении и практически во всех профессиях, и, похоже, хорошо подходит для этих отраслей.
Mattnz