Добавить в корзинуПозвонить
Найти в Дзене

Как ИИ помог найти баг, который мы искали неделю: реальный кейс с кодом

Команда потратила пять дней на поиск причины, из-за которой приложение периодически «падало» в продакшене. Логи ничего не показывали, воспроизвести локально не удавалось. Когда подключили GitHub Copilot и ChatGPT для анализа кода, баг нашелся за 20 минут. Рассказываю, как это было, с примерами кода и скриншотами. История началась с того, что пользователи начали жаловаться на внезапные ошибки 500 в нашем API. Мониторинг показывал, что проблема возникает хаотично — раз в несколько часов, только под нагрузкой. Мы проверили базу данных, кэш, логи — всё чисто. Тогда мы решили подойти к проблеме нестандартно: скормили подозрительные модули кода ИИ-инструментам с просьбой найти потенциальные проблемы. Результат нас шокировал — ИИ указал на место, которое мы даже не рассматривали как потенциально опасное. Наше приложение — это REST API на Python (FastAPI), которое обрабатывает платежи. Архитектура стандартная: контроллеры → сервисы → репозитории. Симптомы: Вместо того чтобы продолжать «тыкать
Оглавление

Команда потратила пять дней на поиск причины, из-за которой приложение периодически «падало» в продакшене. Логи ничего не показывали, воспроизвести локально не удавалось. Когда подключили GitHub Copilot и ChatGPT для анализа кода, баг нашелся за 20 минут. Рассказываю, как это было, с примерами кода и скриншотами.

История началась с того, что пользователи начали жаловаться на внезапные ошибки 500 в нашем API. Мониторинг показывал, что проблема возникает хаотично — раз в несколько часов, только под нагрузкой. Мы проверили базу данных, кэш, логи — всё чисто.

Тогда мы решили подойти к проблеме нестандартно: скормили подозрительные модули кода ИИ-инструментам с просьбой найти потенциальные проблемы. Результат нас шокировал — ИИ указал на место, которое мы даже не рассматривали как потенциально опасное.

Что происходило в продакшене

Наше приложение — это REST API на Python (FastAPI), которое обрабатывает платежи. Архитектура стандартная: контроллеры → сервисы → репозитории.

Симптомы:

  • Ошибки 500 без явной причины
  • Проблема проявлялась только при 1000+ RPS
  • Логи не содержали stack trace
  • Локально воспроизвести не удавалось

Как мы подключили ИИ к поиску

Вместо того чтобы продолжать «тыкать пальцем в небо», мы сделали следующее:

  1. Выгрузили код сервиса обработки платежей (около 500 строк)
  2. Загрузили в GitHub Copilot Chat с промптом: «Найди потенциальные race conditions и проблемы с конкурентным доступом»
  3. Продублировали запрос в ChatGPT-4 с контекстом: «Приложение падает под нагрузкой, логи пустые, найди уязвимые места»

Что нашел ИИ за 20 минут

Оба инструмента указали на один и тот же участок кода в файле payment_service.py:

-2

ИИ сразу указал на проблему: классовая переменная _cache共享 между всеми экземплярами класса, что в многопоточной среде (а FastAPI использует asyncio) приводит к race conditions и непредсказуемому поведению.

Как ИИ помог найти корневую причину

Но самое интересное произошло дальше. Мы спросили: «Почему это вызывает ошибки 500, а не просто некорректные данные?»

ChatGPT проанализировал код глубже и нашел второй баг, который мы точно бы искали еще неделю:

-3

ИИ объяснил: при одновременных запросах от одного пользователя (что бывает при повторных нажатиях кнопки «Оплатить») возникала ситуация:

  1. Запрос A проверяет баланс: 100₽
  2. Запрос B проверяет баланс: 100₽
  3. Запрос A списывает 60₽, остаток 40₽
  4. Запрос B пытается списать 60₽ → ошибка!

Но самое хитрое — исключение InsufficientFundsError где-то в middleware превращалось в generic 500 ошибку без деталей.

Как мы это исправили

ИИ не только нашел проблему, но и предложил решение:

-4
-5

ИИ объяснил: при одновременных запросах от одного пользователя (что бывает при повторных нажатиях кнопки «Оплатить») возникала ситуация:

  1. Запрос A проверяет баланс: 100₽
  2. Запрос B проверяет баланс: 100₽
  3. Запрос A списывает 60₽, остаток 40₽
  4. Запрос B пытается списать 60₽ → ошибка!

Но самое хитрое — исключение InsufficientFundsError где-то в middleware превращалось в generic 500 ошибку без деталей.

Как мы это исправили

ИИ не только нашел проблему, но и предложил решение:

Выводы

ИИ не заменит разработчика, но ускоряет поиск неочевидных проблем в 10-20 раз. В нашем случае он указал на:

  • Проблему с shared state в асинхронном коде
  • Неправильную обработку исключений
  • Отсутствие механизмов блокировки

Главное — правильно формулировать запросы и не бояться «глупых» вопросов. ИИ не осудит, если вы спросите: «Почему это не работает?»

А какой AI-инструмент используете вы для поиска багов? Copilot, ChatGPT, Codeium или что-то еще? Поделитесь опытом в комментариях — какие баги удавалось найти с помощью ИИ? 👇

Читайте также:

AI для рефакторинга: как улучшить чужой код за 5 минут

Генерация тестов с ИИ: покрываем код на 90% автоматически

ChatGPT для разработчиков: 7 неочевидных сценариев использования