Разработчики Facebook используют инструменты на основе искусственного интеллекта для автоматического поиска и исправления ошибок в коде приложения Facebook. Два инструмента, Sapienz и SapFix, используются для проведения тестирования, а также для поиска и исправления ошибок.
Согласно докладу, представленному на Международном симпозиуме по разработке программного обеспечения на основе поиска, Sapienz более полно разработан, чем SapFix, и используется дольше — в разработке в Facebook с сентября 2017 года для приложения Facebook для Android.
Sapienz построен на основе FBLearner, платформы машинного обучения (ML), через которую осуществляется большая часть работы Facebook по машинному обучению. Помимо Sapienz, Facebook использует FBLearner для решения проблем, включая поисковые запросы для видео, фотографий, людей и событий, обнаружение аномалий, понимание изображений, языковой перевод, а также распознавание речи и лиц.
Sapienz используется для проверки большого количества взаимодействий между многими комбинациями устройств и операционных систем. Sapienz использует автоматизированный дизайн тестов, чтобы ускорить процесс тестирования, а также сделать тестирование более комплексным. Он рассматривает все возможные тесты, используя то, что разработчики называют «интеллектуальным вычислительным поиском и подходом, называемым тестированием программного обеспечения на основе поиска». Он тестирует через пользовательский интерфейс, то есть проблемы, которые Sapienz сообщает инженерам, можно найти через пользовательский интерфейс, что позволяет избежать ложных срабатываний.
В процессе поиска Sapienz строит модель тестируемой системы посредством взаимодействия с пользовательским интерфейсом, и любые хорошие тесты сохраняются, чтобы их можно было использовать повторно. Facebook утверждает, что технология позволила инженерам устранять проблемы в течение нескольких часов (иногда в течение нескольких минут) после написания кода.
Новейшая часть истории — это SapFix, гибридный инструмент искусственного интеллекта, который автоматически генерирует исправления для определенных ошибок, а затем предлагает потенциальные исправления инженерам для утверждения. Facebook заявляет, что намерен поделиться SapFix с инженерным сообществом, поскольку это следующий шаг в эволюции автоматизации отладки, способный повысить производительность и стабильность нового кода для широкого круга компаний и исследовательских организаций. Способ использования SapFix заключается в том, что Sapienz используется для локализации точки в коде для исправления. Эта информация передается в SapFix, который автоматически выбирает из небольшого числа возможных способов создания патча.
На простейшем уровне SapFix просто возвращает код в то состояние, в котором он был до последнего изменения. Более сложный подход — попробовать исправления, основанные на исправлениях, которые помогали разработчикам в предыдущих случаях. Эти исправления хранятся и доступны в виде шаблонов. Если ни реверсия, ни исправления шаблона не сработают, SapFix попытается исправить на основе мутации, посредством чего он выполнит небольшие модификации кода в абстрактном синтаксическом дереве (AST) оператора, вызывающего сбой, внося изменения в исправление до тех пор, пока не будет найдено потенциальное решение.
SapFix генерирует несколько потенциальных исправлений для ошибки, а затем оценивает их качество, проверяя три проблемы: есть ли ошибки компиляции, сохраняется ли сбой и приводит ли исправление к новым сбоям? Патчи, соответствующие этим критериям, передаются на утверждение специалисту-рецензенту.
SapFix все еще находится в разработке, но он уже успешно генерирует исправления, которые были приняты рецензентами и отправлены в производство.