1 2 3 ФГБОУ ВО «ПЕТРОЗАВОДСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ» ИНСТИТУТ МАТЕМАТИКИ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ КАФЕДРА ИНФОРМАТИКИ И МАТЕМАТИЧЕСКОГО ОБЕСПЕЧЕНИЯ Отчет по дисциплине «Верификация программного обеспечения» Тестирование мобильного приложения для системы лояльности в сфере туризма Выполнила: студентка 6-го курса группы №22608 Шевцова Кристина Олеговна Преподаватель: к.ф-м.н., доцент К. А. Кулаков Петрозаводск – 2018 Оглавление Объект тестирования 3 ................................................................................................ Функциональные требования к объекту тестирования 6 .................................... Описание модулей 8 ..................................................................................................... Объект и стратегия тестирования 11 ........................................................................ Общая информация 11 Стратегия блочного тестирования 11 Стратегия интеграционного тестирования 11 Этапы интеграции 12 Стратегия конфигурационного тестирования 14 Стратегия аттестационного тестирования 14 Описание тестов 15 ....................................................................................................... Корректность возвращаемых данных 15 Описание блочных тестов 15 Описание интеграционных тестов 22 Описание аттестационных тестов 30 Описание конфигурационного тестирования 39 Примеры реализации тестов 40 ................................................................................. Отчёт о проведении первоначального тестирования 42 ....................................... Отчеты об ошибках 44 ................................................................................................ Отчёт о проведении повторного тестирования 45 .................................................. Заключение 47 ............................................................................................................... X2 Объект тестирования В рамках курса «Верификация программного обеспечения» будет рассматри- ваться мобильный сервис для системы лояльности в сфере туризма. Целью серви- са является предоставление персонализированных предложений для пользовате- лей, основываясь на их перемещении. Отслеживание перемещений пользователя осуществляется с использованием следующих технологий: 1. Geofencing – технология, позволяющая установить некоторую область (за- ранее заданный радиус) вокруг точки на карте города (по её географическим координатам), во время входа или выхода из которой мобильное приложение будет получать сигнал на выполнение заранее предопределенных действий. Та- кие географические области будем называть geofence. 2. iBeacon – технология, уведомляющая мобильное приложение о попадании/ выходе из радиуса действия Bluetooth-маяка (beacon). В отличие от geofencing чаще используется для навигации внутри помещений. 3. ImageTargets – изображения, которые можно отсканировать с помощью ка- меры смартфона. Когда пользователь попадает в радиус действия geofence/beacon или сканирует ImageTarget, мобильное приложение получает сообщение о произошедшем собы- тии и предоставляет пользователю предложение, соответствующее данному собы- тию. Сервис состоит из сервера и мобильного приложения. Объектом тестирования является мобильное приложение, разработанное для операционной системы iOS версии 11.0 и выше, написанное на языке Swift 4.0. Основными экранами приложения являются: 1. Главный экран приложения. Экран представляет собой список карточек, где каждая карточка – это некото- рое персональное предложение, предоставленное пользователю. Карточки могут X3 быть разных типов. В зависимости от типа карточки определяется действие, про- исходящее по нажатию на карточку: открытие ссылки в браузере, открытие ссыл- ки в WebView, воспроизведение видео. С экрана возможен переход на экран выбора города, экран карты и экран ска- нирования изображений. 2. Экран выбора города. При первом запуске приложения пользователь попадает на экран выбора горо- да и выбирает интересующий его город. После этого выбранный город сохраняет- ся в памяти устройства. При последующих запусках приложения экран выбора го- рода автоматически пропускается, и пользователь сразу попадает на главный экран приложения. В зависимости от выбранного города приложение загружает список всех geofences, beacons и ImageTargets для данного города, а также сценарии к ним. С экрана возможен переход на главный экран. 3. Экран сканирования. Экран-камера. При наведении камеры на ImageTarget, происходит распознава- ние изображения. Если есть совпадение с ImageTarget, доступных в выбранном городе, то в список карточек добавится новая карточка, соответствующая отскани- рованному ImageTarget. С экрана возможен переход на главный экран. 4. Экран карты. В приложении доступен экран карты с обозначением расположения всех geofences, beacons и ImageTargets, доступных в выбранном городе. На экране кар- ты пользователь может построить маршрут от текущего местоположения до како- го-либо маркера посредством навигации, предоставляемой сервисом Google Maps. С экрана возможен переход на главный экран, приложение или сайт Google Maps. Помимо основных экранов важными модулями приложения являются: 1. APIDataManager. X4 Класс, отвечающий за взаимодействие с сервером. Функции класса вызывают- ся из контроллеров. Класс получает или отправляет данные на сервер. В случае получения данных с сервера, APIDataManager передаёт их в класс соответствую- щей модели для того, чтобы перевести полученные данные в модель. Итоговую модель данных APIDataManager возвращает в вызывающий контроллер. 2. LocationManager. Класс, работающий с геопозицией пользователя. В классе устанавливаются geofences и beacons для мониторинга. Также класс работает в фоновом режиме и отвечает за дальнейшие действия после получения события о входе/выходе поль- зователя в зону geofence или beacon. 3. CoreDataManager. Класс, осуществляющий основные операции (CRUD – Create, Read, Update, Delete) по взаимодействию с базой данных. Архитектура приложения представлена на рисунке 1. Рисунок 1 – Архитектура приложения X5 Функциональные требования к объекту тестиро- вания Тестируемое приложение должно реализовывать следующий набор функцио- нальных требований: 1. Главный экран приложения: 1.1. Отображение списка карточек, полученных из базы данных, для вы- бранного города. 1.2. Удаление карточки из списка и базы данных по свайпу влево. 1.3. По нажатию на карточку осуществление сценария для данной карточ- ки (открытие ссылки в браузере/открытие ссылки в WebView/воспроизве- дение видео). 1.4. Добавление новых карточек в начало списка в зависимости от полу- чаемых сообщений от других модулей. 1.5. Получение с сервера списка всех geofences, beacons и ImageTargets для выбранного города, его разбор, запись в базы данных и установление мониторинга geofences и beacons. 2. Экран выбора города: 2.1. Получение с сервера списка городов, его разбор и отображение этого списка на экране. 3. Экран карты: 3.1. Получение из базы данных всех geofences, beacons и ImageTargets и отображение их на карте. 3.2. Отображение текущего местоположения пользователя. 3.3. По нажатию на маркер конкретного объекта на карте построение маршрута от текущего местоположения пользователя до выбранного объ- екта в приложении (при наличии) или на сайте Google Maps. X6 4. Экран сканирования: 4.1. Сканирование ImageTarget. 4.2. Отправка сообщения о том, что конкретный ImageTarget был отскани- рован пользователем. 5. APIDataManager: 5.1. Получение команд от контроллеров. 5.2. Отправка запросов на сервер. 5.3. Передача JSON-файлов с сервера на разбор в модели. 5.4. Возврат итоговых моделей обратно в контроллеры. 6. LocationManager: 6.1. Установка мониторинга geofences и beacons. 6.2. Отслеживание геопозиции пользователя, в том числе в фоновом ре- жиме. 6.3. Уведомление других модулей о том, что пользователь вошел/покинул радиус действия geofence или beacon. 7. CoreDataManager: 7.1. Осуществление CRUD-операций с базой данных. X7 Описание модулей Приложение разработано с использованием паттерна MVC (Model-View- Controller). Основными частями приложения являются: 1. CardsVC. Назначение: Контроллер главного экрана приложения с выбором карточек. Функции: • func getGeofencesBeaconsAndImageTargets() – получает список geofences, beacons и ImageTargets, а также сценарии к ним из APIData- Manager и обновляет данные в базе данных. • func showCards() – получает список карточек из базы данных и под- ставляет данные во View. 2. ChooseCityVC. Назначение: Контроллер экрана выбора города. Функции: • func showCities() – получает список городов из APIDataManager и подставляет данные во View. 3. GoogleMapsVC. Назначение: Контроллер экрана с картой. Функции: • func setUpMarkers() – получает все доступные geofences, beacons и ImageTargets из базы данных и создает маркеры разных цветов для разных типов объектов. 4. APIDataManager. Назначение: Модуль отвечает за взаимодействие с сервером. Функции: • func initBeaconsAndGeofencesAndImageTargets(completion- Handler: @escaping ErrorType? -> ()) – получает с сервера список X8 всех доступных geofences, beacons и ImageTargets. В случае успешного вы- полнения запроса инициализирует мониторинг beacons и geofences, иначе – возвращает ошибку. • func getCities(completionHandler: @escaping ([CityModel]?, ErrorType?) -> ()) – получает список всех городов с сервера. Возвращает список городов или ошибку. 5. CityModel. Назначение: Модель данных для города на экране выбора города. Функции: • func getCities(from data: NSDictionary?) -> [CityModel]? – получает список городов в формате JSON от APIDataManager, преобразует его в CityModel и возвращает в APIDataManager. 6. BeaconModel. Назначение: Модель данных для beacon. Функции: • func findTriggeringBeacon(with name: String) – принимает на- звание распознанного beacon и добавляет соответствующую карточку в базу данных. • func getBeacons(from data: NSDictionary?) -> [BeaconModel]? – получает список beacons в формате JSON от APIDataManager, преобразует его в BeaconModel и возвращает в APIDataManager. 7. GeofenceModel. Назначение: Модель данных для geofence. Функции: • func findTriggeringGeofence(with name: String) – принимает на- звание распознанного geofence и добавляет соответствующую карточку в базу данных. X9 • func getGeofences(from data: NSDictionary?) -> [Geofence- Model]? – получает список geofences в формате JSON от APIDataManager, преобразует его в GeofenceModel и возвращает в APIDataManager. 8. ImageTargetModel. Назначение: Модель данных для ImageTarget. Функции: • func findTriggeringImageTarget(with vuforiaId: String) – при- нимает идентификатор распознанного ImageTarget и добавляет соответству- ющую карточку в базу данных. • func getImageTargets(from data: NSDictionary?) -> [Image- TargetModel]? – получает список ImageTargets в формате JSON от APIDataManager, преобразует его в ImageTargetModel и возвращает в APIDataManager. X10 Объект и стратегия тестирования Общая информация Для тестирования будет использоваться стандартный инструментарий, встро- енный в среду разработки Xcode версии 10.0. Тесты будут разрабатываться на языке Swift 4.0. Стратегия блочного тестирования Блочное тестирование будет проводиться для network-слоя приложения, а так- же для классов, отвечающих за разбор JSON-файлов, получаемых с сервера. Следующие функции подлежат блочному тестированию: 1. func initBeaconsAndGeofencesAndImageTargets(completionHandler: @escaping ErrorType? -> ()) 2. func getCities(completionHandler: @escaping ([CityModel]?, ErrorType?) -> ()) 3. func getCities(from data: NSDictionary?) -> [CityModel]? 4. func getBeacons(from data: NSDictionary?) -> [BeaconModel]? 5. func getGeofences(from data: NSDictionary?) -> [GeofenceModel]? 6. func getImageTargets(from data: NSDictionary?) -> [ImageTarget- Model]? Функции, отвечающие за отображение данных на экране и взаимодействие с базой данных, не подлежат блочному тестированию (они не связаны с работой с сетью и с разбором JSON-файлов). Работоспособность этих функций будет прове- рена в рамках аттестационного тестирования. Стратегия интеграционного тестирования Цель интеграционного тестирования – удостовериться в корректности сов- местной работы элементов приложения (каждый модуль не только выполняет свои функции, но и взаимодействует с другими модулями без ошибок). X11 В данной работе выбран принцип восходящего тестирования. Сначала будет тестироваться самый нижний уровень системы. Затем постепенно к более низким уровням будут интегрироваться более высокоуровневые модули. Этапы интеграции 1. Работа с geofences, beacons и ImageTargets. Методы: APIDataManager: func initBeaconsAndGeofencesAndImageTargets (completionHandler: @escaping ErrorType? -> ()) BeaconModel: func getBeacons(from data: NSDictionary?) -> [Beacon- Model]? GeofenceModel: func getGeofences(from data: NSDictionary?) -> [GeofenceModel]? ImageTargetModel: func getImageTargets(from data: NSDictionary?) -> [ImageTargetModel]? CardsVC: func getGeofencesBeaconsAndImageTargets() CardsVC: func showCards() GoogleMapsVC: func setUpMarkers() X12 Рисунок 2 – Работа с geofences, beacons и ImageTargets 2. Работа с городами. Методы: APIDataManager: func getCities(completionHandler: @escaping ([City- Model]?, ErrorType?) -> ()) CityModel: func getCities(from data: NSDictionary?) -> [CityModel]? ChooseCityVC: func showCities() X13 Рисунок 3 – Работа с городами Стратегия конфигурационного тестирования Приложение будет протестировано на устройствах, имеющих различную вер- сию операционной системы и разрешение экрана. Стратегия аттестационного тестирования В ходе аттестационного тестирования будет протестирована работоспособ- ность приложения и его возможность осуществлять заявленный функционал. Ат- тестационные тесты покрывают ранее перечисленные функциональные требова- ния. Аттестационное тестирование происходит ручным способом. X14 Описание тестов Корректность возвращаемых данных Под корректной работой сервера подразумевается его доступность, а также от- сутствие ошибок в логике работы сервера. Кроме того, сервер должен возвращать валидный JSON (см. ниже), коды ответа сервера должны быть в диапазоне 200-399. Пример валидного JSON-файла со списком городов: { "cities": [ { "id": "1", "name": "Petrozavodsk", "country_name": "Russia", "latitude": 61.7782, "longitude": 34.364 }, { "id": "2", "name": "London", "country_name": "United Kingdom", "latitude": 51.50853, "longitude": -0.076132 } ] } Валидность JSON-файла можно проверить при помощи сервиса-валидатора (например, jsonlint.com). Описание блочных тестов Тест 1. Модуль: APIDataManager. X15 Метод: func initBeaconsAndGeofencesAndImageTargets(completion- Handler: @escaping ErrorType? -> ()) Тип: Негативный. Описание: Метод делает GET-запрос на сервер. В случае успешного выполне- ния запроса метод не возвращает ошибку (в замыкании ErrorType? передаётся равным nil). В случае неудачного выполнения запроса возвращается одна из сле- дующих ошибок: ошибка подключения к сети Интернет (networkError), ошибка сервера (serverError), ошибка разбора JSON-файла, полученного с сервера (model- Error). Исходные данные: Нет подключения к сети Интернет. Ожидаемый результат: Метод возвращает ошибку networkError. Тест 2. Модуль: APIDataManager. Метод: func initBeaconsAndGeofencesAndImageTargets(completion- Handler: @escaping ErrorType? -> ()) Тип: Негативный. Описание: Метод делает GET-запрос на сервер. В случае успешного выполне- ния запроса метод не возвращает ошибку (в замыкании ErrorType? передаётся равным nil). В случае неудачного выполнения запроса возвращается одна из сле- дующих ошибок: ошибка подключения к сети Интернет (networkError), ошибка сервера (serverError), ошибка разбора JSON-файла, полученного с сервера (model- Error). Исходные данные: Есть подключение к сети Интернет, сервер возвращает ошибку с кодом ответа в диапазоне от 400 до 599. Ожидаемый результат: Метод возвращает ошибку serverError. Тест 3. Модуль: APIDataManager. Метод: func initBeaconsAndGeofencesAndImageTargets(completion- Handler: @escaping ErrorType? -> ()) Тип: Негативный. X16 Описание: Метод делает GET-запрос на сервер. В случае успешного выполне- ния запроса метод не возвращает ошибку (в замыкании ErrorType? передаётся равным nil). В случае неудачного выполнения запроса возвращается одна из сле- дующих ошибок: ошибка подключения к сети Интернет (networkError), ошибка сервера (serverError), ошибка разбора JSON-файла, полученного с сервера (model- Error). Исходные данные: Есть подключение к сети Интернет, сервер работает кор- ректно, возвращает несоответствующий формату JSON-файл (см. раздел «Кор- ректность возвращаемых данных»). Ожидаемый результат: Метод возвращает ошибку modelError. 1 2 3 |