Статья опубликована в рамках: CLXVI Международной научно-практической конференции «Научное сообщество студентов: МЕЖДИСЦИПЛИНАРНЫЕ ИССЛЕДОВАНИЯ» (Россия, г. Новосибирск, 05 июня 2023 г.)
Наука: Информационные технологии
Скачать книгу(-и): Сборник статей конференции
дипломов
ГЛУБОКОЕ ОБУЧЕНИЕ ДЛЯ ТЕСТИРОВАНИЯ ANDROID-ПРИЛОЖЕНИЙ
DEEP LEARNING FOR TESTING OF ANDROID APPS
Sergey Gordienko
student, department of data processing automation, Tomsk State University of Control Systems and Radioelectronics,
Russia, Tomsk
АННОТАЦИЯ
Пространство состояний Android-приложений огромно, и его тщательное изучение во время тестирования остается серьезной проблемой. Обучение с подкреплением — это метод машинного обучения, который изучает оптимальную стратегию для решения задачи методом проб и ошибок, руководствуясь положительным или отрицательным вознаграждением, а не явным контролем. Возможности глубокого обучения подходят для сложных областей исследования, таких как приложения для Android. Однако современные общедоступные инструменты поддерживают только базовый табличный RL. Представленный подход позволяет тестировать Android-приложения методом «черного ящика» с использование алгоритмов глубокого обучения.
ABSTRACT
The state space of Android applications is huge, and scrutinizing it during testing remains a major challenge. Reinforcement learning is a machine learning technique that learns the optimal strategy for solving a problem through trial and error, guided by a positive or negative reward rather than explicit control. Deep learning capabilities are suitable for complex areas of study such as Android applications. However, current public tools only support basic tabular RL. The presented approach allows you to test Android applications using the "black box" method using deep learning algorithms.
Ключевые слова: нейронные сети, глубокое обучение, обучение с подкреплением, тестирование.
Keywords: neural networks, deep learning, reinforcement learning, software testing.
Сложность мобильных приложений (далее приложений) продолжает расти, поскольку приложения предоставляют пользователям все более продвинутые услуги. Тем не менее крайне важно, чтобы они работали должным образом после публикации на рынках приложений, поскольку большая часть их успеха или неудачи зависит от оценки пользователя. Таким образом, эффективная фаза тестирования имеет основополагающее значение для минимизации вероятности сбоев приложения во время выполнения. Тем не менее, автоматическое тестирование мобильных приложений по-прежнему остается открытой проблемой, а сложность текущих приложений делает их исследование более сложным, чем в прошлом, поскольку они могут содержать труднодостижимые состояния и события, которые трудно инициировать.
Существует несколько подходов к автоматизированному тестированию мобильных приложений, направленных на максимальное покрытие кода и обнаружение ошибок во время тестирования. Стратегии случайного тестирования [1] стимулируют тестируемое приложение, создавая псевдослучайные события. Однако случайное исследование без руководства может застопориться при работе со сложными переходами. Стратегии на основе моделей [2, 3] извлекают тестовые примеры из навигационных моделей, построенных с помощью статического или динамического анализа. Если модель точно отражает тестируемое приложение, можно провести глубокое исследование. Тем не менее, автоматически построенные модели, как правило, неполны и неточны. Структурные стратегии [4] генерируют входные данные, ориентированные на покрытие, используя символическое выполнение или эволюционные алгоритмы. Эти стратегии более эффективны, поскольку они ориентированы на конкретную цель охвата. Однако они не используют в своих интересах прошлые успехи разведки для динамического изучения наиболее эффективной стратегии разведки. Обучение с подкреплением — это подход к машинному обучению, который не требует в качестве входных данных помеченного обучающего набора, поскольку процесс обучения определяется положительным или отрицательным вознаграждением, полученным во время предварительного выполнения задачи. Следовательно, он представляет собой способ динамического построения оптимальной стратегии разведки, используя в своих интересах прошлые успешные или неудачные ходы.
Обучение с подкреплением широко применяется для решения проблемы тестирования GUI и Android [5]. Однако до сих пор для задач тестирования применялась только самая базовая форма обучения с подкреплением. В табличном обучении с подкреплением значение ассоциации состояние-действие хранится в фиксированной таблице. Появление глубоких нейронных сетей заменило табличные подходы подходами глубокого обучения, в которых функция «действие-ценность» изучается на основе прошлого положительного и отрицательного опыта, полученного одной или несколькими нейронными сетями. Когда пространство состояний для исследования чрезвычайно велико (например, когда приложение имеет большое количество виджетов), глубокое обучение с подкреплением оказалось значительно лучше табличного. В этом отношении можно утверждать, что пространство состояний Android-приложений определенно является хорошим кандидатом на успешное внедрение обучения с подкреплением с использованием глубокого обучения в целях тестирования.
Для решения задачи опишем подход к исследованию тестируемого приложения с использованием алгоритмов глубокого обучения. Среда представлена тестируемым Android-приложением, которое подвергается нескольким этапам взаимодействия. На каждом временном шаге, предполагая, что состояние графического интерфейса равно st, сначала выполняется действие αt. Затем он наблюдает за новым состоянием графического интерфейса st+1 тестируемого приложения и вычисляет вознаграждение rt. Интуитивно, если новое состояние st+1 похоже на предыдущее состояние st, вознаграждение будет отрицательным. В противном случае вознаграждение представляет собой большое положительное значение. Таким образом, стимулируется исследование новых состояний в тестируемом приложении, исходя из предположения, что это полезно для более тщательного тестирования приложения.
Вознаграждение используется для обновления нейронной сети, которая учится управлять алгоритмом глубокого обучения. Фактическая стратегия обновления зависит от используемого алгоритма глубокого обучения.
Предлагаемый подход — черный ящик, потому что он не имеет доступа к исходному коду тестируемого приложения. Он зависит только от графического интерфейса тестируемого приложения. Состояние st∈S определяется как комбинированное состояние (α0,...αn, w0, ...wm). Первая часть состояния α0,...αn представляет собой горячее кодирование текущего действия, то есть αi равно 1 только в том случае, если текущее отображаемое действие является i-м действием, оно равно 0 для всех других занятий. Во второй части вектора состояния wj равно 1, если j-й виджет доступен в текущей активности, иначе он равен 0.
События взаимодействия с пользователем в тестируемом приложении сопоставляются с набором действий. Определяются исполняемые события в текущем состоянии, анализируя выгруженные виджеты и их атрибуты (то есть клик, удерживание и скролл). В дополнение к действиям на уровне виджета также моделируются два действия на системном уровне, а именно переключение подключения к Интернету и поворот экрана. Эти действия системного уровня являются единственными системными действиями, которые можно легко протестировать.
Каждое действие α является трехмерным: первое измерение представляет собой виджет, с которым будет взаимодействовать программа, или идентификатор системного действия. Второе измерение указывает строку, которая будет использоваться в качестве текстового ввода, если это необходимо. На самом деле для этого измерения используется индекс, указывающий на запись в словаре предопределенных строк. Третье измерение зависит от контекста: когда выбранный виджет является одновременно и кликабельным, и длительным кликом, третье действие определяет, какое из двух действий предпринять. Когда программа взаимодействует с прокручиваемым объектом, третье измерение определяет направление прокрутки.
Функция перехода определяет, в какое состояние может перейти приложение после выполнения действия. Программа пассивно наблюдает за процессом, собирая новое состояние после того, как переход произошел.
Сброс набора обнаруженных действий в начале каждого нового эпизода — это метод, который побуждает программу посещать и исследовать наибольшее количество действий в каждом эпизоде, чтобы постоянно укреплять свое исследовательское поведение. Напротив, предоставление положительного вознаграждения за каждую новую деятельность только один раз или, наоборот, каждый раз, когда изменение деятельности, приведет, соответственно, к слишком редкой, единственной подкрепляющей обратной связи или к вознаграждению циклического поведения [9].
Функция вознаграждения. Алгоритм RL, используемый программой, получает вознаграждение rt ∈ R каждый раз, когда он выполняет действие αt. Функцию вознаграждения можно определить следующим образом:
В момент времени t награда rt высока (r1), если программа смогла перейти к действию , никогда не наблюдавшемуся в текущем эпизоде Et (то есть активность не принадлежит к набору видов деятельности, встречавшихся до сих пор в Et ): если новый эпизод начинается в t + 1, его набор действий сбрасывается: act(Et+1) = ∅.
Высокое вознаграждение (r1) также при неправильном поведении. Очень низкое вознаграждение (-r2), получается, когда отображаемая активность не принадлежит тестируемому приложению. Во всех остальных случаях вознаграждение умеренно отрицательное (-r3), так как исследование все еще остается внутри тестируемого приложения, даже если ничего нового не обнаружено.
В данной статье предложен подход, основанный на глубоком обучении, для автоматизированного исследовательского тестирования приложений Android. Лучшая стратегия исследования определяется автоматически по мере прохождения теста. Важно исследовать определенные категории ошибок, которые особенно важны для приложений Android, например уязвимости в системе безопасности. Механизмы адаптации и вознаграждения, используемые алгоритмами глубокого обучения для изучения оптимальной стратегии исследования, могут быть особенно эффективными, когда обнаруженная ошибка является ошибкой безопасности.
Список литературы:
- Aravind Machiry, Rohan Tahiliani, Mayur Naik. Dynodroid: An input generation system for android apps // In Proceedings of the 2013 9th Joint Meeting on Foundations of Software Engineering. С. 224–234.
- Tianxiao Gu, Chengnian Sun, Xiaoxing Ma. Practical GUI testing of Android applications via model abstraction and refinement // 41st International Conference on Software Engineering (ICSE). P. 269–280.
- Xiang Gao, Shin Hwei Tan, Zhen Dong, and Abhik Roychoudhury. Android testing via synthetic symbolic execution. 33rd IEEE/ACM International Conference on Automated Software Engineering. P. 419–429.
- Timothy P Lillicrap, Jonathan J Hunt, Alexander Pritzel. Continuous control with deep reinforcement learning. 4th International Conference on Learning Representations, ICLR 2016. P. 217–231.
- Minxue Pan, An Huang, Guoxin Wang. Reinforcement learning based curiosity- driven testing of Android applications. 29th ACM SIGSOFT International Symposium on Software Testing and Analysis. P. 153–164.
дипломов
Оставить комментарий