Обучение с подкреплением для обеспечения качества программного обеспечения
Недавно я работал над проектом, в котором использовал обучение с подкреплением, чтобы научить агента выбирать характерные черты на изображении. Агент сработал достаточно хорошо и смог добиться невероятных результатов. Однако больше всего в этом упражнении меня впечатлило то, насколько хорошо агент помог мне разработать само приложение. Видите ли, когда я разрабатывал приложение и достигая определенных этапов, я позволял агенту поиграть или протестировать среду. Я обнаружил, что агент постоянно жульничает или, скажем так, находит ошибки в моем приложении. Если бы была ошибка, она бы наверняка ее нашла. Фактически, я тестировал это приложение и на людях, и агент обычно обнаруживал ошибки быстрее, намного быстрее. Ниже представлен гифка с результатами и ссылка на статью с более подробной информацией об этом приложении:
Автоматизированная проверка качества
Фактически, имея возможность просто запустить свой агент и запустить сеанс обучения или, в этом случае, сеанс тестирования, я быстро смог найти проблемы во многих областях моего кода. Почему? Хорошее обучение с подкреплением часто обвиняют в том, что его научили методом грубой силы. Это означает, что агент RL будет пробовать все мыслимые пути, пока не найдет награду. В случае тестирования, попробовать все - это хорошо, очень хорошо. Я обнаружил способ использования RL для автоматизации тестирования моего приложения. Это позволило мне быстро создать приложение за день, а затем за 4 дня или около того итераций, чтобы создать эту демонстрацию выше. Я уверен, что если бы я повторял итерацию с реальным QA, то процесс был бы вдвое или втрое больше.
Я также должен упомянуть, что мне удалось сделать все это быстро с помощью агента RL с помощью набора инструментов Unity ML-Agents. ML-Agents - это продвинутая RL-платформа, которая позволяет быстро создавать агентов для различных задач AI. Это передовая платформа, которая конкурирует с некоторыми из самых последних исследований, и, более того, ее легко запустить и использовать. Поскольку я написал несколько книг по Unity и RL, я могу быть немного предвзятым, но приветствую вас, чтобы вы сами оценили инструмент.
Пример решения
Когда я писал свою 5-ю и 2-ю книги по RL и ML-агентам, я открыл для себя красоту тестирования с RL. Это так сильно на меня повлияло, что я изменил свою последнюю книгу и написал очень длинную главу о создании инфраструктуры тестирования / отладки с помощью ML-агентов. Теперь, если вы опытный пользователь Unity, вы, вероятно, можете создать свой собственный или использовать мой код, ссылка внизу. Менее опытные пользователи могут захотеть приобрести мою книгу, чтобы ознакомиться с ней на практике. Конечно, вы можете следить за другими платформами RL QA, которые скоро появятся.
Учебники в моих книгах, как правило, намного более подробны и очень практичны. По этой причине я обычно избегаю больше технических сообщений в блогах. Я оставил детали здесь легкими, чтобы показать основной рабочий процесс.
- Установите Unity и ML-агентов.
- Импортируйте образец игрового проекта или ресурсы из Unity Asset Store. Подойдет любая игра, но лучше всего подойдет та, в которой используются клавиши управления WASD.
- Откройте игровой проект в Unity и определите игровой объект Player. Мы будем автоматизировать Player для автоматического запуска игры.
- Добавьте в сцену объект TestAcademy. В примере кода это реализация этого класса. Класс Academy и подклассы, такие как TestAcademy, являются менеджерами по обучению ваших агентов.
- Добавьте компонент TestAgent к объекту Player. Класс Agent представляет агента RL. Подкласс TestAgent - это реализация, предназначенная для тестирования.
- Добавьте в игру цель награды. Вы можете использовать простой куб с коллайдером, который дает агенту награду при столкновении с ним. В приведенном ниже примере и коде используется эта опция. Другой вариант - давать агенту информацию о каждой найденной ошибке.
- Дайте вашему агенту мозг. Добавьте тренировочный мозг своему агенту и используйте визуальные наблюдения. Визуальные наблюдения позволяют вашему агенту наблюдать за игрой так же, как и игрок. Это позволяет агенту изучать игру и взаимодействовать с ней так же, как это сделал бы человек.
- Добавить конфигурацию. Есть несколько разделов конфигурации, которые нужно будет настроить для мозга агента. Примеры Unity отлично демонстрируют множество различных типов мозга.
- Тренируй это. После того, как все настроено, вы можете запустить агента и позволить ему играть в игру самостоятельно. Агенту нужно время, чтобы что-то сделать, но со временем он исследует столько, сколько сможет.
Конечно, мне не хватает множества деталей, но, как я уже сказал, если у вас есть опыт работы с 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 процентов кода одним нажатием кнопки. Конечно, создание такой системы может появиться через несколько лет, но с нашими постоянно растущими требованиями к программному обеспечению это может стать требованием будущего. Особенно, когда таких вещей, как падение самолетов с неба, можно было избежать при более тщательном тестировании. Кто знает, что в будущем эти системы могут стать законом?