Обучение с подкреплением для обеспечения качества программного обеспечения

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



Автоматизированная проверка качества

Фактически, имея возможность просто запустить свой агент и запустить сеанс обучения или, в этом случае, сеанс тестирования, я быстро смог найти проблемы во многих областях моего кода. Почему? Хорошее обучение с подкреплением часто обвиняют в том, что его научили методом грубой силы. Это означает, что агент RL будет пробовать все мыслимые пути, пока не найдет награду. В случае тестирования, попробовать все - это хорошо, очень хорошо. Я обнаружил способ использования RL для автоматизации тестирования моего приложения. Это позволило мне быстро создать приложение за день, а затем за 4 дня или около того итераций, чтобы создать эту демонстрацию выше. Я уверен, что если бы я повторял итерацию с реальным QA, то процесс был бы вдвое или втрое больше.



Я также должен упомянуть, что мне удалось сделать все это быстро с помощью агента RL с помощью набора инструментов Unity ML-Agents. ML-Agents - это продвинутая RL-платформа, которая позволяет быстро создавать агентов для различных задач AI. Это передовая платформа, которая конкурирует с некоторыми из самых последних исследований, и, более того, ее легко запустить и использовать. Поскольку я написал несколько книг по Unity и RL, я могу быть немного предвзятым, но приветствую вас, чтобы вы сами оценили инструмент.

Пример решения

Когда я писал свою 5-ю и 2-ю книги по RL и ML-агентам, я открыл для себя красоту тестирования с RL. Это так сильно на меня повлияло, что я изменил свою последнюю книгу и написал очень длинную главу о создании инфраструктуры тестирования / отладки с помощью ML-агентов. Теперь, если вы опытный пользователь Unity, вы, вероятно, можете создать свой собственный или использовать мой код, ссылка внизу. Менее опытные пользователи могут захотеть приобрести мою книгу, чтобы ознакомиться с ней на практике. Конечно, вы можете следить за другими платформами RL QA, которые скоро появятся.

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

  1. Установите Unity и ML-агентов.
  2. Импортируйте образец игрового проекта или ресурсы из Unity Asset Store. Подойдет любая игра, но лучше всего подойдет та, в которой используются клавиши управления WASD.
  3. Откройте игровой проект в Unity и определите игровой объект Player. Мы будем автоматизировать Player для автоматического запуска игры.
  4. Добавьте в сцену объект TestAcademy. В примере кода это реализация этого класса. Класс Academy и подклассы, такие как TestAcademy, являются менеджерами по обучению ваших агентов.
  5. Добавьте компонент TestAgent к объекту Player. Класс Agent представляет агента RL. Подкласс TestAgent - это реализация, предназначенная для тестирования.
  6. Добавьте в игру цель награды. Вы можете использовать простой куб с коллайдером, который дает агенту награду при столкновении с ним. В приведенном ниже примере и коде используется эта опция. Другой вариант - давать агенту информацию о каждой найденной ошибке.
  7. Дайте вашему агенту мозг. Добавьте тренировочный мозг своему агенту и используйте визуальные наблюдения. Визуальные наблюдения позволяют вашему агенту наблюдать за игрой так же, как и игрок. Это позволяет агенту изучать игру и взаимодействовать с ней так же, как это сделал бы человек.
  8. Добавить конфигурацию. Есть несколько разделов конфигурации, которые нужно будет настроить для мозга агента. Примеры Unity отлично демонстрируют множество различных типов мозга.
  9. Тренируй это. После того, как все настроено, вы можете запустить агента и позволить ему играть в игру самостоятельно. Агенту нужно время, чтобы что-то сделать, но со временем он исследует столько, сколько сможет.

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

Не только для игр

Я мог бы предположить, что проницательный и энергичный стартап мог бы пойти дальше этой идеи и создать интерфейс для любой платформы, кроме Unity. Представьте себе платформу RL, построенную на JavaScript, которая может автоматически проверять веб-страницы и сайты. Мы могли бы пойти дальше и встроить платформу в нашу любимую среду IDE, такую ​​как Eclipse или Visual Studio. Еще шаг вперед и автоматизация модульного тестирования. Хотя мне интересно, можем ли мы просто пройти этап автоматизированного модульного тестирования и сразу перейти к автоматической генерации полностью протестированного кода. В любом случае, что меня удивляет, так это очевидное отсутствие движения крупных парней, таких как Google, Microsoft, Amazon и Apple, в эту область ИИ для разработки программного обеспечения.

MonkeyRunner 2.0?

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

Означает ли это конец работе QA?

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