3,583 papers
arXiv:2610.14096 88 8 окт. 2026 г. FREE

SWEeper-Bench: агенты чинят баги почти идеально, но не умеют их находить

КЛЮЧЕВАЯ СУТЬ
Обнаружено: если агенту описать баг, он чинит его почти всегда. Если сказать «найди и исправь проблемы в разделе X», успех падает примерно до половины. Метод позволяет заставить агента проверять веб-приложение как живой пользователь и ловить баги, которые из кода не видны. Фишка: без прямой просьбы агент почти не открывает браузер, хотя тот установлен и доступен. Он читает код, гоняет команды в терминале и шлёт запросы. Одна строка «тестируй в браузере как реальный пользователь» меняет это: у модели с 43,5% успеха падение до 31,5% без этой строки.
Адаптировать под запрос
⚡

TL;DR

Если сказать агенту «найди и исправь проблемы в разделе X», он справляется примерно в половине случаев. Если дать ему описание бага, он чинит почти всегда. Узкое место не в починке, а в поиске и узнавании бага: нужно придумать сценарий, прогнать его через интерфейс и понять, что увиденное — ошибка.

Типичная картина: агент дошёл до нужной функции, увидел пустой экран и пошёл дальше. Либо решил «так задумано», потому что существующие юнит-тесты этого и ожидают. Ещё одна находка: без прямой просьбы агент почти не открывает браузер. Он читает код, гоняет команды в терминале и шлёт HTTP-запросы, хотя браузер ему установлен и доступен.

Что делать: прямо писать в инструкции «проверяй приложение в браузере как реальный пользователь», задавать область проверки и давать критерий «как должно работать». Эксперимент в статье подтверждает только первый пункт. Остальное — наблюдения на разборе траекторий. Они указывают, куда смотреть, но как отдельный приём не проверялись.

🔬

Схема метода

Воронка, по которой «теряются» агенты (в скобках — доля траекторий, дошедших до стадии, в среднем):

СТАДИЯ 1: дошёл до нужной функции            → ~3/4
СТАДИЯ 2: запустил сценарий и УЗНАЛ баг      → ~1/2   ← главный провал
СТАДИЯ 3: нашёл первопричину                 → ~44%
СТАДИЯ 4: починил и ничего не сломал         → ~41%

Инструкция агенту, которая следует из выводов:

1. Область: назови раздел продукта (не «баги вообще»)
2. Способ: «тестируй в браузере как реальный пользователь»  ← проверено
3. Критерий: что значит «работает правильно» (по смыслу, не по тестам) ← наблюдение
4. Финал: проверь, что соседние функции не сломались         ← так судил верификатор

Всё в одном системном промпте или файле инструкций.

🚀

Пример применения

Задача: Вы ведёте интернет-магазин на open-source движке, например на Bagisto. Накануне распродажи «11.11» вы хотите, чтобы агент прошёлся по корзине и оформлению заказа. Классическая ошибка такого класса: промокод принимается в корзине, а на оформлении отклоняется. Из кода это не видно, это ловится только сценарием «положил товар, ввёл промокод, дошёл до оплаты».

Промпт (агент с доступом к браузеру, например Claude Code с Playwright):

Найди и исправь проблемы в корзине и оформлении заказа этого магазина.

Тестируй приложение в браузере как реальный покупатель: открой магазин,
добавь товары, примени промокод, дойди до последнего шага оформления.
Не ограничивайся чтением кода и запросами из терминала.

Если на каком-то шаге увиденное расходится с тем, как должно работать
для покупателя (скидка пропала, сумма изменилась, кнопка не реагирует),
считай это багом. Даже если существующие тесты ожидают такое поведение.

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

Результат: Агент запустит браузер и пройдёт путь покупателя шаг за шагом, а не станет только читать код корзины. В ответе будут описания найденных проблем с шагами воспроизведения, правки кода и повторный прогон сценария. В конце — проверка соседних разделов. Найдёт ли он именно ваш баг, не гарантировано: даже лучшие агенты в исследовании находили чуть больше половины.

🧠

Почему это работает

