Научная статья на тему 'Верификация и тестирование сложных программных продуктов на основе нейросетевых моделей'

Верификация и тестирование сложных программных продуктов на основе нейросетевых моделей Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
2522
290
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ТЕСТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ / АВТОМАТИЧЕСКОЕ ТЕСТИРОВАНИЕ / НЕЙРОННЫЕ СЕТИ / РЕГРЕССИОННОЕ ТЕСТИРОВАНИЕ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Данилов А.Д., Мугатина В.М.

Методы и приемы тестирования программных продуктов должны подвергаться постоянному развитию и совершенствованию в связи с неоспоримой важностью обеспечения должного контроля качества разрабатываемых или поддерживаемых программных систем. В данной статье выделены основные уровни тестирования программных продуктов с целью классификации методов тестирования на каждом из представленных уровней. Проведен анализ этапов и методов тестирования программного обеспечения. В работе также рассмотрены два основных подхода к тестированию: ручное и автоматизированное, выделены характерные черты каждого из подходов. Для автоматизированного тестирования определены уровни автоматизации. Выделены преимущества и недостатки автоматического тестирования в сравнении с ручным тестированием. В качестве способа устранения существующих недостатков применения автоматизированного тестирования в статье предложен подход, в основе которого лежит использование искусственных нейронных сетей. Рассмотрена структура искусственной нейронной сети и модель обучения. В работе представлена нейросетевая модель, применяемая в задаче автоматического тестирования и верификации сложных программных систем. Предложен подход использования искусственной нейронной сети для проведения регрессионного тестирования. Обусловлена необходимость использования нейронных сетей при создании тестовых скриптов для автоматического тестирования

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

VERIFICATION AND TESTING OF COMPLEX SOFTWARE PRODUCTS BASED ON NEURAL NETWORK MODEL

Methods and acceptances of software testing should be exposed to continuous development and perfection on the score of incontestable importance of ensuring due quality control of the developed or supported program systems. In this article the main levels of software testing are represented to classify basic methods of testing on each of the provided levels. An analysis of the steps and methods of software testing is carried out. This article describes in detail basic approaches of testing: manual and automated, and principal characteristic features of them. Levels of automatization are determined for automated testing. This article determines the advantages and disadvantages of automated testing in comparison with manual testing. The article suggests an approach based on the use of artificial neural networks as a method of elimination of the existing shortcomings of application of automated testing. The structure of an artificial neural network and model of training are considered. As a result, the neural network model is provided for the task of automatic testing and verification of complex program systems. Approach of use of an artificial neural network for carrying out regression testing is offered. The need of use of neural networks for creation of test scripts for automatic testing is caused

Текст научной работы на тему «Верификация и тестирование сложных программных продуктов на основе нейросетевых моделей»

УДК 004.054

ВЕРИФИКАЦИЯ И ТЕСТИРОВАНИЕ СЛОЖНЫХ ПРОГРАММНЫХ ПРОДУКТОВ НА ОСНОВЕ НЕЙРОСЕТЕВЫХ МОДЕЛЕЙ

А.Д. Данилов, В.М. Мугатина

Методы и приемы тестирования программных продуктов должны подвергаться постоянному развитию и совершенствованию в связи с неоспоримой важностью обеспечения должного контроля качества разрабатываемых или поддерживаемых программных систем. В данной статье выделены основные уровни тестирования программных продуктов с целью классификации методов тестирования на каждом из представленных уровней. Проведен анализ этапов и методов тестирования программного обеспечения.

В работе также рассмотрены два основных подхода к тестированию: ручное и автоматизированное, выделены характерные черты каждого из подходов. Для автоматизированного тестирования определены уровни автоматизации. Выделены преимущества и недостатки автоматического тестирования в сравнении с ручным тестированием.

В качестве способа устранения существующих недостатков применения автоматизированного тестирования в статье предложен подход, в основе которого лежит использование искусственных нейронных сетей. Рассмотрена структура искусственной нейронной сети и модель обучения.

В работе представлена нейросетевая модель, применяемая в задаче автоматического тестирования и верификации сложных программных систем. Предложен подход использования искусственной нейронной сети для проведения регрессионного тестирования. Обусловлена необходимость использования нейронных сетей при создании тестовых скриптов для автоматического тестирования

