В навигации есть ситуации, которые невозможно честно проверить, не выходя в «поле». Можно написать код, прогнать тесты, собрать метрики — и всё равно получить кейс, когда в жизни геопозиция «зависла», позиция «улетела», а ведение по маршруту начинает жить своей жизнью.
Мы уже рассказывали, почему геопозиция бывает нестабильной и как 2ГИС помогает пользователям в такие моменты. Сегодня мы выпустили ещё несколько обновлений — в том числе сенсорную (инерциальную) навигацию. В этой статье расскажем, как нам в этом помогли полевые проезды.
Зачем нужны полевые проезды
Мы постоянно проверяем навигационные фичи в «поле» — и даже делились такими историями. А когда мы начали улучшать навигацию в условиях нестабильной геопозиции, ценность полевых проездов стала ещё выше.
Это связано с тем, что в реальности те самые аномалии с геопозицией проявляются по-разному: маркер залипает, резко скачет по маршруту или «телепортируется» в другую локацию. Часть подобных сценариев можно эмулировать при стендовом тестировании, однако что-то невозможно воспроизвести искусственно.
Отдельная причина — устройства разных классов и с разными аппаратными характеристиками. Производительность, качество GPS-модуля и работа датчиков существенно отличаются. На более слабом или устаревшем устройстве проблемы могут проявляться значительно сильнее, а на современном устройстве — вообще отсутствовать. Бывает и наоборот: особенности конкретной модели дают эффекты, которых нет на других телефонах.
У полевых проездов несколько практических целей:
проверить, как функционал работает в реальных условиях эксплуатации;
подтвердить или опровергнуть гипотезы по новым функциям или исправлениям;
сравнить поведение предыдущей и новой версий приложения в одинаковых условиях — понять, что улучшилось, что ухудшилось и что ещё требует доработки;
собрать данные для дальнейшего изучения и разработки.
В этот раз основной задачей проездов стала сенсорная (инерциальная) навигация — наша новая фича, которая помогает лучше ориентироваться на маршруте в зонах с аномалиями геопозиции. Полноценно проверить её «на столе» было нельзя: для неё критичны реальные данные с датчиков во время движения, и только в проездах видно, насколько устойчиво ведение по маршруту в сложных условиях.
В работе над ней наши разовые выезды мы превратили в регулярный процесс — дальше подробнее о том, как всё устроено.
Процесс полевого тестирования
Подготовительные работы
Всё начинается с задачи: разработчики описывают, что сделали, и добавляют комментарии, на что обратить внимание и какие сценарии особенно важны. Дальше мы со стороны QA разбираем задачу, уточняем спорные моменты и дополняем чек‑лист проверки своими кейсами.

Когда становится понятно, что и как нужно проверить, подбираем маршрут под условия задачи.
Например, если нужно проверить переход геопозиции из стабильной в нестабильную и посмотреть, как ведёт себя наш курсор в этот момент, мы выбираем маршрут так, чтобы на нём были:
участки, где мы уже встречали нестабильную геопозицию;
«усилители» аномалий — тоннель, эстакады, плотная высотная застройка (всё это может влиять на стабильность геопозиции).
Комплект устройств
Типовой комплект для проезда:
2 ноутбука;
4 телефона;
1 камера;
2–4 крепления для телефонов;
и безлимитная внимательность и хорошее настроение:)


