ВВЕДЕНИЕ 3
1 ПОСТАНОВКА ЗАДАЧИ 5
1.1 Концепция программного инструмента 5
1.2 Обзор альтернативных решений 6
2 АРХИТЕКТУРА ПЛАГИНА 8
2.1 Структура плагина 8
2.2 Разделение классов 9
3 АВТОГЕНЕРИРОВАНИЕ UI-ТЕСТОВ 12
3.1 Т ест-кейсы для библиотеки генерации UI-тестов 12
3.2 Принцип работы библиотеки для генерации UI-тестов 18
4 АВТОГЕНЕРИРОВАНИЕ UNIT-ТЕСТОВ 20
4.1 Анализ библиотек для генерации unit-тестов 20
4.2 Интеграция библиотеки EvoSuite 22
5 РЕЗУЛЬТАТ РАБОТЫ ПЛАГИНА 24
ЗАКЛЮЧЕНИЕ 27
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 28
ПРИЛОЖЕНИЕ 31
С процветанием рынка мобильных устройств, повлекшим за собой пропорциональный рост количества выпускаемых приложений для данных устройств, тестирование мобильных программных продуктов становится важнейшим этапом разработки программных продуктов, особенно требующим внимания. Если на рынок выпускается приложение, в котором имеются ошибки, критично сказывающиеся на опыте взаимодействия пользователя с приложением, оно с большей вероятностью потерпит неудачу на рынке [1]. Около 50% пользователей удаляют приложение после нахождения первой ошибки, и лишь 8%, дают третий шанс продукту после нахождения второй ошибки [2]. Если говорить об операционной системе Android, то на данный момент существует более 24000 разных устройств для данной ОС [3]. Корректная работа программного решения на устройстве зависит от особенностей конкретного устройства, а потому тестирование мобильных приложений для ОС Android сопровождается значительными трудозатратами.
Согласно исследованиям Gartner 85,9% проданных смартфонов по данным на февраль 2018 — доля Android. На март 2018 г. в Google Play Store содержится около 3.6 миллиона приложений для Android [4], и их число растет с каждым днем.
Процесс тестирования занимает 30%-50% от времени, потраченного на разработку программного продукта [5] и соразмерный данным временным затратам бюджет [6]. Поэтому для тестирования разных проектов появляется все больше автоматизирующих библиотек, с помощью которых можно проверить поведение даже самых незначительных частей программы. Одна из разновидностей таких инструментов - библиотеки для автоматической генерации тестов.
В статье “Does Automated Unit Test Generation Really Help Software Testers? A Controlled Empirical Study” [7] авторы проверяли разницу между автоматическим и ручным генерированием тестов. Результат показал, что инструменты для автоматической генерации тестов охватывают большую часть кода, что способствует более эффективному тестированию программного продукта. Также исследование показало, что испытуемые, использующие автогенерацию тестов, нашли то же количество ошибок, что и испытуемые, которые писали тесты вручную, но последние потратили на 70% больше времени. Данное исследование показывает, что развитие инструментов автогенерации тестов поможет сократить время для тестирования, а также уменьшит бюджет расходов компаний, использующих данные инструменты.
Цель данной выпускной квалификационной работы - разработать плагин для среды Android Studio, который обеспечит автоматическое генерирование UI- и unit-тестов. Для достижения поставленной цели были поставлены следующие задачи:
1. Реализация алгоритма тестирования пользовательских интерфейсов для ОС Android.
2. Создание библиотеки для генерации UI-тестов для ОС Android.
3. Разработка плагина для автоматического генерирования тестов в среде Android Studio.
В результате выполнения данной дипломной работы был разработан плагин для автоматической генерации unit и UI тестов для Android приложений.
Для достижения поставленной цели были решены следующие задачи:
1. Реализован алгоритм тестирования пользовательских интерфейсов для ОС Android.
2. На основании разделенных на группы тестовых сценариев была создана библиотека для генерации UI-тестов.
3. Разработан программный продукт для автоматического генерирования unit- и UI-тестов в среде Android Studio.
Разработанный плагин может быть интегрирован в среду разработки Android Studio и использован Android-разработчиками любого уровня в качестве инструмента для генерирования тестов.
Готовый результат выложен в репозиторий сервиса GitHub и доступен по ссылке [25].
Тестирование данного программного инструмента показало, что использование разработанного плагина позволяет сократить временные затраты на тестирование мобильных продуктов для ОС Android в 3 раза.
Дальнейшая работа над данным инструментом предполагает поддержку существующих и внесение новых тест-кейсов как для новых элементов, так и для функционала старых элементов.
1. Распространенные ошибки тестирования мобильных приложений [Электронный ресурс]. - Режим доступа: http://getbug.ru/oshibki- testirovaniya-mobilnyih-prilozheniy/ (дата обращения: 21.05.2018).
2. Are you a rarity? Only 16 percent of people will try out an app more than
twice [Электронный ресурс]. - Режим доступа:
https://www.digitaltrends.com/mobile/16-percent-of-mobile-userstry-out-a- buggy-app-more-than-twice/ (дата обращения: 25.05.2018).
3. Android - Statistics & Facts [Электронный ресурс]. - Режим доступа: https://www.statista.com/topics/876/android/ (дата обращения: 20.05.2018).
4. Gartner Says Worldwide Sales of Smartphones Recorded First Ever Decline During the Fourth Quarter of 2017 [Электронный ресурс]. - Режим доступа: https://www.gartner.com/newsroom/id/3859963 (дата обращения: 18.05.2018).
5. Сокращение времени автоматизированного тестирования ПО [Электронный ресурс]. - Режим доступа: https://kpfu.ru/student_diplom/10.160.178.20_9227869_SHakirova_A.F_3 08.pdf (дата обращения: 18.05.2018).
6. Стратегия и тактика тестирования мобильных приложений. [Электронный ресурс]. - Режим доступа: https://habr.com/sandbox/ 108592/ (дата обращения: 10.05.2018).
7. Does Automated Unit Test Generation Really Help Software Testers? A Controlled Empirical Study / G. Fraser, M. Staats, P. McMinn, A. Arcuri, F. Padberg. - ACM Transactions on Software Engineering and Methodology. 2-7c.
8. 11 инструментов для тестирования мобильных приложений.
[Электронный ресурс]. - Режим доступа: https://tproger.ru/digest/ 11-tools-for-mobile-testing/ (дата обращения: 01.05.2018).
9. JetBrains Plugins Repository [Электронный ресурс]. - Режим доступа: https://plugins.jetbrains.com/androidstudio (дата обращения: 01.05.2018).
10. JUnitGenerator V2.0 [Электронный ресурс]. - Режим доступа:
https://plugins.jetbrains.com/plugin/3064-junitgenerator-v2-0 (дата
обращения: 02.05.2018).
11. Generate Tests [Электронный ресурс]. - Режим доступа: https://plugins.jetbrains.com/plugin/8326-generate-tests (дата обращения: 02.05.2018).
12. Robotium [Электронный ресурс]. - Режим доступа: https://github.com/ RobotiumTech/robotium (дата обращения: 01.05.2018).
13. UI Automator [Электронный ресурс]. - Режим доступа:
https://developer.android.com/training/testing/ui-automator (дата
обращения: 01.05.2018).
14. Selenium [Электронный ресурс]. - Режим доступа: http://selendroid.io/ (дата обращения: 01.05.2018).
15. Какой язык программирования учить для разработки под Android [Электронный ресурс]. - Режим доступа: https://androidinsider.ru/polezno-znat/kakoy-yazyik-programmirovaniya-vy iuchit-dlya-razrabotki-pod-android.html (дата обращения: 15.05.2018).
16. Visual GUI Testing: Automating High-Level Software Testing in Industrial Practice / Emil Alegroth. - Division of Software Engineering Department of Computer Science & Engineering Chalmers University of Technology and Goteborg University Goteborg, Sweden, 2015.
17. Android. Текстовые поля [Электронный ресурс]. - Режим доступа: http://www.turbopro.ru/index.php/programmirovanie-pod-os-android/6430- android-tekstovye-polya (дата обращения: 23.05.2018).
http://robolectric.org/ (дата обращения: 22.05.2018).
19. Официальный сайт разработчиков Android [Электронный ресурс]. - Режим доступа: https://developer.android.com/index.html (дата обращения: 01.06.2018).
20. Do Automatically Generated Unit Tests Find Real Faults? An Empirical Study of Effectiveness and Challenges / Sina Shamshiri, Rene Just, Jose Miguel Rojas, Gordon Fraser, Phil McMinn, Andrea Arcuri. - Department of Computer Science & Engineering, University of Washington, Seattle, WA, USA; Scienta, Norway; University of Luxembourg.
21. Randoop [Электронный ресурс]. - Режим доступа: https://randoop.github.io/randoop/ (дата обращения: 18.05.2018).
22. Официальный сайт компании Agitar Technologies [Электронный ресурс]. - Режим доступа: http://www.agitar.com (дата обращения: 19.05.2018).
23. EvoSuite [Электронный ресурс]. - Режим доступа: http://www.evosuite.org/evosuite/ (дата обращения: 15.05.2018).
24. EvoSuite at the SBST 2017 Tool Competition / G. Fraser, A. Arcuri. - 10th International Workshop on Search-Based Software Testing (SBST’17) at ICSE’17, 2017. 39-42c.
25. Android Generate Tests [Электронный ресурс]. - Режим доступа: https://github.com/KekcSir/AndroidGenerateTests (дата обращения: 03.06.2018).