Ключевые слова: тестирование программного обеспечения, автоматическое тестирование, нейронные сети, регрессионное тестирование

Введение

Усовершенствование приемов и методов тестирования сложных программных продуктов заслуживает большого внимания со стороны компаний, занимающихся разработкой

программного обеспечения (ПО), в связи с неоспоримой важностью предоставления должного уровня качества выпускаемого ПО.

Тестирование как основной способ контроля качества программных решений может быть определено как процесс исполнения программы с целью проверки соответствия между реальным и ожидаемым ее поведением. Тестирование осуществляют на конечном наборе тестовых случаев, выбранных определенным способом. В наиболее общем случае процесс тестирования может быть представлен совокупностью четырех основных активностей: планирование работ, разработка тестов, их выполнение и анализ результатов проверки ПО.

Уровни тестирования

На протяжении жизненного цикла разработки и сопровождения программного обеспечения тестирование осуществляется на разных его уровнях. Уровень определяет, какой объект или элемент тестируемого продукта рассматривается в ходе проверки. Принято выделять четыре типовых уровня тестирования (представлены на рис. 1).

Модульное тестирование рассматривает отдельный блок программы или приложения как наименьшую функциональную их часть, не способную функционировать отдельно, а только в

Данилов Александр Дмитриевич - ВГТУ, д-р техн. наук, профессор, e-mail: danilov-ad@yandex.ru Мугатина Варвара Михайловна - ВГТУ, аспирант, e-mail: varvaramugatina@gmail. com

совокупности с другими модулями. Таким образом, модульное тестирование предполагает испытание программы на объектном уровне.

Рис. 1. Основные уровни тестирования ПО

Тестирование на интеграционном уровне служит для проверки взаимодействия нескольких модулей в связке друг с другом. Наиболее распространены такие пошаговые подходы интеграционного тестирования как «Сверху вниз» (представлен на рис. 2) и «Снизу вверх» (рис. 3).

Рис. 2. Шаги при нисходящем тестировании

Если для проверки работоспособности ПО используется нисходящее тестирование, в первую очередь рассматриваются высокоуровневые модули программы, на дальнейших шагах - модули, располагающиеся на более низких уровнях архитектурной схемы программы. Для корректного тестирования проверяемого модуля подключаются вспомогательные классы-заглушки, выполняющие функцию замещения реальных классов уровнем ниже рассматриваемого. По мере готовности классы-заглушки заменяются реальными активными компонентами. Такой подход позволяет получить представление о структуре программы на промежуточных этапах тестирования, оценить организацию взаимодействия продукта с пользователем.

В случае восходящего тестирования, в первую очередь рассматриваются так называемые терминальные классы - классы, не использующие в своей работе методы других классов. Для дальнейшего тестирования выбираются такие модули, которые в ходе своего функционирования используют методы только уже протестированных классов. Важная роль отводится драйверу для каждого модуля. Драйвер содержит в себе фиксированные тестовые данные, инициализирует тестируемый модуль, получает выходные результаты тестирования и сравнивает их с ожидаемым результатом работы модуля. Недостаток использования восходящего подхода сводится к отсутствию структуры программы на промежуточных этапах тестирования, при этом данный подход обеспечивает более простую проверку результатов за счет отсутствия необходимости использовать заглушки для неготовых модулей. Восходящий подход наилучшим образом подходит для ситуаций, когда ошибки содержатся в модуле нижнего уровня.

Рис. 3. Шаги при восходящем тестировании

На этапе системного тестирования весь разрабатываемый информационный продукт проверяется на наличие ошибок в функционировании при сопряжении как программных, так и аппаратных компонентов системы. На данном уровне тестируется правильность использования ресурсов системы, совместимость с окружением, полнота и корректность функциональности, удобство

использования. Для исполнения системного тестирования составляются тестовые случаи на основании предъявляемых требований к разрабатываемому продукту (технического задания) и сценариев использования системы.

Приемочное тестирование осуществляется с целью определения готовности передачи программного продукта заказчику. Приемочные испытания могут проводиться как со стороны специалистов компании, разрабатывающей ПО, так и со стороны клиента, в последнем случае подразумевается внешнее тестирование.

