Особенности тестирования приложений на мобильных устройствах

“Если вы считаете, что сейчас ваша жизнь слишком безболезненна и спокойна, советую потестировать что-нибудь на мобильных телефонах”
(Peter-Paul Koch, разработчик мобильных приложений, преподаватель)

Особенности тестирования мобильных приложений в целом

Мобильные пользователи ожидают, что устанавливаемые ими приложения стабильны, быстро реагируют на действия, безопасны, имеют простой пользовательский интерфейс, работают в режиме “24 часа и 7 дней в неделю” (особенно в приложениях, взаимодействующих с сервером).

Чтобы понять особенности тестирования мобильных приложений также следует принимать во внимание факторы, отличающие мобильные приложения от десктопных – специфичные и разнообразные ОС для мобильных платформ, различные изготовители и конфигурации комплектующих, функциональность устройств как коммуникаторов и т. п.

В связи с этими особенностями, подход к разработке приложений и, в частности, тестированию на мобильных устройствах довольно сильно отличается от десктопного. Возникает множество дополнительных важных нюансов и требований, которые необходимо протестировать. Немного осветим основные отличия в некоторых видах тестирования:

Тестирование обновлений — частые обновления системы приводят к необходимости обновлять приложение. Следует выполнять тестирование обновлений приложения и на стороне сервера, проверять пути установки приложения (WiFi, шнур, Bluetooth, SD).

Тестирование интернационализации позволяет на раннем этапе процесса разработки мобильного приложения убедиться в поддержке интернационализации — главным образом, в языковой поддержке. Могут возникнуть многие проблемы, связанные с нехваткой свободного пространства на экране, а также такие проблемы, как, например, форматирование дат.

Тестирование удобства пользования (usability) позволяет выявить части приложения, которые недостаточно привлекательны, или вызывают затруднения в навигации или использовании, убедиться, что модель потребления ресурсов приложением соответствует целевой аудитории. Например, офисные приложения без необходимости не должны вызывать чрезмерное потребление энергии. Зачастую это тестирование проводится в виде бета-тестирования.

Нагрузочное тестирование подразумевает наблюдение за использованием памяти и системных ресурсов; кроме того, нагрузочное тестирование позволяет выявить “узкие” места в приложении, связанные с производительностью, а также обнаружить опасные утечки памяти.

Случайное тестирование (monkey testing, стресс-тест) — приложение должно корректно реагировать на возникновение случайных и непредсказуемых событий. Мобильные устройства достаточно часто попадают в условия, в которых получают хаотичную бесполезную информацию (например, незаблокированный коммуникатор в кармане), потому приложение должно адекватно реагировать на подобные потоки данных.

Мультиплатформенное и мультидевайсовое тестирование – приложение должно правильно работать на всех конфигурациях устройств на всех устройствах, для которых разрабатывалось. Из-за фрагментации мобильных телефонов задача тестирования всех доступных устройств, на которых используются различные версии инструментария и которые имеют экраны с различными размерами, различный функционал, архитектуру ОС и аппаратное обеспечение настолько же важна, насколько трудновыполнима.

Лабораторное тестирование – имитация реальных условия качества связи.

Аттестационное тестирование используется для подтверждения соответствия приложения стандартам, лицензионным соглашениям и условиям использования:

Android

  • Установочный файл приложения (.apk) должен быть согласован с Program Policies .
  • В случае публикации обновлённой сборки желательно придерживаться порядка управления версиями (например, принятого порядка нумерации версий).
  • Приложение не должно противоречить документу UIG .
  • Android market полуавтоматически проверяет приложение на наличие вирусов (их наличие может привести к блокированию аккаунта издателя).

iPhone

  • Приложение должно иметь уникальное имя.
  • Приложение должно принадлежать к определённой категории.
  • Нужно предоставить ссылку для осуществления обратной связи с разработчиком.
  • Приложение не должно противоречить документу Human Interface Guidelines.
  • App store протестирует приложение на совместимость.
  • Приложение может быть отказано в сертификации по причинам наличия запрещённых материалов, непредвиденных задержек в работе или повторении существующих функций.