Телефоны, крепления и ноутбуки — более‑менее стандартный набор. А вот камера может показаться необычным атрибутом, поэтому поясню, зачем она нужна:
это дополнительная фиксация проверки;
по видео разработчикам проще понять, что происходило в действительности: камера одновременно снимает экраны устройств и дорожную ситуацию;
для тестировщиков это «дополнительные глаза», которые не моргают: можно спокойно пересмотреть спорный момент после проезда;
если нужен быстрый одиночный выезд, можно ехать, не отвлекаясь на телефоны: камера всё запишет, а разбор будет уже после.
Из стандартного набора отдельно отмечу, что нужны:
телефоны разных классов и платформ(Android/iOS), чтобы видеть, как функция ведёт себя на разном железе;
крепления, потому что несколько устройств в руках не удержать, а смотреть на них нужно одновременно;
ноутбуки — для чтения логов, доступа к сборкам/задачам и оперативной связи с коллегами.
Проезд
После всех подготовительных работ начинаем поездку. Обычно нас двое:
водитель — следит только за дорогой;
наблюдатель — смотрит на устройства, отмечает аномалии и фиксирует происходящее.
Запускаем один и тот же маршрут на всех устройствах, включаем запись экрана и включаем камеру, чтобы она одновременно снимала дорогу и устройства. И поехали!
Когда встречается аномалия на маршруте — фиксируем время, устройство, какая аномалия и так всю поездку по маршруту.
Чаще всего мы видим такие сценарии:
телепорт на другую улицу — самая неприятная аномалия;
залипание маркера — маркер «застывает» в точке и перестаёт двигаться, хотя машина едет
телепорт в другие города — редкий, но самый сложный для фиксации сценарий: при старте приложения геопозиция определяется в другом городе.
Разбор проезда
После возвращения мы собираем артефакты проезда: записи экранов с устройств, видео с камеры и логи с устройств.
Дальше монтируем так, чтобы в одном файле было видно:
дорожную обстановку (камера);
экраны устройств (записи экрана).
Если устройств много — делаем отдельные ролики под каждую платформу (Android/iOS). Если проезд с проверкой задачи, где достаточно по одному устройству с каждой платформы, — делаем одно видео.
Во время монтажа (или сразу после) сверяем наши заметки по аномалиям с итоговым видео. На выходе формируем отчёт по проезду, в который прикладываем всё, что нужно разработке для разбора: видео, логи, таймкоды и описание наблюдений.
Пример
Вот как выглядит разбор одного проезда по видео, когда мы сравниваем тестовую сборку с сенсорным ведением и обычную версию из стора.
Самый старт видео. Мы стоим на светофоре. Тестовая сборка с сенсорным ведением отстаёт от нашего реального местоположения, а обычная сборка уезжает дальше по маршруту и зависает.
Когда автомобиль начинает движение — маркер тоже начинает движение. Аналогично с остановками: поэтому маркер отстал по маршруту, но когда мы начали движение и получили более точные координаты, он позиционируется лучше и уже начинает вести ровно там, где мы едем (на 0:54 видео). А маркер на версии из стора переместился на точку, где мы стояли на светофоре, и завис.
3:49 Маркер уходит в отсечку по скорости и уезжает дальше по маршруту. Такие моменты в сенсорном ведении встречаются либо из‑за того, что мы едем по датчикам телефона, либо из‑за неровной дороги или дороги под наклоном, и скорость может измеряться не совсем точно. Поэтому маркер может ускоряться и уезжать вперёд или, наоборот, замедляться и начать отставать. Если обратить внимание на экран телефона с обычной сборкой — маркер опять переместился и застыл в координатах, которые смогли определить.
5:19 Маркер спозиционировался недалеко от нашего реального местоположения после того, как уезжал вперёд по маршруту.
6:10 У маркера есть прыжок вперёд по маршруту, но в реальности мы почти догоняем его на 7:08, хоть он и ведёт впереди на некотором расстоянии.
7:42 Маркер совершает прыжок вперёд по маршруту, а на 8:12 точно позиционирует нас на маршруте.
В таймкодах мы указали моменты, где ведение по сенсорам отрабатывало неидеально, и почти не упоминали поведение обычной версии. Обычная сборка в этих условиях прыгала по координатам, где смогла определить местоположение, и периодически «залипала». В сравнении этих версий инерциальная навигация показала себя заметно лучше.
Итоги
Для продукта внедрение регулярного процесса полевых проездов стало важным результатом: мы собираем больше данных и помогаем чаще находить и разбирать сложные кейсы, чтобы приложение продолжало стабильно работать даже без спутниковых сигналов. Помимо сенсорной навигации мы в таком режиме проверяли другие наши фичи — например, «Шаг за шагом» и «Зелёная волна».
Для тестировщиков, в частности, полевые выезды тоже дают много пользы: это та самая практика, которую сложно получить иначе (например, мне сразу на собеседовании сказали, что часть задач придётся проверять «в поле» — и меня это сразу зацепило).
Во‑первых, становится понятнее, какие сценарии потом можно попробовать воспроизвести на стенде, а какие в принципе проверяются только в движении.
Во‑вторых, со временем нарабатывается «насмотренность»: на что обращать внимание в следующий раз и какие маршруты выбирать, чтобы поймать нужную аномалию.
И ещё момент — проезды почти всегда уникальны. Один и тот же маршрут может отработать по‑разному на одном и том же устройстве и в одной и той же сборке. Иногда это ощущается как охота за погодным явлением: в фильмах «Смерч» или «Навстречу шторму» герои охотятся за торнадо, а мы — за аномалиями с геолокацией:)
wl2776
Не хватает магнитолы на Android, туда ведь тоже можно поставить 2ГИС