Подходы к тестированию

Помимо уровней тестирования принято выделять подходы к выполнению тестирования. Различают подход ручного тестирования и подход автоматического исполнения тестовых сценариев.

Задача проведения ручного тестирования определяет действия специалиста по тестированию как если бы он был пользователем разрабатываемой системы. Ручное тестирование осуществляется путем моделирования возможных сценариев активности пользователя программного продукта. Процедура, описывающая методику выполнения тестирования: набор и порядок выполнения определенных тестовых случаев, диапазон значений входных параметров, ожидаемые результаты поведения системы в каждом конкретном случае, составляется заранее и документируются. Обязательным условием успешного тестирования является четкое понимание со стороны специалиста всех пунктов указанной процедуры. Детальность описания тестового случая может быть различной, в связи с чем от специалиста по тестированию требуется гибкость в задании входных данных и при оценке нечетко сформулированных критериев результаты работы программы.

Автоматизированное тестирование является аналогом ручного, однако для выполнения тестов и оценки их результатов используются программные средства. С помощью специализированных программных инструментов осуществляется запуск тестов, инициализация, выполнение тестового сценария, дальнейший анализ и выдача результатов тестирования. Автоматизация тестирования позволяет исключить влияние человеческого фактора на качество тестирования, обеспечивая строгую однообразность выполнения тестов, гарантированное выявление ошибок при исполнении программы и четкое соблюдение шагов алгоритма каждого тестового случая. Вместе с этим автоматизация процесса тестирования значительно сокращает временные затраты, исключает потребности в сверке с техническим заданием и инструкциями, характерные для ручного тестирования. Следует отметить, что отчеты о результатах тестирования сохраняются и могут быть отправлены всем заинтересованным лицам в автоматическом режиме. Значительным

преимуществом является и тот факт, что выполнение тестов происходит без вмешательства специалиста по тестированию и не зависит от графика работы специалистов.

Выделяют три уровня автоматизации тестирования: уровень модульного тестирования, уровень функционального тестирования и уровень тестирования через пользовательский интерфейс. Каждый уровень характеризуется собственным объектом тестирования, и поэтому для обеспечения максимального качества разрабатываемого программного продукта необходимо выполнять автоматические тесты всех уровней.

В процессе модульного тестирования осуществляется автоматизированная проверка работоспособности отдельных модулей или методов исходного кода программы в изоляции от остальных частей кода. Как правило, модульные тесты создаются и исполняются самими разработчиками программы. В качестве инструмента проверки выступают unit - тесты, которые зачастую пишутся заблаговременно до написания кода программы с целью проверить корректность его работы.

Автоматизация на функциональном уровне охватывает проверку логики работы программы, которая не может быть протестирована через пользовательский интерфейс ПО. По этой причине для проведения автоматизированного тестирования на функциональном уровне специалистам группы контроля качества предоставляется доступ к функциональному слою продукта, что позволяет проверить логику работы программы в автоматическом режиме, минуя использование пользовательского интерфейса.

Уровень автоматизации тестирования через пользовательский интерфейс, который также называется GUI автоматизацией (от английского Graphical User Interface - графический интерфейс пользователя) является наиболее востребованным, так как имитирует прямые действия пользователя и не требует доступа к исходному коду программы.

Одной из техник GUI автоматизации является написание сценария - последовательности действий при взаимодействии пользователя с системой. Создание тестов при такой форме автоматизации подразумевает под собой программирование на языках, специально разработанных для указанной цели, обеспечивающих смягчение основных проблем инструментов воспроизведения и записи. Разработанный поведенческие скрипты (сценарии) применяются как для отдельных частей программного обеспечения, так и всей системы в целом. Такие скрипты симулируют работу пользователя системы.

Наряду со всеми очевидными преимуществами использования

автоматизированного тестирования, такими как высокая скорость выполнения, высокая

повторяемость, надежность и независимость от длины тестового цикла, следует отметить, что автоматические методы тестирования во многих ситуациях уступают ручному тестированию. Это связано с двумя основными проблемами: сложностью написания автоматических тестов, нелинейно зависящей от сложности программного обеспечения, и отсутствием случайности в поведении тестов, отсутствием той гибкости, которую могут обеспечить специалисты при ручном методе тестирования. Для устранения указанных недостатков необходимо решить две задачи: упростить создание автотестов или создавать тестовое покрытие в автоматическом режиме и добавить случайность в поведение скриптов, исполняемых по жесткому алгоритму.