Слабость. Агент по умолчанию выбирает привычный путь: читать код, запускать команды, слать запросы. Браузерный сценарий — длинный (в примере из статьи баг проявляется только после девяти шагов на двух аккаунтах), и сам по себе агент за него не берётся. Даже увидев аномалию, он не всегда считает её багом. Он сверяется с тем, что «ожидают тесты», и принимает неправильное поведение за норму.

Сильная сторона. Когда задача ясна, агент чинит отлично. С описанием бага он решает почти всё, и разница между моделями почти исчезает. Он умеет вести сценарий в браузере, если ему сказали это делать.

Как это использует инструкция. Явное «тестируй как пользователь» переключает агента с чтения кода на проход сценариев, где баги и проявляются. Критерий «как должно быть по смыслу» даёт опору для узнавания ошибки, не завязанную на тесты.

Рычаги: - Область в запросе — чем уже и конкретнее (корзина, а не «весь сайт»), тем больше шансов дойти до нужной функции. - Строка про браузер — убери, и агент вернётся к чтению кода. Модель с 43,5% падала до 31,5%. - Критерий ожидаемого поведения — добавь пример или описание нужного поведения, если оно у тебя есть. Это путь к «детальному промпту», где результат вырос с 35–51% до 96%. - Лимит времени — после примерно 40 минут прироста почти нет, длинные запуски иногда вообще не сходятся.

📋

Шаблон промпта

Дословный промпт авторов (Приложение A) в доступном тексте не приведён. Ниже — сборка по тому, что описано в статье: открытый запрос с областью плюс требование тестировать в браузере.

Найди и исправь проблемы в {область_продукта}.

Тестируй приложение в браузере как реальный {роль_пользователя}.
Не ограничивайся чтением кода и запросами из терминала.

Ожидаемое поведение: {как_должно_работать}.
Если увиденное расходится с этим, считай это багом, даже если
существующие тесты ожидают другое.

Для каждой проблемы: шаги воспроизведения → исправление → повторный
прогон сценария. В конце проверь, что соседние функции не сломались:
{список_соседних_функций}.

Что подставлять: - {область_продукта} — раздел, например «оформление заказа» или «приглашения в рабочее пространство». - {роль_пользователя} — покупатель, администратор, приглашённый коллега. - {как_должно_работать} — две-три фразы о нужном поведении. Строка авторами отдельно не проверялась, это вывод из наблюдений. Если не знаешь, оставь «как ожидает обычный пользователь». - {список_соседних_функций} — то, что рядом и не должно пострадать.

⚠️

Ограничения

⚠️ Проверена одна строка: экспериментом подтверждено только влияние инструкции «тестируй в браузере». Эффект в одном случае небольшой (около 2 п.п.), в другом заметный (около 12 п.п.). Остальные пункты шаблона — вывод из разбора траекторий, а не отдельный проверенный приём.

⚠️ Нужен браузер: без доступа агента к запущенному приложению с браузером (Playwright и подобное) инструкция бессмысленна. Это настройка инструмента, одним промптом не обойтись.

⚠️ Даже с подсказкой находят не всё: лучший агент нашёл и починил чуть больше половины багов. Это помощник для проверки перед релизом, а не замена тестировщика.

⚠️ Узкая область проверки: задачи были только про веб-приложения, по одному известному багу. Другие баги, найденные попутно, не оценивались, лишние правки не штрафовались. Дизайн, удобство и скорость не проверялись.

⚠️ Больше ≠ лучше: долгая работа и большое число действий в браузере не связаны с успехом. Прирост от дополнительного времени заканчивается примерно на 40 минутах (на малой выборке, статистически не значимо). Некоторые агенты уходили на часы без результата.

⚠️ Недоверие к тестам — наблюдение: случай «агент поверил юнит-тестам» разобран на одной задаче и четырёх агентах. Это иллюстрация риска, а не измеренная закономерность.

🔍

Как исследовали

Исследователи из Принстона взяли 200 реальных исправленных багов в 200 популярных open-source веб-приложениях: Ghost, Uptime Kuma, Focalboard, Stirling-PDF и другие. Агенту давали только код, работающее приложение с браузером и одну фразу вроде «Найди и исправь проблемы в Focalboard: общий доступ к доскам и участники». Ни описания бага, ни подсказок.

