Доклады, выступления, видео и электронные публикации

Использование нейронных сетей в тестировании сложных программных систем

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

  1. Модульное тестирование. Автоматический метод тестирования, позволяющий проверять работоспособность небольших модулей, за счет написания unit-тестов. На сегодняшний день имеется огромное количество библиотек помогающих быстро и удобно писать такие тесты.
  2. Непрерывное интегрирование. Метод тестирования связей между модулями, за счет частых сборок разрабатываемого проекта и выполнения небольших проверок на совместимость модулей.
  3. Поведенческие скрипты. Этот метод применяется как для частей ПО, так и для всей программы в целом. Суть его довольно проста. Пишутся небольшие “жесткие” скрипты, которые симуляции работу человека. Но этот метод ограничен, так как разработка таких скриптов трудоемка, в них отсутствует случайность и реакция на исключительные ситуации.
  4. Ручное тестирование. Пожалуй, лучший метод, так как ни одна программа не может заменить человека. Однако он имеет существенный недостаток, человеческие ресурсы ограничены.

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

  • Сложность написания тестов не линейно зависит от сложности ПО.
  • Отсутствует случайность в поведении тестов.

Таким образом, возникает две задачи:

  1. Необходимо упростить создание или автоматически создавать тестовое покрытие.
  2. Необходимо добавить случайность в поведение тестового скрипта.

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

Нейронная сеть - это математическая модель, основанная на когнитивных процессах мозга. Так же как и мозг, нейронная сеть состоит из узлов (нейронов) и переменных связей между ними (веса нейронных связей). Нейроны разделяются на 3 группы по своим свойствам: входные нейроны, выходные нейроны и нейроны скрытого слоя (вычислительные узлы). Фактически нейронная сеть – это особый способ задания функции. Чтобы работать с ней, необходимо проделать следующую работу.

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

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

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

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

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

Автор: Бабин Д. В.

Дата публикации: 01.01.2013

Библиографическая ссылка: Бабин Д. В. Использование нейронных сетей в тестировании сложных программных систем // Комплексная защита информации. Электроника инфо. Материалы XVIII Международной конференции 21–24 мая 2013 года, Брест (Республика Беларусь). 2013. С. 112–113.

Scientia potestas est
Кнопка связи