Перечень моментов, которые должны быть протестированы

Размер экрана и touch-интерфейс:

  • Все элементы должны быть такого размера, чтобы пользователь мог однозначно попасть по ним.
  • Отсутствие пустых экранов в приложении (либо опускаем такие экраны, либо пишем на них пояснительный текст для первого открытия).
  • Скорость отклика элементов должна быть достаточно высокой (использовать старые устройства, если поддерживаются приложением).
  • У всех нажимаемых элементов должно быть нажатое состояние (отклик на действие).

Ресурсы телефона:

  • Утечки памяти. Особенно может проявляться на окнах, с большим количеством информации (длинные списки как пример), во время задач с длительным workflow (когда пользователь долго не выходит из приложения), при некорректно работающем кэшировании изображений.
  • Недостаток места для установки или работы приложения.
  • Установка на карту SD.

Различные разрешения экрана и версии ОС:

  • Ретиновые и неретиновые экраны. На ретиновых экранах элементы интерфейса / текст будут мельче. Картинки для ретина-экрана могут попасть в неретина версию и тогда будут очень большими.
  • Версии ОС. Приложение не должно устанавливаться на неподдерживаемые устройства, обязательная проверка на всех возможных из поддерживаемых девайсов (полные тесты на ретиновых и неретиновых версиях с последними прошивками, дополнительные проверки на девайсах с другими прошивками).
  • Различные функции на девайсах: отсутствие / наличие камеры (автофокуса), отсутствие / наличие GPS.
  • Поддержка необходимых медиа-файлов данной моделью и ОС, потому что отдельные разработчики могут урезать поддержку работы с некоторыми форматами.

Реакция приложения на внешние прерывания

  • Входящие и исходящие SMS и MMS.
  • Входящие и исходящие звонки.
  • Изъятие аккумулятора.
  • Отключение и подключение провода.
  • Отключение и подключение сети.
  • Отключение и подключение SD-карты.
  • Включение и выключение проигрывателя.
  • Зарядка устройства.
  • Работа с физической клавиатурой (если в списке поддерживаемых моделей есть такие) – переносы строк, перемещение по ним и т. п.

In-app purchases:

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

Интернационализация (проверять и в портретном, и в ландшафтном режиме!):

  • Проверка корректности перевода.
  • Проверка того, что все надписи входят в соответствующие формы, кнопки и т.п.
  • Проверка форматов дат.
  • Проверка разделителей в числах (между разрядами и между целой и дробной частью).

Постоянная обратная связь с пользователем:

  • Реакция кнопок на нажатие.
  • Сообщения при загрузке контента / прогресс-бар.
  • Сообщения при ошибке доступа к сети.
  • Наличие сообщений при попытке удалить важную информацию.
  • Наличие экрана / сообщения при окончании процесса / игры.
  • Наличие и синхронность звуковых и вибрационных уведомлений с уведомлениями на экране.

Апдейты:

  • Убедиться, что поддерживаются те же версии ОС, что и предыдущая версия (если новая версия приложения использует новые возможности ОС, то для старых поддерживаемых версий ОС необходимо создание урезанной версии приложения).
  • Проверка адекватного обновления (сохраняются все данные пользователя и т. п.).

Мультиплеерные игры:

  • Корректность подключения игроков (напр., списывание баланса только после подключения).
  • Временные лаги.
  • Подключение через различные сети.
  • Корректное поведение при отключении игроков.

Аттестационное тестирование.

Проблемы, с которыми сталкивается тестировщик мобильного приложения

Первый и самый важный момент заключается в том, что тестирование мобильных телефонов займёт больше времени, чем вы предполагаете, даже если вы и так допускаете, что оно займёт больше времени. (Peter-Paul Koch).

Мобильные устройства работают от аккумуляторов, и потому вынуждены автоматически переходить в режим ожидания спустя пару минут бездействия. Это значит, что вам придётся включать телефон перед каждым тестированием, что при одновременном тестировании нескольких телефонов, занимает приличное количество времени. Конечно, на многих устройствах можно отключить автоматическую блокировку (или хотя бы сделать время отключения довольно большим), но желательно всё же работать с самыми распространёнными среди пользователей настройками ОС.