Проверял результат не набор юнит-тестов, а агент-верификатор. Он открывал исправленное приложение в браузере, не видя кода, и шёл по пошаговым сценариям: сработало ли целевое поведение и не сломались ли соседние функции. Так принимается любое корректное исправление, а не только совпадающее с эталонным.

Прогнали 15 агентов. Лучший решил 59% задач, девять решили меньше половины. Затем исследователи разобрали траектории по стадиям: добрались до функции, узнали баг, нашли причину, починили. Самый большой провал оказался на узнавании бага, с ~75% до 50%.

Чтобы отделить «найти» от «починить», пяти агентам дали подробный баг-репорт. Результат вырос с 35–51% до 96%, а разница между моделями почти пропала. Ещё одна абляция удивила: когда у двух агентов убрали строку «тестируй в браузере», они почти перестали его открывать (2 и 6 задач из 200). Результат упал с 43,5% до 31,5% у одного и с 42,0% до 39,5% у другого. Дополнительные проверки показали, что работа дольше и больше браузерных действий успех не гарантируют, а подходящая оболочка (harness) даёт умеренный прирост.

Практический вывод: инструкция агенту влияет на то, как он ищет баги, а не только на то, как он их чинит.

💡

Адаптации и экстраполяции

🔧 Техника: добавить регрессионную проверку → ловить побочные поломки

Верификатор в статье требовал, чтобы проходили оба теста: целевой и «сохранения соседнего поведения». В промпте это строка «после правок повтори сценарии из разделов {А, Б, В} и покажи, что они работают». Исправления сами по себе в основном были верными, а вот проверка того, что ничего не поломано, кажется естественным и дешёвым страхом.

Экстраполяция (моя гипотеза, не проверялась): разделить поиск и починку на два запроса. Первый запрос: только искать баги в браузере и выдавать баг-репорты (шаги, ожидаемое и фактическое поведение), код не трогать. Второй: чинить по каждому репорту отдельно. Логика: с готовым репортом агенты чинят в ~96% случаев, а проблема всё в том, чтобы репорт появился.

ЭТАП 1 (только поиск, код не менять):
Пройди в браузере раздел {область} как {роль}. Для каждой аномалии
запиши: шаги, ожидаемое поведение, фактическое поведение.
Выведи список репортов.

ЭТАП 2 (отдельный запрос, по одному репорту):
Вот баг-репорт: {репорт}. Найди причину, исправь, повтори шаги
и проверь соседние функции.
🔗

Ресурсы

  • SWEeper-Bench: Can Agents Discover Bugs in Interactive Software? Yang Yao, Haozhe Chen, Bingyi Kang, Karthik R. Narasimhan, Zhuang Liu — Принстонский университет.
  • Сайт: sweeperbench.com
  • Код: github.com/zlab-princeton/sweeper-bench
  • Данные: huggingface.co/datasets/zlab-princeton/SWEeper-Bench
  • Траектории агентов: huggingface.co/datasets/zlab-princeton/SWEeper-Bench-traces
  • Родственные работы, упомянутые в статье: SWE-bench, SWT-Bench, WebProber, Browser Use, инструменты ревью кода (Cursor Bugbot, GitHub Copilot code review, CodeRabbit и др.).

📋 Дайджест исследования

Ключевая суть

Обнаружено: если агенту описать баг, он чинит его почти всегда. Если сказать «найди и исправь проблемы в разделе X», успех падает примерно до половины. Метод позволяет заставить агента проверять веб-приложение как живой пользователь и ловить баги, которые из кода не видны. Фишка: без прямой просьбы агент почти не открывает браузер, хотя тот установлен и доступен. Он читает код, гоняет команды в терминале и шлёт запросы. Одна строка «тестируй в браузере как реальный пользователь» меняет это: у модели с 43,5% успеха падение до 31,5% без этой строки.

Принцип работы

