АВТОМАТИЗАЦИЯ ТЕСТИРОВАНИЯ ВЕБ-ПРИЛОЖЕНИЯ, ИСПОЛЬЗУЯ КЛАССИФИКАТОР ТИПОВ ЭЛЕМЕНТОВ МАШИННОГО ОБУЧЕНИЯ
Д.М. Тулфоров, магистр
Московский государственный технический университет имени Н.Э. Баумана (Россия, г. Москва)
DOI: 10.24411/2500-1000-2020-10699
Аннотация. Процессы тестирования программного обеспечения пытаются проверить способность программной системы соответствовать ее требуемым атрибутам и функциональности. По мере усложнения программных систем возникает необходимость в автоматизированных методах тестирования программного обеспечения. Методы машинного обучения показали себя весьма полезными для этого процесса автоматизации. В этой статье представлен классификатор, который может находить элементы Selenium, используя семантическую метку (например, «корзина», «микрофон» или «стрелка») вместо того, чтобы копаться в иерархии приложения.
Ключевые слова: тестирование программного обеспечения, машинное обучение, машинное обучение в тестирование, классификатор.
Тестирование программного обеспечения - это процесс исследования, который пытается проверить и валидировать соответствие атрибутов и функциональности программной системы ее намеченным целям. Тестирование ПО является трудоемким и дорогостоящим процессом, и, как указано в [2], процесс тестирования может потребовать до 50% ресурсов разработки. В связи с этим желательно использовать автоматизированные подходы к тестированию, чтобы сократить эти затраты и время. Кроме того, автоматизация может значительно повысить производительность процесса тестирования. Следовательно, для будущей разработки программных систем необходимо предпринять шаги для разработки стратегий автоматизированного тестирования [3].
Уже сделано несколько интересных попыток для автоматизации процесса тестирования программного обеспечения. Машинное обучение как поддомен ИИ [11] широко используется на различных этапах жизненного цикла разработки программного обеспечения [15], особенно для автоматизации процессов тестирования программного обеспечения [4]. В [1], эволюционные алгоритмы использовались для автоматизации генерации тестовых случаев. Бриан и др. в [7] предложен метод, основанный на алгоритме дерева решений
C4.5, для прогнозирования потенциальных ошибок в программной системе и локализации ошибок с целью сокращения времени процесса отладки. Все исследования показывают, что применение методов машинного обучения является перспективным подходом для автоматизации процессов тестирования.
Исследование работы классификатора
Обычно в тестах Appium или Selenium вызывается API, чтобы найти элемент пользовательского интерфейса, с которым вы хотите взаимодействовать (например, кнопка, чтобы вы могли щелкнуть ее). Обычно вы идентифицируете элемент, указывая селектор CSS или XPath. Судя по количеству выступлений на эту тему на конференциях Selenium [6] в течение многих лет, это трудно поддерживать, предположительно потому, что структура DOM [8] тестируемого приложения часто изменяется из-за изменений в коде. Традиционный XPath-селектор:
еlernentByXPath("//*[(aid= 'Cart' ]"}
Плагин [5] о котором идёт реч в данной статье позволяет найти элемент, выполнив поиск значка, такого как корзина, кнопка редактирования или логотип Twitter. Это делается путем создания снимков экрана
каждого элемента пользовательского интерфейса и запуска снимков экрана через нейронную сеть («модель»), которая знает, как распознать 105 [10] определенных категорий или меток. Он не подходит для поиска текстового поля, раскрывающегося списка, кнопки с текстом или любого другого элемента пользовательского интерфейса, который не является значком.
На предыдущих конференциях Selenium обсуждались вопросы машинного обучения, применяемые к селекторам элемен-
тов. В частности, Орен Рубин на выступление в 2016 году [9], продемонстрировал свой продукт ТеБйт.ю, который является проприетарным инструментом записи/воспроизведения, который фиксирует все свойства элемента и использует статистику/машинное обучение для продолжения распознавания элемента, даже если некоторые из этих свойств изменяются. Но этот плагин, исключительно смотрит на скриншоты.
Рис. 1. Новый селектор и пример значка корзины
Как это работает?
Точкой входа плагина является функ-
ция, которая называется find. В плагине
функция поиска принимает в качестве ар-
гумента нужную метку (например, «кор-
зина» для корзины покупок).
- получает все конечные DOM-
элементы из тестируемого приложения,
включая координаты и размер каждого
элемента;
- получает скриншот приложения;
- обрежьте скриншот на множество ма-
леньких скриншотов, по одному для каж-
дого элемента из шага 1;
- запускает обрезанный скриншот каж-
дого элемента через нейронную сеть. (это было современное состояние в алгоритмах машинного обучения еще в 2015 году [12]):
а) сначала изменят размер каждого изображения до 224x224 пикселей, потому что это входной размер, который ожидает модель [13] (нейронная сеть).
б) модель [13] возвращает список из 105 [10] «предсказаний»: вероятность того, что это изображение соответствует каждой из 105 меток [10], о которых знает модель
[13].
в) для каждого изображения, если верхний прогноз соответствует запрашиваемой вами метке, а достоверность превышает 20%, считает, что это совпадение;
г) сортирует соответствующие элементы по доверительному баллу и вернёт самый высокий.
Модель MobileNet v1,2[13], которая является предварительно обученной моделью, выпущенной Google AI. MobileNet
[13] - это «глубокая», «сверточная» нейронная сеть [14], представляет собой нейронную сеть, которая принимает в качестве входного сигнала 3-канальное цветное изображение размером 224x224 пикселя и выводит 105 [10] чисел, которые представляют достоверность или вероятность того, что входное изображение соответствует каждой из 105 [10] меток, о которых знает модель.
Сверточная нейронная сеть (ConvNet)
[14] делает много сверток, используя разные фильтры. Каждый фильтр обнаруживает особый тип объекта: например, вертикальные края, горизонтальные края, диагональные края, яркость, краснота. В отличие от нашего примера фильтра выше, коэффициенты каждого фильтра не определены человеком; они изучаются (или обнаруживаются) машиной в процессе обучения.
Глубокая сеть имеет много слоев этих свёрток. Каждый слой действует на вывод предыдущего слоя, а не на исходные пиксели изображения. Таким образом, сеть узнает более абстрактные фич, такие как
«пушистость». На практике эти функции очень абстрактны и их трудно интерпретировать, поэтому они не вписываются в легко описываемые понятия, такие как «пушистость».
MobileNet v1[13] имеет 14 таких слоев. Первый слой извлекает 32 различных низкоуровневых объекта для каждого пикселя во входном изображении. К тому времени, когда он достигает последнего слоя, он выделяет 1024 высокоуровневых объекта, которые описывают изображение в целом.
После 14 сверточных слоев имеется окончательный классификационный слой. Это не использует свертки; вместо этого он использует линейную регрессию [16], чтобы решить, основываясь на 1024 высокоуровневых функциях, является ли это кошкой или нет. На самом деле он изучает 1000 различных регрессий, по одному для каждой категории, в которой обучалась модель [13].
MobileNet [13] (Google) прошел обучение по миллионам фотографий из набора данных ImageNet [17]: люди, животные, улицы, пейзажи, объекты. Он был обучен распознавать 1000 различных категорий, таких как «кормушка для птиц», «кошка», «музыкальный инструмент», «спорт на открытом воздухе», «человек», «ядовитое растение».
Плагин, взял этот модель MobileNet [13], удалил окончательный классификационный слой и обучил новый классификационный слой на примерах соответствующих значков, оставив при этом другие слои модели без изменений. Скрипт плагина буквально является сценарием из этого урока TensorFlow [18]. Большая часть
работы была бы направлена на создание обучающих данных, если бы в Интернете было найдено 75 000 примеров значков в 105 категориях [10].
Идея этого подхода заключается в том, что МоЫ1е№1 [13] уже научился извлекать общие функции, которые полезны для понимания изображений в целом; взглянуть на эти функции достаточно информации, чтобы решить, является ли значок корзины покупок или нет. Это называется транс-ферным обучением: знания, полученные при решении одной проблемы, полезны для решения другой проблемы.
Переподготовка модели таким способом намного дешевле, чем обучение всей модели с нуля, как по времени (минуты вместо недель), так и по количеству требуемых тренировочных образов (тысячи вместо миллионов).
Измерение точности классификатора
Лучшая практика в машинном обучении - тестирование модели с использованием набора данных, отличного от того, который вы использовали для обучения модели. Эти нейронные сети имеют так много пара-метров, что иногда они могут соответствовать обучающим данным и не могут обобщаться для новых входных данных.
Однако у меня нет тестового набора данных, поэтому я проверил модель на собственных данных обучения. Это должно дать нам наилучшую точность; в реальных условиях точность, вероятно, будет ниже. Простейшая мера точности: соответствует ли предсказанная метка правильной?
Таблица 1. Точность классификатора
Метод измерения Точность
Топ-1 > 20% уверенность 68 %
Top-1 точность 70 %
Top-5 точность 87 %
«Топ-1» означает: соответствует ли верхний (наиболее вероятный) прогноз модели фактическому ярлыку? (Независимо от уверенности модели в этом прогнозе.)
«Топ-5» означает: соответствует ли ожидаемый ярлык какому-либо из 5 лучших прогнозов модели? Он повышает общую точность за счет уменьшения количества ложных негативов, но значительно увеличивает количество ложных срабаты-
ваний (количество ложных срабатываний для «корзины» увеличилось с 6% до 63% всех ответов «корзины»).
Топ-1 и Топ-5 являются типичными показателями, используемыми в литературе по машинному обучению. Плагин соответствует прогнозу топ-1, но только если он превышает доверительный порог, который по умолчанию равен 0,2 (20%). Он не смотрит на топ-5 прогнозов, если топ-1 не тот ярлык, который вы просили.
Исследователи машинного обучения используют более сложные меры точности, такие как «Precision (точность)» и «Recall (полнота)» [19]. На выступлении Test.ai на конференции Selenium 2018 [20] в Чикаго они сказали: «Если есть корзина для покупок, мы найдем ее с точностью 98,9%». В терминологии машинного обучения это 98,9%.
Я протестировал 200 тренировочных образов для ярлыка «тележка» и обнаружил только 81% полноты.
Метод измерения Recall (ло) Precision^)
Топ-1 > 20% уверенность 81 % (40) 94 %(11)
Top-1 точность 81 % (39) 94 % (11)
Top-5 точность 91 %(19) 37 % (323)
Таблица 2. Точность классификатор в измерениях recall и precision (ложноположитель-ные - лн, ложноотрицательный - ло)
Вот некоторые из изображений, которые были неправильно классифицированы:
Рис. 2. Ложноотрицательные результаты классификатора
ОО
П
Рис. 3. Ложноположительные результаты классификатора
Последние два изображения, приведенные выше, являются ложноположитель-ными: они взяты из обучающих данных «ссылка» и «мусор», но модель считает, что они оба «тележка» (с уверенностью 24% и 43%, соответственно).
Будущая работа
Тестирование является критически важной задачей в процессе разработки программного обеспечения и значительно накладывает ограничения на стоимость и время процесса разработки. Следовательно, автоматизация процесса тестирования может значительно повысить производительность процесса тестирования. В контексте тестирования программного обеспечения различные типы данных могут быть собраны на разных этапах тестирова-
ния. Методы машинного обучения могут использоваться для поиска шаблонов в этих данных и их использования в целях автоматизации. В этой статье мы разбирали практическую применение машинного обучение, а именно работы классификатора, измеряли его точность. Исходя из результата исследований можно выводить что плагин работает не на столько хорошо как хотелось бы, и будущая работа заключается в улучшение работы плагин, а именно преобразовать снимки экрана в оттенки серого, прежде чем запускать их через модель (поскольку модель была обучена на изображениях в оттенках серого), улучшите производительность (скорость), передав все изображения в тензор потока одновременно.
1 Библиографический список
1. Roper M. Using Machine Learning to Classify Test Outcomes, 2019 IEEE International
Conference on Artificial Intelligence Testing (AITest), 2019.
2. Hourani H., Hammad A., Lafi M. The Impact of Artificial Intelligence on Software Test-
ing, 2019 IEEE Jordan International Joint Conference on Electrical Engineering and Information
Technology (JEEIT), 2019.
3. King T.M., Arbon J., Santiago D., Chin W., Adamo D., Shanmugam R. AI for Testing To-
day and Tomorrow: Industry Perspectives, 2019 IEEE International Conference on Artificial In-
telligence Testing (AITest), 2019
4. Arbon J. AI for Software Testing, in Pacific NW Software Quality Conference. PNSQC,
2017.
5. Test.ai Classifier and Appium Plugin. - [Электронный ресурс]. - Режим доступа:
https://github.com/testdotai/appium-classifier-plugin (дата: 2.04.2020).
6. SeleniumConf. — [Электронный ресурс]. - Режим доступа: http://seleniumconf.com/
SeleniumConf (дата: 20.04.2020)
7. Lionel C. Briand, Yvan Labiche, and Xuetao Liu. Using machine learning to support de-
bugging with tarantula. In Proceedings of the The 18th IEEE International Symposium on Soft-
ware Reliability, Washington, DC, USA, 2007. IEEE Computer Society
8. Объектная модель документа (DOM). - [Электронный ресурс]. - Режим доступа:
https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model (дата:
18.04.2020).
9. Statistical Element Locator, Oren Rubin, 2016. - [Электронный ресурс]. - Режим досту-
па: https://www.youtube.com/watch?v=1wXoh7VhFyg. (дата: 16.04.2020).
10. Список 105 известных меток плагина. - [Электронный ресурс] . - Режим доступа:
https://github.com/testdotai/appium-classifier-plugin/blob/8717e43/lib/labels.js, (дата:
16.04.2020).
11. Андреас Мюллер, Сара Гвидо. Введение в машинное обучение с помощью python. -М., 2017.
12. A Brief History of CNNs in Image Segmentation: From R-CNN to Mask R-CNN. -
[Электронный ресурс]. - Режим доступа: https://blog.athelas.com/a-brief-history-of-cnns-in-
image-segmentation-from-r-cnn-to-mask-r-cnn-34ea83205de4, (дата: 20.04.2020).
13. MobileNets: Open-Source Models for Efficient On-Device Vision. - [Электронный ре-
сурс]. - Режим доступа: https://ai.googleblog.com/2017/06/mobilenets-open-source-models-
for.html (дата: 20.04.2020).
14. Convolutional Neural Networks (CNNs / ConvNets). - [Электронный ресурс]. - Режим
доступа: https://cs231n.github.io/convolutional-networks/, (дата: 20.04.2020).
15. Raghuwanshi V. AI and Software Testing, 17th Annual International Software Testing
Conference, 2017, Bangalore.
16. Linear regression. - [Электронный ресурс]. - Режим доступа:
https://en.wikipedia.org/wiki/Linear_regression (дата: 16.04.2020).
17. [Электронный ресурс]. - Режим доступа: http://image-net.org/ ImageNet - dataset of
over 15 million labeled high-resolution images. (дата: 20.04.2020).
18. TF Hub for TF2: Retraining an image classifier. - [Электронный ресурс]. - Режим дос-
тупа:
https://colab.research.google.com/github/tensorflow/hub/blob/master/examples/colab/tf2 image
retraining.ipynb, (дата: 20.04.2020)..
19. Precision and recall. - [Электронный ресурс]. - Режим доступа:
https://en.wikipedia.org/wiki/Precision_and_recall , (дата: 20.04.2020)..
20. AI for element selection, Jason Arbon, SeleniumConf Chicago, 2018. - [Электронный
ресурс]. - Режим доступа: https://www.youtube.com/watch?v=3YLxZfZHnPg&t=500s (дата:
16.04.2020).
AUTOMATE WEB-APPLICATION TESTING USING MACHINE LEARNING
ELEMENT TYPE CLASSIFIER
D.M. Tulforov, Master
Bauman Moscow State Technical University
(Russia, Moscow)
Abstract. Software testing processes (software) try to test the ability of a software system to match its required attributes and functionality. As software systems become more sophisticated, there is a need for automated software testing methods. Machine learning (MO) methods have proven very useful for this automation process. This article presents a classifier that can find Selenium elements using a semantic label (for example, "basket", "microphone" or "arrow") instead of delving into the application hierarchy.
Keywords: software testing, software, machine learning, machine learning in testing, classifier.