Информатика, вычислительная техника и управление
УДК 004.054
ПРИМЕНЕНИЕ АППАРАТА ИСКУССТВЕННЫХ НЕЙРОННЫХ СЕТЕЙ В ЗАДАЧЕ ОПТИМИЗАЦИИ ПРОЦЕССА ТЕСТИРОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
© 2018 А.Д. Данилов, В.М. Мугатина Воронежский государственный технический университет, г. Воронеж, Россия
Аннотация: процесс тестирования программного обеспечения (ПО) является важной, но при этом одной из наиболее ресурсозатратных активностей в жизненном цикле разработки программного продукта. Внесение правок в код ПО приводит к необходимости проведения нового цикла регрессионного тестирования, что обусловливает задачу оптимального распределения усилий в ходе выполнения тестов в различных модулях проверяемой системы. Рассмотрен наиболее распространенный подход к построению программного интерфейса современных веб-приложений -REST API, а также описаны особенности тестирования подобных продуктов, обусловлены преимущества автоматизации процесса тестирования. С учетом обозначенных характеристик процесса тестирования ПО предложен подход, базирующийся на использовании аппарата искусственных нейронных сетей, позволяющий решать задачу классификации модулей на подверженные возникновению в них ошибок и на неподверженные в ответ на внесение изменений в код того или иного метода ПО. Такая классификация позволяет выделять ресурсы в большей степени на проверку только тех модулей, вероятность наличия ошибок в которых определена результатом работы нейронной сети. Приведена структура нейронной сети и обозначены параметры входных и выходных значений ИНС. Определены цели дальнейшего исследования предложенного подхода
Ключевые слова: тестирование программного сионное тестирование, прогнозирование дефектов
Введение
Тестирование программного обеспечения (ПО), как на этапе разработки продукта, так и в процессе технической поддержки системы, находящейся в промышленной эксплуатации, является важной активностью, необходимой для обеспечения должного уровня качества продукта для конечного пользователя. В современном мире программные продукты становятся все более комплексными, размер таких систем постоянно увеличивается, в связи с чем индустрия разработки программного обеспечения сталкивается с проблемой ограниченности и недостаточности ресурсов, требуемых для исчерпывающего тестирования ПО.
В качестве способа решения задачи о сокращении объема требуемых ресурсов в процессе разработки ПО могут выступать инструменты, способные прогнозировать возникновение дефектов, то есть несоответствий между реальным и ожидаемым поведением программы, в том или ином модуле - составляющей части программного продукта [1]. Как показывает практика, 80% всех ошибок в продукте являются следствием неточностей, которые были допущены при написании 20% методов программы. Таким образом, если провести измерение подверженности дефектам той или
обеспечения, нейронные сети, тестирование REST API, регрес-
иной части функционала продукта в ответ на внесение изменений в конкретные методы кода и классифицировать модули на подверженные возникновению в них ошибок и на неподверженные, руководители проектов смогут выделять ресурсы для более интенсивного тестирования только тех модулей, в которых с большей степенью вероятности будут обнаружены дефекты. Такая стратегия позволяет максимально эффективно распределять усилия, требуемые на проведение тестирования, для нахождения наибольшего количества дефектов и более широкого покрытия потенциально уязвимых модулей программного продукта.
Для прогнозирования возникновения ошибок в том или ином модуле ПО требуется определение всех существующих зависимостей между методами в коде программного продукта и модулями, составляющими готовый продукт. Поскольку система таких взаимосвязей является комплексной и нелинейной, методы машинного обучения, такие как искусственные нейронные сети, способны обеспечивать наиболее адекватный результат в решении задачи прогнозирования появления дефектов по сравнению с традиционными линейными моделями [2].
Структурно статья состоит из следующих разделов: описание и основные характеристики
REST-архитектуры как одного из наиболее распространенных решений для веб-сервисов; особенности процесса тестирования веб-сервисов с применением в них REST технологии; рассмотрение аппарата искусственных нейронных сетей применительно к задачам тестирования ПО; представление структуры тестируемого ПО с помощью нейронной сети для прогнозирования подверженных ошибкам модулей продукта; заключение и постановка задач для дальнейшего исследования.
REST архитектура ПО
Для построения значительного количества веб-сервисов (веб-служб) в современном мире используется специальный стиль архитектуры ПО для распределенных систем - REST. REST (Representational State Transfer, что переводится как «Передача состояния представления») предполагает унификацию взаимодействия между клиентом и сервером с использованием определенных стандартов (HTTP протокол запросов и ответов, универсальный стандарт построения URL, форматы данных - JSON или XML).
Клиент-серверная модель взаимодействия подразумевает разделение требований клиента и логики работы сервера (рис. 1). При этом сервер не хранит информацию о клиентах или результаты работы предыдущей операции, предполагая, что в запросе клиента к серверу хранятся все требуемые для обработки запроса данные и при необходимости данные для идентификации клиента. При этом пара «запрос» -«ответ» может быть кэшируемой, тогда данные ответа будут храниться на стороне клиента. В противном случае при каждом новом запросе клиент должен заново отправлять запрос на сервер.
Запрос^
Клиент Ответ
Рис. 1. Клиент-серверная архитектура
HTTP протокол определяет взаимодействие между клиентом и сервером, которое, как уже было упомянуто выше, основывается на базе сообщений-запросов (Request) и сообщений-ответов (Response). Оба вида сообщений состоят из трех основных частей: стартовая
строка, заголовки и тело. При этом только стартовая строка является обязательной составляющей сообщения.
Стартовая строка запроса представляет собой метод HTTP-запроса и идентификатор ресурса (URI, Uniform Resource Identifier). Идентификатор является постоянным (не изменяется в процессе обмена данными) и уникально определяет каждый ресурс.
В REST используются четыре основных HTTP- метода: GET, POST, PUT, DELETE. Чаще всего каждый из них служит для выполнения соответствующего действия из CRUD (аббревиатура, обозначающая набор действий по созданию, чтению, обновлению и удалению данных: create, read, update, delete). В REST общепринятыми считаются следующие соответствия:
GET - прочитать, получить (read);
POST - создать (create);
PUT - изменить, обновить (update);
DELETE - удалить (delete).
Стартовая строка ответа содержит в себе код состояния - целое число из трёх десятичных цифр, при этом первая цифра указывает на класс состояния: 1 - информационное, 2 -успешно, 3 - перенаправление, 4 - ошибка клиента, 5 - ошибка сервера. Наиболее часто встречаемые коды ответов:
200 (OK) - успешный запрос;
400 (Bad Request) - невалидный запрос;
404 (Not found) - ресурс не найден;
500 (Internal Server Error) - внутренняя ошибка сервера;
Запрос:
get/store/catalog/product/{productld} Ответ:
Status Code:200 OK
"Content-Language": "en-US" "Content- Type": "application/json" "Date": "Fri, 01 Mar 2018"
Строка запроса
Код ответа
Заголовки ответа
{
"attributes": [ {
"value": "180",
"id": "LIFESPAN",
"name": "Срок годности (в днях)"
}, {
"value": "0,2", "id": "Weight", "name": "Масса"
"id": "12345", "name": "Конфеты 2Q0r", "Price": "105.20"
Г Тело ответа
Рис. 2. Пример REST-запроса
Помимо стартовой строки, в сообщении также могут содержаться заголовки и тело. Заголовки представляют собой набор пар из имени параметра и его значения. В заголовок может быть передана разнообразная служебная информация: название и/или версия браузера клиента, кодировка сообщения, формат передаваемых данных и т.д. В теле сообщения содержатся непосредственно передаваемые данные, представленные, как правило, в стандартном формате, например, XML или JSON. Пример обмена сообщениями (запрос и ответ) между клиентом и сервером представлен на рис. 2.
Тестирование веб-приложений, построенных на основе REST
Подход REST API (API - Application Programming Interface, интерфейс программирования приложений) широко применяется к построению программного интерфейса современных веб-приложений и обусловливает некоторые особенности процесса тестирования системы [3].
Отслеживание сообщений HTTP - запросов и ответов в общении между клиентом и сервером позволяет более точно локализовать обнаруженные в работе веб-приложения ошибки. Это является важным аспектом, поскольку на уровне графического интерфейса вид ошибки может не предоставлять исчерпывающей информации о причинах неисправности.
Тестирование API обеспечивает экономию времени на этапе подготовки исходных тестовых данных и ситуаций. Так, если тест предполагает проверку редактирования определенного документа, в случае его исполнения на уровне графического интерфейса пользователя необходимо провести ряд действий для предварительной загрузки и последующего выбора данного документа. В случае же тестирования REST API, документ может быть указан в теле запроса.
Автоматизацию тестирования, то есть выполнение тестовых случаев в автоматическом режиме в большем объеме выгоднее проводить на уровне API. Это утверждение может быть проиллюстрировано с помощью «пирамиды автоматизации тестирования» (рис. 3).
В аспекте автоматизации пример тестового случая может оказаться неуспешным в случае выполнения на уровне графического интерфейса ввиду возможного наличия сопутствующих ошибок при обращении к различным веб-
элементам. Тест же на уровне API проверит непосредственно необходимый функционал.
Рис. 3. Пирамида автоматизации тестирования
Важным моментом при тестировании REST API является возможность проводить тесты с большим количеством наборов исходных данных. В этом случае идентичный сценарий повторяется многократно для всех выбранных значений. Данная методология реализуется на уровне API с гораздо более приемлемыми скоростью и стабильностью по сравнению с реализацией через графический интерфейс.
Рис. 4. Использование запроса в нескольких модулях продукта
Помимо прочего, одни и те же REST-запросы могут использоваться в различных модулях веб-приложения (рис. 4). Таким образом, при тестировании на уровне API, один запрос проверяется только один раз соответствующим набором тестов, а в случае тестирования графического интерфейса количество наборов тестов соответствует числу ситуаций во всех модулях приложения, в которых может быть вызван тестируемый запрос.
Однако проверка веб-приложения на уровне графического интерфейса не может быть проигнорирована, так как именно на данном уровне пользователь будет использовать разработанную систему, и все ошибки, с которыми может столкнуться пользователь, должны быть обнаружены и исправлены.
Использование аппарата ИНС
для прогнозирования подверженных ошибкам модулей ПО
Так как тестирование графического интерфейса пользователя (особенно ручное) требует значительных ресурсов, необходим способ, обеспечивающий оптимальное распределение усилий на проведение такого тестирования.
В данной статье предложен подход, в рамках которого при помощи аппарата искусственных нейронных сетей строится структура, определяющая взаимосвязи между методами REST-запросов и модулями веб-приложения, в которых потенциально могут появиться дефекты вследствие внесения изменений в код конкретного метода запроса.
Если в случае небольшого приложения решение данной задачи является очевидным, так как все взаимосвязи четко прослеживаются, то при работе с комплексным программным продуктом зависимости имеют сложно структурированный характер.
Описанная задача может быть интерпретирована как задача классификации модулей программного продукта на подверженные возникновению в них ошибок и на неподверженные в зависимости от наличия изменений в определенных методах кода.
Для решения обозначенной задачи может быть применен аппарат искусственных нейронных сетей.
Искусственная нейронная сеть (ИНС) - это система соединенных и взаимодействующих вычислительных единиц, роль которых выполняют искусственные нейроны. Каждый нейрон подобной сети имеет дело только с сигналами, которые он получает, и, производя определенные вычисления, передает другим нейронам. За счет способности к обучению такая сеть применима для решения сложных задач.
У каждого нейрона есть входы, на которые поступают сигналы, каждому из которых соответствует определенное значение, вес. Поступившие на входы сигналы умножаются на соответствующие им веса, после чего все произведения передаются в сумматор. Роль сумматора - агрегировать все входные сигналы в одно число, взвешенную сумму, которая характеризует сигнал, поступивший на нейрон. Далее нейрон обрабатывает взвешенную сумму при помощи функции активации и формирует выходной сигнал.
Структурно нейрон представлен на рис. 5.
Рис. 5. Структура искусственного нейрона
Взвешенная сумма вычисляется с помощью формулы (1), а выход нейрона рассчитывается по формуле (2):
n
net = xw, + xnwn + ••• + xw = V x ■ w. , (1)
11 2 2 n n / i г г ' \ /
i=1
n
out (net) = <!>(net) = ф( V хг ■ wi). (2)
г=1
В качестве функции активации могут быть использованы различные функции, например, (3).
out(net) = --—. (3)
1 + e net
Искусственные нейронные сети - это совокупность нейронов, объединенных в определенную структуру. Наиболее распространенным вариантом структуры нейросети является сеть, состоящая из нейронов входного слоя, одного или нескольких скрытых слоев и выходного слоя, пример такой сети приведен на рис. 6.
Рис. 6. Структура искусственной нейронной сети
Нейроны bi - это нейроны смещения, особенность которых заключается в том, что они не имеют входных связей, а их вход и выход всегда равны 1. Нейроны смещения могут присутствовать в сети по одному на слое, либо отсутствовать. Назначение нейронов смещения -предоставлять возможность получения выходного результата путем сдвига графика функции активации влево или вправо.
Выходные значения нейронов скрытого слоя могут быть получены следующим образом:
h(2) = фЮ x( + ю™ x2 + ю™ x3 + bj(1)),
hf = Ф(Юx + ЮX2 + ЮХз + b21)), (4)
h3(2) = ф(ю3(1) x( + ю3(2) x2 + ю3(3) x3 + b3(1)).
Вес соответствующего связи обозначается как Wjj®, где i - номер узла в слое 1+1, j - номер узла в слое 1.
Выходное значение нейрона, расположенного в выходном слое (результат работы сети), вычисляется по формуле:
h((3) = ф(ю1(12)x1 + ю((22)х2 + ю1(32)x3 + b1(2)) (5)
На начальном этапе значения весов Wj задаются произвольным образом, затем в процессе обучения набор весовых коэффициентов настраивается так, чтобы сеть в ответ на определенный набор входных данных выдавала правильный (ожидаемый) результат. Для обучения нейронной сети могут быть использованы различные методы, один из которых - метод обратного распространения, в основе которого лежит алгоритм градиентного спуска. Обучение производится с помощью специальных выборок входных данных и соответствующих им корректных выходов сети.
Корректировку набора весов необходимо начать с выходного слоя. Рассчитав выходное значение сети по формуле (6), его можно сравнить с ожидаемым значением out (из обучающей выборки). Введем величину и (дельта), которая будет равна разности между ожидаемым и реальным значением выхода, умноженной на производную функции активации выходного нейрона. Производная функции активации (3) равна:
out (net)' = out (net) • (1 - out (net)). (6)
Тогда дельта может быть рассчитана в соответствии с:
ц = h13) • (1 -h(3))-(out-h(3)). (7)
Значения весов выходного слоя после коррекции (на итерации к+1) рассчитываются согласно:
+1)=)Л(3), (8)
где 7] - коэффициент скорости обучения.
Затем необходимо рассчитать значения весовых коэффициентов для скрытого слоя. Для каждого из них рассчитывается значение дельты:
ай1С = ^(2)-(1" ^Аз <4
ай2с = Л((2) • (1 - ¿((2)М5йз<2)), (9)
ай2С = hl(2) • (1 - Й^М^Ч(2)).
Веса скрытых слоев после коррекции (итерация к+1) будут равны:
ф™(к +1) = <(к) + ] • §к\е '^(2),
+1) = <(к) + ]^й2С^22), (10)
^(к + 1) = ^(к) + 7А2сЛ(2).
Для каждого нейрона в скрытом слое вычисляется дельта и подстраиваются веса, ассоциированные с этим слоем, этот процесс повторяется для всех слоев по направлению к входу. После корректировки весовых коэффициентов выход сети рассчитывается заново с учетом новых значений весов. Итерации по корректировке весов продолжаются до достижения ошибкой определенного заранее минимального значения, либо заданного количества итераций.
После того, как сеть будет обучена, на вход может быть подан произвольный набор входных данных, отсутствующий в обучающей выборке, и нейросеть рассчитает выходное значение.
Таким образом, искусственная нейронная сеть может быть применима в задачах классификации. К такой задаче может быть сведена проблема определения модулей программного продукта, в которых могут содержаться ошибки вследствие внесения изменений в тот или иной метод кода.
Представление структуры тестируемого ПО с помощью нейронной сети
Для того, чтобы применить аппарат искусственных нейронных сетей в решении обозначенной задачи прогнозирования подверженных ошибкам модулей продукта, необходимо определить, какая информация может быть использована в качестве входных и выходных данных ИНС.
В данной статье предложен подход, в рамках которого количество входных нейронов ИНС совпадает с количеством рассматриваемых методов кода (соответствующих REST-запросам). Значение входного параметра может быть равно 1 - в случае, когда в данный метод в ходе разработки вносились изменения, либо 0 - если изменений в коде рассматриваемого метода не было.
входной слой Скрытые слои выходной слой
Рис. 7. Структура ИНС
Количество выходов нейронной сети определяется числом модулей графического интерфейса программного продукта, значения выходов при этом находятся в интервале от 0 до 1, где 0 соответствует минимальной вероятности наличия дефектов в данном модуле, 1 -максимальной.
Структура сети (представлена на рис. 7, количество скрытых слоев и нейронов скрытых слоев) может быть изменено в зависимости от результатов обучения сети для достижения минимальной ошибки работы ИНС.
Данные для обучающей выборки могут быть собраны в ходе этапов разработки программного решения, когда в ходе проверки внесения правок в том или ином методе (запросе) были обнаружены ошибки в различных модулях продукта.
наполнения корзины покупателя). Набор рассматриваемых в рамках примера запросов и модулей тестируемого веб-приложения указан на рис. 8.
Обучающая выборка собрана на этапе разработки продукта путем определения частоты возникновения ошибок в каждом из семи перечисленных модулей в ответ на внесение изменений в один или несколько запросов (из пяти представленных). Фрагмент такой выборки представлен на рис. 9.
Методы Р^ЕвТ-запросов:
1) Получить содержимое корзины покупателя
2) Добавить товары
в корзину покупателя
3) Обновить количество тоааров в корзине
4) Удалить товар из корзины
5) Удалить недоступные товары из корзины
0 ©
0 0 ©
0 0
Входной слой
0 0 © 0
Модули программного продукта:
1) "Корзина покупателя"
2) "Страница каталога товаров"
3) "Страница описания товара"
4) "Предпросмотр корзины"
5) "Оформление заказа"
6) "Главная страница интернет-магазина"
7) "Личный кабинет"
Выходной слой
Рис. 8. Входные и выходные параметры ИНС
Рис. 9. Фрагмент обучающей выборки
Для моделирования сети был использован инструмент STATISTICA Automated Neural Networks. Нейронная сеть имеет 5 нейронов на входном слое и 7 нейронов выходного слоя.
Оптимальный результат обучения сети (рис. 10) был достигнут в случае следующей структуры: многослойный перцептрон, распределение нейронов по скрытым слоям: 5 - 5 - 7, метод обучения - BFGS, функция ошибки -среднеквадратичная ошибка выхода сети, функция активации - логистическая.
Пример использования нейросетевой структуры ПО в процессе тестирования
Применение предложенной нейросетевой структуры может быть проиллюстрировано на примере интернет-магазина (функционал
Samples: Train Test
Рис. 10. Процесс обучения сети
В результате обучения нейронной сети был получен инструмент, позволяющий определять вероятность наличия дефекта в конкретном модуле вследствие изменения в том или ином методе. В рассматриваемом случае, если вычисленное нейросетью для модуля выходное значение превышает величину 0.3, модуль подвергается полноценному тестированию, в противном случае ограничивается поверхностным (smoke) тестированием. Если в ходе smoke-тестов был обнаружен дефект, такой случай направляется для дообучения сети.
Заключение
В ходе работы были определены особенности тестирования веб-приложений, построенных с использованием REST API, выделена проблема ограниченности ресурсов, требуемых для проведения тестирования в ходе разработки программного продукта.
Предложен подход, позволяющий рассматривать структуру ПО в виде искусственной
нейронной сети, что предоставляет возможность после проведения обучения такой сети решать задачу классификации модулей программного продукта на подверженные наличию дефектов и на неподверженные, в ответ на внесение правок в тот или иной метод кода. Это позволяет оптимальным образом распределять ресурсы на проведение тестирования, уделяя повышенное внимание только потенциально дефектным модулям.
Предложенный подход был проиллюстрирован на примере структуры программного продукта. Большой интерес представляет рассмотрение нейронной сети, соответствующей структуре более сложного и комплексного программного обеспечения, для которого необходимо определить правила, согласно которым может быть собрана выборка примеров для максимально эффективного обучения сети, и проверить работу сети в ответ на реальные воздействия, выражающиеся во внесении изменений в код того или иного метода.
Литература
1. Данилов А.Д., Мугатина В.М. Применение нейронных сетей для генерации сценариев тестирования программного продукта // Актуальные направления научных исследований XXI века: теория и практика. 2016. Т. 4. № 6 (26). С. 16-21.
2. Данилов А.Д., Мугатина В.М. Верификация и тестирование сложных программных продуктов на основе нейросетевых моделей // Вестник Воронежского государственного технического университета. 2016. Т. 12. № 6. С. 62-67.
3. Данилов А.Д., Фёдоров А.И. Иерархическая структура процесса тестирования сложного программного обеспечения // Вестник Воронежского государственного технического университета. 2014. Т. 10. № 3-1. С. 18-21.
Поступила 09.02.2018; принята к публикации 27.03.2018 Информация об авторах
Данилов Александр Дмитриевич - д-р техн. наук, профессор, Воронежский государственный технический университет (394026, Россия, г. Воронеж, Московский проспект, 14), е-mail: [email protected]
Мугатина Варвара Михайловна - аспирант, Воронежский государственный технический университет (394026, Россия, г. Воронеж, Московский проспект, 14), е-mail: [email protected]
APPLICATION OF ARTIFICIAL NEURAL NETWORKS FOR SOFTWARE TESTING
OPTIMIZATION
A.D. Danilov, V.M. Mugatina Voronezh State Technical University, Voronezh, Russia
1,4
1,1
0,8
0,5
0,1
-0,2
Abstract: the process of software testing is important, but also it is one of the most resource-intensive activities in the life cycle of software product development. Making changes to the software causes the need for a new cycle of regression testing, and that is why problem of optimal distribution of efforts during test execution in various units of the system under test is actual. The paper considers the most common approach of building the program interface of modern web applications - the REST API, and describes the features of testing of such systems. The approach based on the use of artificial neural networks was proposed. This approach makes it possible to solve the problem of classifying modules into two groups: prone to error modules and modules without defects. This classification allows to allocate resources to check only those modules, the probability of having errors in which is determined by the result of the work of the neural network. The structure of a neural network is given and the parameters of input and output values of neural network are designated. The objectives of further research of the proposed approach are determined
Key words: software testing, neural networks, REST API testing, regression testing, default prediction
References
1. Danilov A.D., Mugatina V.M. "Application of artificial neural networks for test case generation", Actual directions of scientific research of the XXI century: theory and practice (Aktualnye napravleniya nauchnykh issledovaniy XXI veka: teoriya i praktika), 2016, vol. 4, no. 6 (26), pp. 16-21.
2. Danilov A.D., Mugatina V.M. "Verification and software testing of complex products based on neural network models", The Bulletin of Voronezh State Technical University (Vestnik Voronezhskogo gosudarstvennogo tekhnicheskogo universiteta), 2016, vol. 12, no. 6, pp. 62-67.
3. Danilov A.D., Fedorov A.I. "Hierarchical structure of software testing process", The Bulletin of Voronezh State Technical University (Vestnik Voronezhskogo gosudarstvennogo tekhnicheskogo universiteta), 2014, vol. 10, no. 3-1, pp. 18-21.
Submitted 09.02.2018; revised 27.03.2018
Information about the authors
Aleksander D. Danilov, Dr.Sci. (Technical), Professor, Voronezh State Technical University, (14 Moskovskiy prospekt, Voronezh 394026, Russia), e-mail: [email protected]
Varvara M. Mugatina, Graduate Student, Voronezh State Technical University (14 Moskovskiy prospekt, Voronezh 394026, Russia), e-mail: [email protected]