EN Прислать проект
Все статьи

Ошибки в коде от ИИ: десять типичных багов и как их найти

Десять типичных ошибок в коде от ИИ: секреты в коде, нет проверки прав, тихие сбои, гонки, N+1, даты и другие. Как выглядит каждая и как её заметить.

· 4 минКодБезопасность

Ошибки в коде от ИИ повторяются из проекта в проект. Модели учились на огромном количестве примеров, а примеры чаще показывают, как сделать, чтобы заработало, чем как сделать, чтобы не сломалось. Поэтому баги в сгенерированном коде предсказуемы — и это хорошая новость: их можно искать по списку.

Ниже десять самых частых. Для каждой — как она выглядит и как её заметить, даже если ты не читаешь код каждый день.

1. Секреты прямо в коде

Ключ от платёжной системы, базы или API модели записан строкой в файле, иногда в той части, что уходит в браузер.

Как заметить: поищи по проекту sk_, secret, api_key, password, service_role. Всё, что нашлось вне файла с переменными окружения, — проблема. Если файл уже был в GitHub, ключ надо менять, а не просто удалять.

2. Нет проверки прав на сервере

Интерфейс показывает только свои записи, но сервер отдаёт любую по идентификатору. Проверка «чьё это» есть в кнопке, а не в запросе.

Как заметить: заведи два аккаунта, возьми идентификатор записи первого и запроси её из-под второго. Попробуй прочитать, изменить и удалить.

3. Нет обработки ошибок

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

Как заметить: отключи интернет посреди действия, введи несуществующий адрес, подними лимит у тестового ключа. Посмотри, что увидит человек и что останется в логе.

4. Гонки

Два запроса приходят одновременно и оба проходят проверку: промокод применён дважды, последний товар продан двум людям, баланс ушёл в минус.

Как заметить: нажми кнопку оплаты или применения кода несколько раз подряд очень быстро, или отправь два одинаковых запроса параллельно. Если результат удвоился — нужна блокировка или уникальное ограничение в базе.

5. Запросы N+1

Страница списка делает один запрос за списком и ещё по одному на каждую строку — за автором, ценой, картинкой. На десяти записях незаметно, на тысяче страница открывается секундами.

Как заметить: включи логирование запросов к базе и открой список. Если число запросов растёт вместе с числом строк, это оно.

6. Даты и часовые пояса

Время сохраняется без часового пояса, сравнивается в часовом поясе сервера, а показывается в часовом поясе браузера. Запись «на 10:00» превращается в 13:00, а скидка «до конца дня» заканчивается в обед.

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

7. Входные данные без проверки

Сервер верит тому, что пришло из браузера: цене, роли, количеству, идентификатору владельца. Форма не даёт ввести минус, а API принимает.

Как заметить: отправь запрос в обход формы — с отрицательными числами, огромными строками, лишними полями вроде role: admin или чужим user_id.

8. Тихие сбои

Ошибку поймали и ничего с ней не сделали. Письмо не ушло, оплата не записалась, файл не сохранился, а пользователь видит «Готово».

Как заметить: поищи в коде пустые обработчики ошибок — catch без тела или только с выводом в консоль. Каждый такой — место, где ты узнаешь о проблеме от клиента.

try { await sendEmail(user) } catch (e) {}

9. Дублированная логика

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

Как заметить: поменяй одно правило — например, налог или формат телефона — и проверь все экраны, где оно встречается. Если где-то осталось старое, ищи копию.

10. Устаревшие API

Модель знает библиотеку такой, какой она была на момент обучения. В код попадают удалённые функции, старые способы настройки и примеры, которые авторы библиотеки давно не рекомендуют.

Как заметить: предупреждения об устаревании в консоли при сборке и запуске, ошибки после обновления зависимостей, код, который не совпадает с текущей документацией.

Коротко

  • Ошибки в коде от ИИ предсказуемы, поэтому их удобно искать по списку.
  • Самые опасные — секреты в коде, отсутствие проверки прав и доверие к данным из браузера.
  • Гонки, N+1 и часовые пояса не видны на демо и проявляются с реальными пользователями.
  • Тихие сбои и пустые catch прячут проблемы, пока о них не напишет клиент.
  • Большинство проверок из списка делаются за минуты, без глубокого чтения кода.

Если хочешь пройти этот список на своём проекте вместе с инженерами, SUBXCAT может помочь.

Хочешь, сделаем это за тебя?

Расскажи о проекте ассистенту — через пять минут будет примерная смета, через 48 часов разбор.

Созвон с командой 20 минут: инженер, дизайнер и маркетолог посмотрят на проект вместе с тобой.
Записаться на звонок