Потеря идёт в одном месте. Воронка по стадиям: дошёл до нужной функции (~3/4), запустил сценарий и узнал баг (~1/2), нашёл причину (~44%), починил и ничего не сломал (~41%). Главный провал на второй стадии. Починка не страдает. Агент как стажёр, который отлично правит код, но не любит кликать по сайту. Читать код проще, поэтому он читает. А баг вроде «промокод принят в корзине и отклонён на оплате» из кода не виден. Он виден только на пути «положил товар, ввёл промокод, дошёл до оплаты». Принцип: сначала заставь агента пройти сценарий глазами пользователя, потом уже чинить. Инструкция из четырёх частей: область (раздел, а не «баги вообще»), способ (браузер), критерий (что значит «работает правильно»), финальная проверка соседних функций. Проверено экспериментом только про браузер. Остальное авторы увидели в разборе прогонов.

Почему работает

Агент выбирает привычный путь. Браузерный сценарий длинный. В примере из статьи баг проявляется только после девяти шагов на двух аккаунтах. Сам агент за такое не берётся. Есть вторая ловушка. Агент видит пустой экран и идёт дальше. Или решает «так задумано», потому что существующие юнит-тесты ждут именно такого поведения. Неправильное он принимает за норму. Явная просьба переключает агента с чтения кода на проход сценариев. Критерий «как должно быть по смыслу» даёт ему опору, не привязанную к тестам. Когда задача ясна, агент справляется отлично. С описанием бага результат вырос с 35–51% до 96%, а разница между моделями почти исчезла. Честно про доказательства. Эффект строки про браузер измерен: около 2 п.п. в одном случае, около 12 п.п. в другом. История с недоверием к тестам разобрана на одной задаче и четырёх агентах. Это иллюстрация риска, а не измеренная закономерность.

Когда применять

Веб-приложения → проверка конкретного раздела перед релизом (корзина, оформление заказа, приглашения в рабочее пространство), особенно когда баг проявляется только в цепочке действий пользователя. Ещё хорошо работает, когда у тебя есть описание нужного поведения. Область лучше сужать: «корзина», а не «весь сайт». Лимит времени около 40 минут. Дальше прироста почти нет, а некоторые агенты уходили на часы без результата. НЕ подходит, если у агента нет доступа к запущенному приложению и браузеру (Playwright и подобное). Это настройка инструмента, одним промптом не обойтись. Дизайн, удобство и скорость в исследовании не проверялись. Даже лучший агент нашёл и починил чуть больше половины багов. Это помощник перед релизом, а не замена тестировщика.

Мини-рецепт

1. Подключи браузер: агенту нужен доступ к запущенному приложению, например Playwright. Без этого дальше нет смысла.
2. Назови область: один раздел продукта, а не «всё подряд».
3. Скажи, как тестировать: Тестируй приложение в браузере как реальный <роль>покупатель. Не ограничивайся чтением кода и запросами из терминала.
4. Дай критерий: две-три фразы о том, как должно работать. Не знаешь, напиши «как ожидает обычный пользователь». Добавь: считай это багом, даже если существующие тесты ожидают другое. Это вывод из наблюдений, отдельно он не проверялся.
5. Потребуй порядок работы: шаги воспроизведения, исправление, повторный прогон сценария.
6. Закрой финалом: проверь соседние функции, например каталог, вход, список заказов.
7. Поставь потолок: около 40 минут. Если агент не сошёлся, перезапусти с более узкой областью.

Примеры

[ПЛОХО] : Найди и исправь баги в моём интернет-магазине
[ХОРОШО] : Найди и исправь проблемы в корзине и оформлении заказа. Тестируй приложение в браузере как реальный покупатель: добавь товары, примени промокод, дойди до последнего шага. Не ограничивайся чтением кода и запросами из терминала. Если увиденное расходится с тем, как должно работать для покупателя (скидка пропала, сумма изменилась, кнопка не реагирует), считай это багом, даже если существующие тесты ожидают такое поведение. Для каждой проблемы: шаги воспроизведения, исправление, повторный прогон. В конце проверь каталог, вход и список заказов. В первом случае агент, скорее всего, почитает код и ничего не найдёт. Во втором он пройдёт путь покупателя и сможет увидеть, что промокод пропал на оплате. Найдёт ли он именно ваш баг, не гарантировано.
Источник: SWEeper-Bench: Can Agents Discover Bugs in Interactive Software?
ArXiv ID: 2610.14096 | Сгенерировано: 2026-10-14 06:20

Проблемы LLM

