Зачем это спрашивают
Кажется, что мобильное приложение — тот же сайт, только экран поменьше. Именно этот ответ интервьюер и хочет не услышать. Телефон живёт в другой среде: пользователь идёт по улице, теряет сеть в лифте, отвечает на звонок посреди оплаты, сворачивает приложение, и система выгружает его из памяти. Вопрос проверяет, видите ли вы эти ситуации и умеете ли превратить их в проверки с ожидаемым результатом.
Даже если вакансия в основном про веб, вопрос нередко задают: у многих продуктов есть приложение, и тестировщику приходится его проверять.
Как построить сильный ответ
Назовите отличия по группам, а затем покажите, как применяете это на конкретном экране. Перечень без ожидаемого поведения звучит слабо.
Чем мобильная среда отличается
- Прерывания. Входящий звонок, уведомление, будильник, блокировка экрана, переход в другое приложение и обратно.
- Жизненный цикл приложения. Приложение уходит в фон, а система может выгрузить его ради памяти. При возврате пользователь должен оказаться там же, с теми же введёнными данными.
- Сеть. Потеря соединения посреди запроса, переключение Wi-Fi на мобильную сеть, медленный интернет, режим полёта.
- Разрешения. Камера, геолокация, уведомления. Что будет, если пользователь отказал, разрешил «только сейчас» или отозвал разрешение в настройках.
- Поворот экрана. На Android при смене конфигурации экран по умолчанию пересоздаётся, и плохо написанный экран теряет состояние.
- Разнообразие устройств. Размеры и плотность экранов, версии ОС, оболочки производителей со своими правилами энергосбережения, вырезы под камеру.
- Установка и обновление. Чистая установка, обновление поверх старой версии с сохранением данных, принудительное обновление, удаление.
- Ссылки на внутренние экраны. Переход по ссылке из письма или пуша должен открыть нужный экран, в том числе если приложение не запущено или пользователь не авторизован.
- Ввод и ресурсы. Жесты, клавиатура, перекрывающая поле, расход батареи и трафика.
Как показать глубину
Возьмите один экран и для каждой ситуации назовите ожидаемое поведение. Например, экран оплаты:
| ситуация | ожидание |
|---|---|
| звонок во время оплаты | после звонка экран на месте, данные не потеряны |
| сворачивание и возврат | форма заполнена, оплата не ушла повторно |
| выгрузка из фона | приложение восстанавливает экран или понятно сообщает, что делать |
| потеря сети в момент отправки | понятное сообщение, нет «вечного» индикатора, повтор не создаёт второй платёж |
| смена Wi-Fi на мобильную сеть | запрос завершается или корректно повторяется |
| поворот экрана | введённые данные сохраняются |
| двойное нажатие на «Оплатить» | ровно один платёж |
Для проверки удобно знать пару инструментов: adb logcat для логов, adb install -r app.apk для обновления поверх с сохранением данных, прокси для имитации плохой сети, режим разработчика «Не сохранять действия» для проверки восстановления экрана.
Пример ответа
Главное отличие не в размере экрана, а в среде. Мобильное приложение постоянно прерывают: звонки, уведомления, блокировка, переход в другое приложение. Система может выгрузить его из фона, сеть пропадает или переключается с Wi-Fi на мобильную посреди запроса. Есть разрешения, которые пользователь может не дать или отозвать, поворот экрана, огромное число устройств, версий ОС и оболочек, установка и обновление поверх старой версии, переходы по ссылкам сразу на внутренние экраны. На каждую такую ситуацию я формулирую ожидание. Например, на экране оплаты после звонка или сворачивания введённые данные на месте, при потере сети — понятное сообщение, а повторное нажатие или повторная отправка не создают второй платёж.
Частые ошибки
- «Экран меньше, поэтому проверяю вёрстку». Это малая часть отличий.
- Список ситуаций без ожиданий. Интервьюер спросит «и что должно произойти?», и ответа не будет.
- Тестировать только на эмуляторе. Звонки, датчики, энергосбережение и оболочки производителей лучше проверять на реальных устройствах.
- Забывать про обновление. Чистая установка проходит, а обновление поверх старой версии ломает сохранённые данные.
- Не проверять, где баг. Если приложение показывает неверные данные, стоит посмотреть трафик и понять, ошибка в ответе сервера или в клиенте — так же, как на вебе.
Пример на MarketCove
У учебного магазина https://shop.tomiddle.com есть Android-приложение, и на нём удобно тренироваться. Как вы могли бы построить проверки:
- Корзина. Добавить товары, свернуть приложение, открыть несколько тяжёлых приложений, вернуться. Ожидание — корзина на месте.
- Оформление заказа. На шаге отправки включить режим полёта. Ожидание — понятное сообщение, после возврата сети заказ можно отправить, и он создаётся один.
- Форма заказа. Заполнить «Имя» и «Адрес» и повернуть экран. Ожидание — введённые данные на месте, форму не нужно заполнять заново.
- Вход. Войти, закрыть приложение и открыть снова. Ожидание — сессия сохранена или приложение понятно просит войти заново.
- История заказов. Оформить заказ в приложении и сверить его с профилем и ответом
GET /api/orders.
Задание для практики
Выберите один экран приложения магазина, например оформление заказа. Составьте таблицу из восьми строк: прерывание или смена состояния и ожидаемое поведение. Пройдите таблицу на эмуляторе, а если есть возможность — на реальном телефоне, и отметьте, где поведение расходится с ожиданием. Сравните свой список с вопросами в разделе про мобильное тестирование.
