Журнал · Rit.work

FEAgent ищет расхождения в коде, который уже прошёл тесты

FEAgent сопоставляет графы программ и независимо моделирует их исполнение, чтобы находить различия, которые пропустили тесты и эталонные метки.

Rit.work
Студия разработки
7 октября 2026 г.3 мин чтения

Материал подготовлен автоматически по первоисточникам: ссылки на них — в конце статьи.

Новый агент проверяет, сохранилось ли поведение программы после исправления, переноса или рефакторинга, даже если код нельзя запустить напрямую. В препринте AWS AI Labs, который не прошёл рецензирование и приводит замеры самих авторов, FEAgent находил расхождения с эталонным исправлением даже после успешного прогона тестов. Такой аудит может стать дополнительным барьером между тестированием и выпуском сгенерированного кода.

Как граф кода превращается в список проверок

FEAgent начинает не с общего вопроса к LLM, а с описания того, какое поведение нужно сохранить. В него входят допустимые входные данные, возвращаемое значение, исключения, внешние эффекты, изменения переданных объектов и завершение программы. Команда также задаёт допущения о библиотеках, файлах, сервисах и других зависимостях.

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

Затем FEAgent сопоставляет публичные точки входа и фрагменты, которые влияют на видимый результат. Из них он формирует конкретные проверки: одинаково ли обрабатывается нулевой знаменатель, достигает ли запись возвращаемого объекта, сохранилась ли защита от переполнения, совпадают ли внешние эффекты.

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

Независимое моделирование ловит расхождения за одинаковыми ответами

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

Две изолированные LLM получают по одной версии программы и не видят ни другую реализацию, ни её прогноз. Каждая модель выполняет суррогатное исполнение: пошагово предсказывает результат кода без настоящего запуска. Она записывает возврат, исключение, побочные эффекты, изменения объектов и статус завершения.

Раздельный анализ мешает модели заранее решить, что программы похожи, а затем подогнать объяснение. Обычный алгоритм сопоставляет полученные следы и не может самостоятельно переосмыслить намерение разработчика. FEAgent возвращает эквивалентность, различие или неопределённый результат, если свидетельства конфликтуют.

Граф помогает замечать эффекты, скрытые за одинаковыми возвращаемыми значениями. В одном из разобранных исправлений обе версии возвращали None, но одна очищала весь кеш, а другая — только его часть. Для вызывающего кода ответы совпадают, а состояние системы расходится.

Тесты остаются первым фильтром, но перестают быть единственным

На EquiBench проверили 1200 пар небольших программ; прямой запуск подтвердил контрпримеры для 18% пар, хотя опубликованные метки считали их иначе. Среди исправлений SWE-bench Verified, уже прошедших репозиторные тесты, исполнение подтвердило расхождение с эталонным исправлением у 94 из 331 кандидатов, или 28,4%.

Проверка охватывала два разных масштаба: отдельные функции из EquiBench и изменения внутри репозиториев из SWE-bench Verified, созданные mini-SWE-agent. Все отмеченные расхождения дополнительно воспроизводили настоящим запуском, поэтому итоговые случаи опираются не только на прогноз LLM.

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

Работа меняет планы команд там, где тесты служат окончательным критерием приёмки сгенерированных исправлений, миграций и рефакторинга. После тестов можно запускать выборочный аудит критичных изменений, отправлять неопределённые случаи инженеру и требовать воспроизводимый вход для каждого вердикта о различии.

FEAgent не заменяет математическое доказательство эквивалентности: конечный набор входов и прогнозы моделей не покрывают все возможные исполнения. Работа также не отделяет количественно вклад графа от вклада суррогатного исполнения. Поэтому архитектуру разумно оценивать как дополнительный проверяемый фильтр, а не как новый окончательный эталон.

Источники

Пауза в чтении

Похоже на вашу задачу?

Расскажите, что собираете. За полчаса разложим на этапы и назовём сроки — это бесплатно и ни к чему не обязывает.

Rit.work

Студия разработки

Собираем мобильные приложения и помогаем командам получать от AI реальную пользу. Основатель и команда, работаем удалённо — с клиентами в России и за рубежом.

← Ко всем материалам
Понравилось? Обсудим вашу задачу