Automated Compliance Hardening (ACH) — система генерации тестов на основе LLM, управляемая мутациями. ACH защищает платформы Meta от регрессий, генерируя ошибки (“мутанты”) в исходном коде, характерные для конкретной проблемной области,. затем используя ошибки для генерации тестов.
Например, в случае тестирования безопасности ACH автоматизирует процесс поиска соответствующих ошибок, и предотвращает их появление в будущем, укрепляя кодовые базы, и снижая риск регресса.
ACH автоматически генерирует юнит-тесты, нацеленные на определенный тип ошибок. Мы описываем для ACH интересующие нас ошибки в виде обычного текста. Описание может быть неполным и даже противоречивым, но ACH генерирует тесты, которые, как мы убедились, ловят ошибки нужного типа.
Традиционно методы автоматизированной генерации тестов были направлены на увеличение покрытия кода и не более того. Как известно каждому тестировщику, это лишь часть решения, поскольку увеличение покрытия не всегда позволяет найти ошибки.
ACH радикально отходит от этой традиции, поскольку нацелен на конкретные ошибки, а не на непокрытый код, хотя в процессе поиска ошибок часто увеличивается и покрытие. Кроме того, поскольку ACH основана на принципах Assured LLM-based Software Engineering, она сохраняет верифицируемые гарантии того, что ее тесты действительно отлавливают описанные типы неисправностей.
В нашей новой научной статье «Mutation-Guided LLM-based Test Generation at Meta» подробно рассказывается о научных основах ACH и о том, как мы применяем ACH для тестирования конфиденциальности, но этот подход может быть применен к любому виду регрессионного тестирования.
Как это работает
Мутационное тестирование, когда дефекты (мутанты) намеренно вносятся в исходный код (с использованием контроля версий, чтобы держать их подальше от продакшена), чтобы оценить, насколько хорошо существующая тестовая архитектура может обнаруживать эти изменения, исследуется уже несколько десятилетий. Но, несмотря на это, мутационное тестирование по-прежнему трудно внедрить.
В более ранних подходах мутанты генерировались автоматически (чаще всего с использованием подхода, основанного на правилах rule-based approach). Но этот метод приводил к появлению мутантов, которые не были реалистичными с точки зрения того, насколько серьезную проблему они на самом деле представляли.
Кроме того, даже при автоматической генерации мутантов — тестировщикам все равно пришлось бы вручную писать тесты, которые находили бы мутантов (отлавливали неисправности).
Написание таких тестов — кропотливый и трудоемкий процесс. Инженеры столкнулись с двойной проблемой: Даже проделав всю работу по написанию теста для отлова ошибок, не было никакой гарантии, что тест вообще отловит автоматически сгенерированую ошибку.
Используя LLM, мы можем генерировать ошибки-мутанты, представляющие реалистичные проблемы в коде, а также экономить человеческий труд, генерируя тесты для автоматического отлова ошибок. ACH объединяет методы автоматической генерации тестов с возможностями больших языковых моделей (LLM) для генерации мутантов, которые в значительной степени соответствуют области, требующей тестирования, а также тестов, гарантированно отлавливающих ошибки, которые действительно важны.
В общем случае ACH работает в три этапа:
- Инженер описывает тип ошибок, которые его интересуют.
- ACH использует это описание для автоматической генерации большого количества ошибок.
- ACH использует сгенерированные ошибки для автоматической генерации множества тестов, которые их находят.
В Meta мы применили тестирование с помощью ACH к нескольким нашим платформам, включая Ленту Фейсбука (Facebook Feed), Instagram, Messenger и WhatsApp. На основе выполненного тестирования мы пришли к выводу, что ACH полезен для защиты кода от проблем и находят другие преимущества даже если тесты, созданные ACH, не направлены непосредственно на решение конкретной проблемы.
Архитектура системы ACH на высоком уровне. Система использует Большую Языковую Модель для генерации ошибок, проверки их на дубликаты, а затем генерирует тесты для выявления этих ошибок.
Почему это важно
В Мета очень много систем данных, множество языков программирования, фреймворков и сервисов для наших приложений и продуктов. Как тысячи наших инженеров по всему миру гарантируют, что их код надежен и не порождает ошибок? Ответ на этот вопрос дают LLM-модели.
Генерация тестов на основе LLM и генерация мутантов на основе LLM — не новый подход, но это первый случай их объединения и развертывания в крупномасштабных промышленных системах. Генерация мутантов и тесты для их поиска традиционно являются сложными процессами для масштабирования. Поскольку LLM являются вероятностными и не полагаются на жестко определенные правила во время принятия решений, LLM позволяют нам решать обе стороны этого уравнения — генерирование мутаций и тесты для их поиска — очень эффективно и с высоким уровнем точности.
Новый подход значительно модернизирует эту форму автоматизированной генерации тестов и помогает инженерам-программистам получать информацию о проблемах из различных источников (предыдущие ошибки, коллеги, требования пользователей, нормативные требования и т. д.) и эффективно преобразовывать ее из текста в свободной форме в выполняемые тесты — с гарантией того, что тест выявит искомую ошибку.
АЧ может применяться к любому классу ошибок и отказов, в значительной мере предохраняют от будущих регрессов, и упрощают процессы тестирования.


Что дальше
Мы стремимся расширить области применения, разработать методы оценки значимости мутантов и выявить ненайденные ошибки, чтобы способствовать внедрению автоматизированной генерации тестов на соответствие нормативным требованиям в масштабах всей отрасли.
READ THE PAPER (Mutation-Guided LLM-based Test Generation at Meta)
