
Claude против краевых случаев: как LLM-агент нашёл баги в NumPy и других Python-библиотеках
kmoseenk только что Claude против краевых случаев: как LLM-агент нашёл баги в NumPy и других Python-библиотеках 9 мин 0 Блог компании OTUS Искусственный интеллект Python * Тестирование IT-систем * Перевод Автор...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. kmoseenk только что Claude против краевых случаев: как LLM-агент нашёл баги в NumPy и других Python-библиотеках 9 мин 0 Блог компании OTUS Искусственный интеллект Python * Тестирование IT-систем * Перевод Автор оригинала: red. anthropic Мы разработали агента, который умеет эффективно находить баги в крупных программных проектах. Для этого агент выводит общие свойства кода, которые должны выполняться, а затем применяет тестирование на основе свойств (property-based testing) — технику, похожую на фаззинг.
Так нам удалось обнаружить баги в популярных Python-пакетах, включая NumPy, SciPy и Pandas. После тщательной ручной проверки мы начали сообщать об этих багах разработчикам; несколько из них уже исправлены. Подробнее можно прочитать в полной версии статьи, посмотреть GitHub-репозиторий или изучить найденные нами баги на нашем сайте.
Технические детали
Сделать программу полностью свободной от багов — одна из самых сложных задач в разработке ПО. Ошибки часто остаются в коде, несмотря на все усилия разработчиков. Самый распространённый подход к тестированию — тесты на конкретных примерах: разработчик задаёт один конкретный сценарий использования и проверяет, что фактический результат совпадает с ожидаемым.
Например, можно проверить, что функция сортировки, вызванная для списка , вернёт . Но полностью покрыть программу такими тестами трудно: баги часто прячутся в краевых случаях, которые разработчик не проверил. В конце концов, если разработчик не додумался протестировать какой-то краевой случай, велика вероятность, что он не учёл его и при реализации.
Тестирование на основе свойств устроено иначе. Это подход к тестированию, при котором мы проверяем, выполняется ли некоторое общее свойство кода для всех или почти всех входных данных. Разработчик задаёт свойство или инвариант программы — например, что десериализация JSON обратна сериализации, — а также описывает, какие входные данные это свойство принимает, например любые JSON-сериализуемые объекты.
Отраслевые последствия
Затем фреймворк для тестирования на основе свойств автоматически ищет контрпример к этому свойству, генерируя валидные входы как тестовые случаи с помощью техник, похожих на фаззинг. Поскольку разработчик описывает общее пространство входных данных, а не отдельные тест-кейсы, тестирование на основе свойств избавляет его от необходимости вручную придумывать все краевые случаи и позволяет рассуждать о программе на более высоком уровне абстракции. В нашей статье, которую мы представили на воркшопе NeurIPS Deep Learning for Code 2025 и которая выросла из проекта MATS, мы описали ИИ-агента, самостоятельно пишущего тесты на основе свойств для существующего кода.
Мы настроили агента так, чтобы он находил свойства программы, читая аннотации типов, строки документации, имена функций и комментарии. Затем агент писал соответствующие тесты на основе свойств с помощью Hypothesis. В этой работе мы сосредоточились на поиске багов в целом, а не только уязвимостей безопасности.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