Использование нейросетевых моделей в задачах тестирования ПО

Для решения указанных задач при решении проблем автоматизированного тестирования может быть предложен метод, основывающийся на использовании искусственных нейронных сетей (ИНС). На практике использование нейронных сетей показывает более чем достойные результаты в самых разнообразных приложениях. Так как программное обеспечение может быть рассмотрено в качестве функции в многомерном пространстве, для такой модели можно применять и методы нейронных сетей.

Мозг человека представляет собой чрезвычайно сложную, нелинейную, параллельную систему обработки информации, обладающую способностью организовывать свои структурные компоненты. Для того, чтобы добиться высокой производительности, нейронные сети используют множество взаимосвязей между элементарными ячейками вычислений - нейронами. Аналогичным образом в искусственных нейронных сетях работа проводится с искусственными нейронами.

Модель нейрона, лежащего в основе ИНС, представлена на рис. 4.

Рис. 4. Модель искусственного нейрона

Искусственные нейронные сети представляют собой систему соединённых и взаимодействующих между собой простых процессоров (искусственных нейронов), каждый из которых имеет дело с сигналами, которые он периодически получает, и сигналами, которые он периодически посылает другим процессорам. Искусственный нейрон

имитирует в первом приближении свойства биологического нейрона: на вход искусственного нейрона поступает некоторое множество сигналов, каждый из которых является выходом другого нейрона. Каждый вход умножается на соответствующий вес, аналогичный синаптической силе, и все произведения суммируются, определяя уровень активации нейрона.

Таким образом, в математическом представлении функционирование нейрона i можно описать парой уравнений:

net = ^

= >

1 =1

У! =

1 + е"

(1) (2)

где Х1, Х2,..., Хп - входные сигналы; w,1 , ^^,..., win - веса нейрона ц

п ■

г 2'

уг - выходной сигнал нейрона.

Нейроны разделяются на три группы по своим свойствам: входные нейроны, выходные нейроны и нейроны скрытого слоя (вычислительные узлы).

Многоуровневая нейронная сеть прямого распространения состоит из входного слоя (один узел для каждого входного значения), одного или нескольких скрытых слоев и выходного уровня. В качестве метода обучения нейронной сети прямого распространения, как правило, используется метод обратного распространения ошибки. Алгоритм заключается в передаче входного сигнала в прямом направлении и сигнала ошибки - в обратном. При прямом проходе вектор входных сигналов подается на входной слой нейросети, после этого он постепенно распространяется по сети от одного слоя к последующему. В результате образуется набор выходных сигналов, которые представляют собой фактическую реакцию сети на входной набор. При прямом проходе все синаптические веса постоянны, а во время обратного прохода веса настраиваются в соответствии с правилом коррекции ошибок. Настройка весов происходит следующим образом: фактический выход сети вычитается из ожидаемого и формируется сигнал ошибки. Этот сигнал распространяется по сети в направлении, обратном направлению

синаптических связей.

Структура описанной сети показана на рис. 5.

Фактически нейронная сеть - это особый способ задания функции. Для того, чтобы работать с ней, необходимо, в первую очередь, обучить сеть. Процесс обучения заключается в подготовке обучающей выборки, представляющей собой множество пар входных и соответствующих им заведомо верных выходных векторов. Элементы такого множества должны быть независимыми для возможности расширения выборки и представления

ее в произвольном порядке. Обучающая выборка проходит через нейронную сеть, синаптические веса в нейронных связях корректируются таким образом, чтобы определить функцию, удовлетворяющую обучающей выборке. При этом качество обучения определяет качество работы нейронной сети. Вторым этапом является проверка результата обучения сети, для чего подготавливается тестовая выборка, аналогичная обучающей, но на других значениях. Если результат тестирования будет признан неудовлетворительный, необходимо дообучить сеть или изменить ее структуру.

Рис. 5. Структура многослойной нейронной сети