ПроблемаСутьКак обойти
Агент принимает неверное поведение за норму, если его ожидают существующие тестыАгент проверяет работу программы или текста. Видит странный результат. Сверяется с готовыми автотестами или текущим кодом. Они ждут именно такого поведения. Агент решает «так задумано» и идёт дальше. Баг остаётся. Так будет в любом аудите, где есть готовые «эталоны»Дай эталон по смыслу, а не по тестам. Напиши: «Ожидаемое поведение: … Если увиденное расходится с этим, считай это багом, даже если существующие тесты ждут другого». Описывай поведение глазами пользователя: что он должен увидеть
Агент видит аномалию, но не узнаёт в ней ошибкуАгент дошёл до нужного места. Увидел пустой экран или странное число. Не остановился и не записал это как проблему. Он ищет «сломалось с шумом», а тихие сбои пропускает. Поиск ошибки выходит намного слабее исправленияТребуй фиксировать каждое расхождение. Пиши: «На каждом шаге сравни увиденное с ожидаемым. Любое расхождение опиши: шаги, ожидал, получил». Агент вынужден явно сравнивать, а не просто проходить мимо

Методы

МетодСуть
Явно задай способ проверки — иначе агент выберет привычныйУкажи в инструкции, КАК проверять. Пример: «Тестируй в браузере как реальный покупатель. Не ограничивайся чтением кода и командами из терминала». Почему работает: без указания агент идёт по лёгкому пути. Читает код, гоняет команды, шлёт запросы. Длинные сценарии через интерфейс он сам не начинает, хотя может. Строка про способ переключает его на проход сценариев, где баги и видны. Когда применять: поиск ошибок в живом приложении, проверка перед релизом, любая задача, где ошибка видна только в работе, а не в коде. Когда не работает: у агента нет нужного инструмента (браузера и т. п.). Тогда нужна настройка среды, одним промптом не решить. Даже с такой строкой находятся не все баги, примерно половина

Тезисы

ТезисКомментарий
Исправить ясную проблему легче, чем найти неяснуюЕсли агенту описана проблема (симптом, шаги, ожидание), он чинит почти всегда. Разница между моделями почти исчезает. Если сказано лишь «найди и исправь проблемы», успех около половины. Узкое место — поиск и узнавание ошибки, а не исправление. Применяй: знаешь симптом — опиши его и шаги воспроизведения. Не знаешь — раздели задачу. Сначала «найди и опиши проблемы», потом «исправь вот эту»
📖 Простыми словами

SWEeper-Bench: CanAgentsDiscover Bugs in Interactive Software?

arXiv: 2610.14096

Современные AI-агенты отлично умеют латать код, но когда дело доходит до живых интерфейсов, начинается полный провал. Если ткнуть модель носом в конкретную строчку, она исправит баг почти со стопроцентной точностью. Но если бросить ей абстрактное «пойди найди ошибки в корзине», агент тупит и сливается в половине случаев. Главный затык LLM — не в кодинге, а в поиске и распознавании бага через реальный опыт пользователя.

Это как нанять автомеханика, который идеально перебирает мотор по чертежу, но не способен сам сесть за руль и услышать, что подвеска предательски стучит. Модели обожают копаться в текстовых файлах и слать сырые API-запросы, но намертво виснут на длинных браузерных сценариях. Чтобы поймать поломку, человеку нужно сделать девять шагов с двух разных аккаунтов, а агент сдаётся на полпути и решает, что так и было задумано.

Бенчмарк SWEeper-Bench наглядно показал: агенты тупо смотрят в тесты вместо здравого смысла. Классический краш-тест — интернет-магазин перед распродажей: скидочный промокод активируется в корзине, но слетает на шаге оплаты. В коде всё чисто, тесты зелёные, поэтому агент рапортует, что проблем нет. Без готового сценария воспроизведения машина просто не допирает, что видит перед собой кусок кривого софта.

Проверяли это на открытом движке Bagisto, но грабли везде одинаковые. Любой сложный веб-сервис, личный кабинет или мобильное приложение страдают ровно от того же: реальные косяки живут во взаимодействии пользователя с экраном. Мечты скинуть весь проект на AI с установкой «протестируй всё сам» разбиваются в пыль — чистый автономный QA-инжиниринг пока не тянет реальность.

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

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с