Интеллектуальные устройства ANDROID получили широкое распространение после завоевания огромной популярности в последние годы. По состоянию на июль 2017 года официальный магазин Google Play распространяет более трех миллионов приложений для Android, охватывающих более 30ти категорий - от развлекательных и персонализированных до образовательных и финансовых. Такая популярность среди сообществ разработчиков объясняется доступной средой разработки, основанной на знакомом языке программирования Java, а также наличием библиотек, реализующих различные функциональные возможности.
К сожалению, экосистема распространения Android не защищена от плохо протестированных приложений. Однако, как сообщает Kochhar, подверженные ошибкам приложения могут существенно повлиять на работу пользователей и привести к понижению их рейтинга, что в конечном итоге нанесет ущерб репутации разработчиков. Вместо ручного тестирования, которое часто трудоемко, требует много времени и ошибок, постоянно растущая сложность и огромное количество приложений для Android требуют масштабируемых, надежных и заслуживающих доверия решений для автоматизированного тестирования.
Тестирование приложений для Android направлено на тестирование функциональности, удобства использования и совместимости приложений, работающих на устройствах Android.
Типичный рабочий процесс:
- На шаге (1) целевое приложение устанавливается на устройство.
- Затем, в Шаге (2), приложение анализируется для создания тестовых примеров. Этот этап является необязательным и некоторые методы тестирования, такие как автоматизированное случайное тестирование, не нуждаются в получении предварительных знаний для генерации тестовых случаев.
- Затем, в Шаге (3), эти тестовые случаи отправляются на устройство Android для выполнения приложения.
- На Шаге (4) поведение исполнения рассматривается и собирается с различных точек зрения.
- Наконец, в шаге (5) приложение удаляется, а соответствующие данные стираются.
Хотелось бы напомнить, что установка целевого приложения иногда не является необходимостью, например, в таких структурах, как Robolectric, позволяющей проводить испытания непосредственно в JVM. Фактически, эту схему можно взять для описания рабочего процесса тестирования практически любого программного обеспечения, кроме Android-приложений. Тестирование приложений для Android, напротив, попадает в уникальный контекст и часто не использует общие методы тестирования. Существует несколько отличий от традиционного (например, Java) тестирования приложений, которые мотивируют исследования по тестированию приложений для Android.
- Во-первых, хотя приложения разработаны на Java, традиционные инструменты тестирования на основе Javabased не сразу же могут быть использованы в приложениях на базе Android, поскольку большинство взаимодействий с потоками управления в Android регулируются специальными событийными механизмами, такими как внутрикомпонентная связь (ICC). Для решения этой первой задачи было разработано несколько новых инструментов тестирования, специально предназначенных для учета специфики Android. Например, RERAN был предложен для тестирования приложений для Android с помощью чувствительного ко времени и касанию механизма записи и воспроизведения, в попытке захвата, представления и воспроизведения сложных неконкретных жестов, таких как круговое смещение птицы с увеличением напряжения рогатки в Angry Birds.
- Во-вторых, фрагментация Android с точки зрения разнообразия доступных версий ОС и целевых устройств (например, разновидностей размера экрана) становится все более острой, поскольку теперь стратегии тестирования должны учитывать различные условия выполнения.
- В-третьих, экосистема Android привлекает огромное количество приложений, требующих масштабируемого подхода к тестированию. Кроме того, эти приложения, как правило, не поставляются с открытым исходным кодом, что может ограничивать сценарии тестирования.
- Наконец, очень сложно создать идеальное покрытие тестовых случаев, чтобы найти неисправности в приложениях для Android. Традиционные подходы к построению тестов, основанные на символическом выполнении и таких инструментах, как Symbolic Pathfinder, оспариваются тем, что приложения для Android доступны в байт-коде Dalvik, который отличается от байт-кода Java. Другими словами, традиционные подходы к символическому исполнению на основе Java не могут быть непосредственно применены для приложений на базе Android. Кроме того, функция, управляемая событиями, а также рамочные библиотеки создают дополнительные препятствия для систематического создания тестовых примеров.
МЕТОДЫ
Мобильные операционные системы, в частности платформа Android с открытым исходным кодом, стали благодатной почвой для исследований в области разработки программного обеспечения и безопасности. Было проведено несколько исследований и подходов к обеспечению безопасности, или статическому анализу приложений для Android. SLR действительно важен для анализа вклада сообщества в решение проблем, связанных с конкретной темой. В случае с тестированием на Android такой обзор отсутствует.
Однако в ряде литературных произведений предпринята попытка дать общий обзор ситуации на местах путем проведения исследований или составления общих систематических карт по методам тестирования мобильных приложений. Например, систематическое отображение Sein и других в совокупности относится к Android, iOS, Symbian, Silverlight и Windows.
Авторы представили более высокую категорию методов, разделенную на пять групп, а именно
- тестирование удобства использования;
- автоматизация тестирования;
- контекстная осведомленность;
- безопасность;
- общая категория
Мендез-Поррас и другие предоставили еще одну карту, сосредоточенную на более узкой области, а именно на автоматизированном тестировании мобильных приложений. Они обсуждают две основные проблемы автоматизации процесса тестирования мобильных приложений, которые представляют собой соответствующий набор тестовых случаев и соответствующий набор устройств для проведения тестирования.
Другие смежные работы были посвящены непосредственно проблемам тестирования приложений для Android в целом. Например, Amalfitano специально проанализировали проблемы и открытые вопросы тестирования приложений для Android, в которых были обобщены подходящие и эффективные принципы, рекомендации, модели, методики и технологии, связанные с тестированием приложений для Android. Они перечисляют существующие инструменты и фреймворки для автоматизированного тестирования приложений для Android. Обычно они суммируют вопросы тестирования программного обеспечения с точки зрения нефункциональных требований, включая производительность, стресс, безопасность, совместимость, удобство использования, доступность и т.д.
Гао и другие представили исследование по мобильному тестированию как услуге (MTaaS), в котором обсудили основные концепции выполнения MTaaS. Кроме того, обсуждаются мотивация, особенности, требования, тестовая среда и существующие подходы. Кроме того, они также обсудили текущие вопросы, потребности и проблемы применения MTaaS на практике.
Совсем недавно Старов и прочие провели современное исследование для изучения набора облачных сервисов для мобильного тестирования. По результатам своего исследования они разделили облачные сервисы мобильного тестирования на три подкатегории, которые выглядят следующим образом:
- облака устройств (мобильные облачные платформы);
- услуги по поддержке управления жизненным циклом приложений;
- инструменты для обеспечения обработки в соответствии с некоторыми методами тестирования.
Они также утверждают, что очень важно перенести процесс тестирования в облака, что сделает совместную работу возможной. Кроме того, это также может сократить время тестирования и затраты на разработку.