Искусственные нейронные сети могут быть применены для решения задачи

автоматизированного тестирования программного обеспечения. Были проведены эксперименты, доказывающие эффективность генерации тестовых сценариев, способных выявлять неисправности в работе ПО, при помощи искусственных нейронных сетей.

Многоуровневая нейронная сеть может быть обучена в соответствии с тестируемым приложением на основе сгенерированных в произвольном порядке входных данных для тестирования, которые соответствуют

техническому заданию или спецификации. В результате обучения нейросеть способна показывать достаточную степень точности в рамках тестируемой программы. Таким образом, обученная нейронная сеть становится симулированной моделью программного продукта.

Впоследствии, когда будет доработан функционал разрабатываемого программного продукта и созданы новые версии приложения, потребуется проведение так называемого регрессионного тестирования. Данный вид тестирования направлен на проверку изменений, реализованных в приложении или окружающей среде. В качестве таких изменений может выступать новый функционал, починка дефекта, миграция на новую базу данных, операционную

1

систему или сервер приложений. В таком случае проводится регрессионное тестирование с целью проверки, что в новой версии приложении исправно работает существующая

функциональность.

Таким образом, в случае применения в процессе тестирования искусственных нейронных сетей, при регрессионном тестировании рассматриваемый программный продукт проверяется на тестовых данных для получения выходных результатов, которые затем сравниваются с результатами нейронной сети.

Предположив, что новые версии программного продукта не изменяют существующий функционал, можно ожидать, что при одинаковых входных данных нейронная сеть и реальное приложение выдадут идентичные результаты. С помощью инструмента для сравнения можно будет сделать вывод, корректен ли вывод тестируемого приложения. Описанная методика тестирования представлена на рис. 6, 7, 8.

Рис. 6. Методика тестирования Заключение

Использование основанной на искусственной нейронной сети модели программного обеспечения вместо оригинальной версии программного продукта может быть эффективным по целому ряду причин. Во-первых, оригинальная версия может стать непригодной для тестирования из-за изменения в аппаратной платформе или операционной системе.

Рис. 7. Фаза обучения нейронной сети

Во-вторых, большинство пар входных и выходных данных исходного приложения может быть некритическим на данном этапе процесса тестирования, и, таким образом, использование нейронной сети для автоматизированного

моделирования исходного приложения может сохранить существенное количество

компьютерных ресурсов.

В-третьих, сохранение исчерпывающего набора тестовых сценариев с выходными значениями первоначального приложения может быть неосуществимым для реальных приложений.

Рис. 8. Фаза тестирования

Наконец, в любом случае отсутствует гарантия того, что первоначальная версия является безошибочной. Сравнение результатов работы первоначальной и доработанной версии может пропустить случаи, где обе версии функционируют некорректно. Нейронные сети в данном случае обеспечивают дополнительный параметр для проверки надежности тестирования.

Поскольку программное обеспечение, которое сеть обучена моделировать, было обновлено до новой доработанной версии, аналогичным образом обученная нейронная сеть может учиться классифицировать и новые данные. Другими словами, нейронная сеть способна к обучению на новых версиях постоянно развивающегося программного продукта.

Помимо описанного применения

искусственной нейронной сети в задаче автоматизации тестирования, могут быть рассмотрены и другие аспекты использования ИНС. Например, важной является задача генерации входных данных для тестовых случаев, которые с наибольшей степенью вероятности приведут к обнаружению ошибки в работе программного продукта.

В заключении следует отметить, что нейросетевые технологии совместно

используемыми методами автоматизации тестирования способны улучшить результаты автоматического тестирования в задачах тестирования сложных программных систем.

Литература

1. Данилов А.Д. Иерархическая структура процесса тестирования сложного программного обеспечения [Текст]/ А.Д. Данилов, А.И. Фёдоров // Вестник Воронежского государственного технического университета. - 2014. - Т. 10. - № 3-1. - С.18-21.

2. Тамре, Л. Введение в тестирование программного обеспечения [Текст] / Л. Тамре - М.: Вильямс, 2003. - 354 с.

3. Данилов, А.Д. Цифровые системы управления [Текст] / А.Д. Данилов, В.Н. Головнев - Воронеж: ГОУ ВПО; Воронежская гос. лесотехническая акад., 2007. -235 с.