Переход в режим ожидания особенно неприятен при использовании таких систем тестирования, как Browserscope, требующим некоторое время для завершения. Возможно, что телефон перейдёт в режим ожидания прямо посередине теста.

Затем появляется проблема собственно набора определённого текста (например, адреса тестируемой страницы). Набор может занять кучу времени на телефоне с цифровой клавиатурой, но даже на телефонах с алфавитной (программной или аппаратной) клавиатурой придётся аккуратно вводить длинные тексты в несколько устройств с разными интерфейсами.

Для тестирования в условиях входящих звонков, смс, вам придётся переставлять SIM-карту из одного устройства в другой, для этого зачастую надо вынимать аккумулятор. Особенно остро эта проблема стоит при тестировании особенностей и услуг мобильных операторов на нестандартных и дорогих тарифах. Кроме того, вставив SIM-карту, придётся подождать, пока телефон не включился.

Часто приходится передавать тестируемые виджеты по Bluetooth, что так же довольно утомительно в условиях разнообразности интерфейсов.

Обычно все тесты производятся на одном устройстве, затем на другом и т. д. Это не так оптимально, как тестирование на всех устройствах одновременно, поскольку не даёт возможности просто сравнить вывод и выполнение тестов на двух устройствах, однако это наиболее экономичный по времени способ.

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

Инструменты для тестирования: ассортимент и возможности

Эмуляторы.

Эмулятор – программа, копирующая функционал и поведение другой программы.

Некоторые из преимуществ использования эмулятора:

  • оперативное тестирование приложения, когда целевой мобильный телефон недоступен (или оказывается в дефиците);
  • тестирование сложных или опасных сценариев, которые невозможно или не рекомендуется проверять на реальных мобильных телефонах (например, тесты, которые каким-либо образом могут вывести телефон
    из строя или нарушить условия соглашения с оператором сотовой связи).

Минусы:

  • зачастую эмуляторы очень требовательны к ресурсам, так как наиболее качественные из них эмулируют работу приложения с самого нижнего уровня;
  • то, что приложение работает на эмуляторе, не значит практически ничего, ведь пользователи будут запускать приложения на реальных мобильных телефонах, которые всегда отличаются даже от самых лучших эмуляторов.

Тестирование на целевом мобильном телефоне — это самый верный способ убедиться в правильном функционировании приложения, поскольку вы выполняете приложение на том же аппаратном обеспечении, которое будет у ваших пользователей.

Для всех распространённых мобильных ОС предлагаются бесплатные (для разработчиков) и довольно функциональные эмуляторы. Например, для Android есть официальный Android SDK, который включает в себя эмулятор мобильного устройства, реализующий все аппаратные и программные особенности типичного устройства. Альтернативой ему является Google Android Emulator. Он запускается на Windows как отдельное приложение без необходимости полностью загружать и устанавливать Android SDK.

Так же, конечно, есть и другие решения:

MobiOne Developer это mobile Web IDE для Windows помогающее разработчику программировать, тестировать, отлаживать упаковывать и внедрять мобильные веб-приложения на устройства. Решение платное, поддерживает iPhone и Android.

TestiPhone – основанный на веб-браузере симулятор для быстрого тестирования веб-приложений для iPhone. Работает с использованием Internet Explorer 7, Firefox 2 и Safari 3. Бесплатно, но симуляция очень ограниченная.

Облачные платформы устройств

Позволяют удалённо протестировать свой продукт на множестве различных устройств, передавая данные о тестирования разработчику. Самые знаменитые – Perfecto Mobile и Device Everywhere. Суть этих решений в том, что у них стоит стенд с реальными мобильными устройствами, подключенными по кабелю, и веб-камера, передающая изображения с телефона. Внутрь фотографии телефона вставлено изображение с веб-камеры. Управляется полностью мышкой. Также Perfecto Mobile и Device Anywhere удалённо предоставляют устройства «напрокат». У них стоит множество различных телефонов, и час работы с одним телефоном стоит около $15.

