Где я и где мои данные? Улучшаем тестируемость служб геолокации |
13.01.2025 00:00 |
Автор: Эш Уинтер (Ash Winter) Службы геолокации: критичны для функциональности, сложны для тестированияНедавно я работал над мобильным приложением, бросившим тестированию настоящий вызов. Это приложение работало в фоне, используя службы геолокации. Пользователь часто держит телефон в кармане, занимаясь своими делами. Приложение генерирует советы для пользователей на основании посещенных ими мест. Тестирование отслеживающих местоположение приложений может занимать много времени, так как тестировщику необходимо перемещаться так же, как реальному пользователю. На имитаторы и подмену геолокации полностью полагаться нельзя – нужно тестировать и в живой природе. К тому же надо учитывать множество различных конфигураций – у ряда устройств отслеживание геолокации идет по WiFi-точкам. Короче говоря, для качественного тестирования приложения нужно улучшать его тестируемость. Улучшение тестируемости: модель «Контролируемость, Наблюдаемость, Декомпозируемость и Простота» (CODS) Говоря о тестируемости, важно опираться на некую модель. Мой друг Роб Мини создал модель «Контролируемость, Наблюдаемость, Декомпозируемость и Простота» (CODS).
Предложите команде начать пользоваться этой моделью еще до того, как написана первая строчка кода. На этом этапе заложить тестируемость куда легче. Я подробно опишу ряд улучшений, внедренных нами в приложение по ходу его создания. В нашем случае мы начали с декомпозируемости, потому что возможность тестировать каждый компонент независимо дает нам наиболее раннюю обратную связь. Декомпозируемость на практике: выбор сторонних библиотек и создание специализированных интерфейсовНа основании опыта своей команды я предлагаю вот что:
Если вы, как тестировщик, можете участвовать в обсуждении использования сторонних библиотек и архитектуры интерфейса, тестировать будет намного проще. Контролируемость на практике: настройка состояний приложенияЛегко представить, как многолико приложение, зависящее от отслеживания местоположения. Передвижение на машине, а не пешком, долгая остановка с потерей позиционного сигнала, проезд через тоннель – это лишь несколько примеров. Странных моментов будет очень много. Тестированию крайне пригодится сбор обратной связи с вашего устройства. Да, ее применение ограничено, особенно при локализации багов, потому что бесконечное количество возможных точек сильно усложняет воспроизведение найденных проблем. Когда вы отчитываетесь о сложных в воспроизведении багах, это не улучшает ваших отношений с разработкой. Для тщательного тестирования кода надо иметь возможность задать приложению любое из его важных состояний. Это требует контролируемости. Вам понадобятся инструменты, а в мире геолокационных служб файлы GPS Exchange Format (GPX), содержащие остановки и маршруты – то, что доктор прописал. Нам нужно было:
перемещений. Чтобы улучшить тестирование, мы пользовались тремя типами инструментов:
Пользуясь таким набором, мы легко делились информацией о багах и исследовательском тестировании. Ключевым фактором были данные, сгенерированные физическим устройством, а затем мы могли воспроизводить конкретные сценарии, используя специализированные GPX-файлы. Наблюдаемость на практике: сбор информации о службах геолокацииКонтролируемость и наблюдаемость – две стороны одной медали. Вам нужно иметь возможность видеть, настроили ли вы нужное состояние в приложении. Также надо знать, что происходит, когда вы переходите из состояния в состояние. Наблюдаемость сейчас широко обсуждается, а подходящие инструменты варьируют по цене и сложности. Изучите вопрос, прежде чем тратить деньги. Мы внедрили ряд паттернов:
Чтобы этому препятствовать, пронумеруйте все важные события, дав им уникальные идентификаторы и читабельные имена: { Для нашей команды просмотр логов также стал отличным упражнением, чтобы разобраться, где нам вообще нужны эти логи.
Простота на практике: оптимизация тест-автоматизации служб геолокацииАвтоматизация тестирования мобильных приложений – задача сложная, и усложняется еще сильнее, если запускается в пайплайне. Приложения так же должны работать в фоне. А если для любого иного тестирования применяются эмуляторы, на их геолокационные данные нельзя полагаться. Упрощайте: концентрируйтесь на юнит-тестах и компонентных тестах, они гораздо надежнее. Осмотрительно добавляйте end-to-end тесты. Сконцентрируйтесь на трех областях:
Помните об этих аспектах, автоматизируя тестирование, и избежите множества проблем. Учитывая, что сборка мобильного приложения занимает много времени, очень важно беречь время тестирования. ЗаключениеВ ходе тестирования мы нашли множество интересных проблем. Один из моих любимых скрытых, но разрушительных багов был связан с тем, что устройства автоматически экономили расход батареи, ограничивая отслеживание геолокации. Тестирование мобильных приложений может быть наисложнейшим, потому что они полагаются на фоновые процессы – например, на службы геолокации. Улучшение тестируемости жизненно важно для качества тестирования. Благодаря модели «Контролируемость, Наблюдаемость, Декомпозируемость и Простота» (CODS) у нас есть отличный фреймворк, ведущий нас по пути оптимальной тестируемости. |