4. Литвинов В. В. Тестирование моделей объектно-ориентированного программного обеспечения [Текст] / В.В. Литвинов, И.В. Богдан // Математические машины и системы. - 2012. - Т. 1. - № 2. - С.117-125.

5. Яхъяева, Г.Э. Нечеткие множества и нейронные сети [Текст] / Г.Э. Яхъяева - М.: Интернет-Университет

Воронежский государственный технический университет

Информационных технологий; БИНОМ. Лаборатория знаний, 2006. - 316 с.

6. Степанченко, И.В. Методы тестирования программного обеспечения [Тест] / И.В. Степанченко -Волгоград: ГОУ ВПО; Волгоградский государственный технический университет., 2006. - 74 с.

7. Vanmali. М. Using a neural network in the software testing process [Text] / M. Vanmali, M. Last, A. Kandel // International Journal of Intelligent Systems. - 2002. - Vol.17. - N. 1. - P.45-62.

8. Smilgyte K. Artificial Neural Networks Application in Software Testing Selection Method [Text] / K.Smilgyte, J. Nenortaite // Hybrid Artificial Intelligent Systems. - 2011. -Vol. 6678. - P.247-254.

VERIFICATION AND TESTING OF COMPLEX SOFTWARE PRODUCTS BASED ON NEURAL

NETWORK MODEL

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

A.D. Danilov, Doctor of Technical Science, Professor, Voronezh State Technical University, Voronezh, Russian Federation, e-mail: danilov-ad@yandex.ru

V.M. Mugatina, graduate, Voronezh State Technical University, Voronezh, Russian Federation, e-mail: varvaramugatina@gmail.com

Methods and acceptances of software testing should be exposed to continuous development and perfection on the score of incontestable importance of ensuring due quality control of the developed or supported program systems. In this article the main levels of software testing are represented to classify basic methods of testing on each of the provided levels. An analysis of the steps and methods of software testing is carried out.

This article describes in detail basic approaches of testing: manual and automated, and principal characteristic features of them. Levels of automatization are determined for automated testing. This article determines the advantages and disadvantages of automated testing in comparison with manual testing.

The article suggests an approach based on the use of artificial neural networks as a method of elimination of the existing shortcomings of application of automated testing. The structure of an artificial neural network and model of training are considered.

As a result, the neural network model is provided for the task of automatic testing and verification of complex program systems. Approach of use of an artificial neural network for carrying out regression testing is offered. The need of use of neural networks for creation of test scripts for automatic testing is caused

Key words: software testing, software automation testing, neural networks, regression testing

References

1. Danilov A. D., Fyodorov A.I. Ierarhicheskaya struktura processa testirovaniya slozhnogo programmnogo obespecheniya [The hierarchical structure of the process of testing complex software], Vestn. Voronezh. Gos.Techn. Univ.2014.,vol.10., no.3-1, pp.18-21.

2. Tamre L. Vvedenie v testirovanie programmnogo obespecheniya [Introduction to Software Testing], Moscow: Vilyams, 2003.

3. Danilov A. D., Golovnev V.N. Cifrovye sistemy upravleniya [Digital control systems], Voronezh, 2007.

4. Litvinov V. V., Bogdan I. V. Testirovanie modelej obektno-orientirovannogo programmnogo obespecheniya [Test models of object-oriented software], Mathematical Machines and Systems. 2012., vol.1., no.2, pp.117-125.

5. Yahyaeva G. EH. Nechetkie mnozhestva i nejronnye seti [Fuzzy sets and neural networks], Moscow, 2006.

6. Stepanchenko I.V. Metody testirovaniya programmnogo obespecheniya [Software Testing Methods], Volgograd, 2006.

7. Vanmali. M., Last M., Kandel A. Using a neural network in the software testing process // International Journal of Intelligent Systems. - 2002. - Vol.17. - N. 1. - pp.45-62.

8. Smilgyte K., Nenortaite J. Artificial Neural Networks Application in Software Testing Selection Method // Hybrid Artificial Intelligent Systems. - 2011. - Vol. 6678. - pp.247-254.

i Надоели баннеры? Вы всегда можете отключить рекламу.