Плюсы:

  • черный ящик — почти нет вмешательства в тестируемое приложение;
  • один инструмент и тестовый скрипт используется для тестирования на всех мобильных платформах;
  • многообразие устройств.

Минусы:

  • автоматическое тестирование дорогое;
  • задержки при взаимодействии с телефоном в России.

Автоматизированное воспроизведение скриптовых тестов

JamoSolution – одна из самых многообещающих платформ, на которой сейчас разрабатывается несколько инструментов (например, M-eux test и SeeTest). Она позволяет тестировать iPhone, Android, Windows Phone и другие платформы. Поддерживается запись тестов (record&play) и можно тестировать iPhone приложения на Windows. Работает через установку на устройстве приложения-агента, что освобождает разработчика от модифицирования своего приложения.

EggPlant от студии TestPlant позволяет запускать свой тестовый скрипт на множестве устройств одновременно, определяя выходные данные методом распознавания картинки на экране. Поддерживает тестирование на устройствах Android и iOS, эмулятарах Android, iOS и Windows Phone.

Нагрузочное тестирование

HP Virtual User Generator. Служит для нагрузки сервера мультиплицированием входящего траффика. Тестировщик создаёт скрипт, запускает его на устройстве, HP VuGen перехватывает траффик и имитирует запросы к серверу с подобной информацией, но от нескольких тысяч или миллионов устройств одновременно.

Сервисы для бета-тестирования

uTest – сообщество из 45 тыс профессиональных тестеров из 180 стран. Реальные пользователи протестируют работу приложения. Платный. (iPhone, Android, Windows Phone 7, iPad)

The Beta Family – бесплатный сервис для тестирования приложения. Заводите аккаунт, заливаете бета-версию приложения, рассылаете приглашение на тестирование, обрабатываете результаты тестирования. Можно выбрать тип бета-тестеров: private или public. Если public, то приложение смогут тестировать все желающие. (iPhone, iPad, Android)

Zubhium. Предоставляет SDK, с помощью которого вы в свое приложение встраиваете код для автоматического сбора информации об ошибках. Разработчик выкладывает бета-версию, приглашает тестеров, получает информацию. В настоящий момент на стадии беты и поэтому – бесплатен. (Android)

MOTOREADY App Testing: MOTOROLA XOOM – платный сервис Motorola для тестирования Android-приложений.

Сборщики статистики

Всегда интересно знать, как пользователи работают с вашим приложением: какие функции наиболее востребованы, какие кнопки нажимаются, какие настройки меняются, какие ошибки совершаются, сколько времени пользователь проводит в приложении. Неплохо так же представлять себе, что это за пользователи – какая версия прошивки у их девайсов, где они географически расположены и т.д. Самый простой путь сбора такой статистики – воспользоваться готовой системой сбора аналитической информации. Например:

  • Flurry (бесплатная) (iOS, Android, Windows Phone)
  • Apsalar (бесплатная) (iOS, Android)
  • BuzzBox (бесплатная) (Android)
  • Google Analytics (бесплатная) (iOS, Android)
  • Mixpanel (платная) (iPhone, Android)
  • Localitics (платная) (iOS, Android, Windows Phone)
  • Bango (платная) (Android, Windows Phone)

У каждой системы есть свои изюминки: real-time обновление статистики (Localitics), суперточность с отслеживанием уникальных ID каждого пользователя (Bango), наличие средств для проведения опроса пользователей (Apsalar), наличие средств для регулярной отправки уведомлений пользователям (BuzzBox) и т.д. Естественно, есть и море отличий: в интерфейсе, в средствах анализа, в наличии дополнительных API, в стоимости, в наборе поддерживаемых платформ и т.п.

Комплексные решения

TestQuest Pro – инструмент для полного автоматического тестирования, разработанный для компаний и предприятий. Поддерживает функциональное, нагрузочное, регрессивное тестирование, тестирование качества и взаимодействия.

Experitest.com – позволяет проводить автоматическое, ручное (удалённо) и облачное тестирования на большом спектре устройств (правда, как-то дорого – $2 500 в год за автоматическое тестирование, $4000 в год за ручное).

Стоит отметить существование компаний, специализирующихся на тестировании, в том числе и на тестировании приложений на мобильных устройствах. Например, Qulix QA производят всестороннее тестовое покрытие – верификация работы приложения относительно ОС, платформ, языков и др; прохождение сертификации для подписи продуктов и попадания в маркет; тестирование приложений на реальных мобильных устройствах.

Тестирование на конкретных устройствах

iOS

Очень строгие требования к интерфейсу и функционалу, особая закрытая платформа, своеобразный механизм дистрибуции приложений – все эти требования довольно четко выделяют тестирование программного обеспечения для iOS в специфическую отдельную нишу со своими специфичными проблемами.

Особенности бета-тестирования

Бета-тестирование на iPhone — трудоемкий для тестировщика процесс. Все дело в его многоступенчатости: сначала пользователю нужно найти UDID своего устройства, затем отправить его разработчикам. Только после этих действий со стороны пользователя его аппарат вносится в список зарегистрированных девайсов, а уж потом собирается рабочая версия и отсылается ему на почту письмо с просьбой об установке. Пользователь заходит в iTunes, инсталлирует приложение и только после всех вышеперечисленных операций оно оказывается на его устройстве. Так же пользователь должен отсылать feedback вручную (автоматизированно это никак нельзя сделать). Поэтому для iPhone вопрос об использовании специальных сервисов для бета-тестирования стоит более остро, чем для других платформ.

Android

Манкитестинг

Monkey является инструментом стресс-тестирования. Генерирует псевдослучайные действия пользователя. Впрочем, Monkey позволяет достаточно гибко настроить «хаотичность», интервал между событиями, их тип и т.п. Для подобного тестирования исходный код приложения не требуется — оно просто должно быть установлено на устройство либо эмулятор, а запуск в простейшем случае осуществляется из консоли.

Инструменты для автоматического тестирования

Самое популярное решение — это Robotium. “It’s like Selenium, but for Android” — утверждают разработчики. Тесты пишутся на Java. Фактически, Robotium — это библиотека для обычных Unit тестов, возможности запускать тесты на устройстве (remote control) нет. Чтобы тестировать приложения, необходимо их собрать с этой библиотекой. Есть возможность тестировать приложения без исходников, но процесс нетривиальный.

TestDroid — это плагин для Эклипса, который позволяет записывать тесты (record&play) в формате Robotium. Система взаимодействует с телефоном путем стандартного Android debugger. Разработчики обещают выпустить еще и TestDroid server, он позволит создавать кластеры для тестирования. Решение платное и ещё в стадии бета-тестирования.

MonkeyRunner. Позволяет выполнять функциональное тестирование приложения, предоставляя API для управления устройством. MonkeyRunner является более низкоуровневым по сравнению с Robotium, и не требует исходного кода приложения. MonkeyRunner использует Jython и скрипты или сценарии тестов могут быть написаны на Python, или записать действия пользователя с помощью рекордера.
Monkey и MonkeyRunner поставляется вместе в составе Android SDK.

FoneMonkey for Android – бесплатный open source инструмент для тестирования интерфейса. Программа умеет записывать высокоуровневые action-based test automation скрипты на Java/Java Script, которые можно редактировать и (при необходимости) писать вручную.

Sikuli – еще один open sourсe инструмент для автоматизации тестирования GUI. Открытая кросс-платформенная визуальная среда создания сценариев-скриптов, которая ориентирована на программирование графического интерфейса при помощи изображений (скриншотов). Особенность – скрипт, задающий последовательность действий, позволяет использовать скриншоты – чтобы дать команду нажать кнопку, достаточно подставить в скрипт скриншот этой кнопки.

Литература:
Чуть более года назад вышла книга, которая может быть интересна и полезна разработчикам и тестировщикам под Android: “Android Application Testing Guide” by Diego Torres Milano.

www.enterra.ru