Разработка
Урок 5

Дебаг и поиск ошибок

0 из 6
1
Фундамент
2
Погружение
3
Бизнес-кейс
4
Промпт
5
Инсайт
6
Практика
Фундамент

Дебаг — это детективная работа

В уроках 1-4 вы научились генерировать, рефакторить и тестировать код. Но баги неизбежны — они появляются в каждом проекте. Вопрос не «будут ли баги?», а «как быстро вы их найдёте?».

Традиционный дебаг: прочитать стектрейс → нагуглить ошибку → прочитать 5 ответов на Stack Overflow → попробовать первый → не помогло → попробовать второй → помогло, но непонятно почему. Занимает 30 минут — 3 часа.

Дебаг с AI: вставить ошибку (стектрейс, лог, описание поведения) → AI объясняет причину → предлагает исправление с обоснованием → вы понимаете, почему баг возник. Занимает 2-15 минут.

3 уровня сложности дебага:

Уровень 1: Ошибка с понятным стектрейсом — TypeError, SyntaxError, ImportError. AI разберёт за 30 секунд.

Уровень 2: Логическая ошибка — код не падает, но возвращает неправильный результат. Нужно объяснить AI ожидаемое и фактическое поведение.

Уровень 3: «Плавающий» баг — воспроизводится не всегда, зависит от данных, нагрузки, порядка операций. Самый сложный — AI помогает сузить круг подозреваемых.

Ключевой принцип: чем больше контекста вы дадите AI, тем точнее диагноз. «Ошибка в коде» → бесполезный ответ. «Функция X возвращает None вместо списка, когда входной DataFrame содержит NaN в колонке "price", вот стектрейс и входные данные» → точный диагноз.

Погружение

Метод СЛОК: 4 шага дебага с AI

Формула СЛОКСтектрейс + Логика + Ожидание + Контекст. Четыре компонента, которые превращают хаотичный дебаг в систему.

Шаг 1: Стектрейс.
Скопируйте полный стектрейс ошибки. Не редактируйте его — AI нужна полная цепочка вызовов. Включите номера строк, имена файлов, тип ошибки. Если ошибки нет (логический баг) — опишите, что видите в логах или на экране.

Шаг 2: Логика.
Объясните, что ДОЛЖЕН делать код: «Эта функция принимает список заказов и возвращает суммарную выручку за месяц, группируя по категориям.» Без этого AI не знает, что считать ошибкой.

Шаг 3: Ожидание vs реальность.
«Ожидаю: словарь {electronics: 150000, food: 80000}. Получаю: пустой словарь {}» или «Ожидаю: статус 200 и JSON. Получаю: статус 500 и HTML-страницу с ошибкой.» Конкретная разница помогает AI локализовать баг.

Шаг 4: Контекст.
Среда выполнения: Python 3.11, Django 4.2, PostgreSQL 15. Что изменилось недавно: «Вчера обновил библиотеку pandas с 1.5 на 2.0». Когда баг появился: «Работало до пятницы, в понедельник сломалось». Частота: «Воспроизводится всегда / только на больших данных / через раз».

Бонусная техника: «Резиновая уточка 2.0».
Даже если AI не найдёт баг — процесс формулирования проблемы для AI заставляет вас структурировать мысли. В 30% случаев разработчики находят баг сами, пока пишут промпт. AI — это улучшенная резиновая уточка.

Бизнес-кейс

Баг, который не могли найти 2 недели — AI нашёл за 8 минут

Ситуация: e-commerce платформа. Проблема: у 3% пользователей корзина «теряла» товары при переходе к оплате. Баг плавающий — воспроизвести не удавалось. 2 разработчика потратили 2 недели, проверили 15 гипотез.

Решение с AI (метод СЛОК):

Стектрейс: ошибок нет — товары просто исчезали из сессии.

Логика: корзина хранится в Redis с TTL 30 минут. При переходе к оплате читается из Redis и копируется в таблицу orders.

Ожидание vs реальность: в Redis 5 товаров, в orders — 3. Причём всегда пропадают последние добавленные.

Контекст: 2 сервера за балансировщиком, Redis один. Баг чаще у мобильных пользователей (медленное соединение).

AI диагностировал за 8 минут: race condition. Пользователь добавляет товар (запись в Redis на сервере A), затем быстро переходит к оплате (чтение из Redis на сервере B). Из-за сетевой задержки репликации Redis запись ещё не синхронизировалась.

AI предложил: 1) убедиться что используется один Redis-инстанс без реплик для корзин, 2) добавить проверку количества товаров при переходе к оплате, 3) использовать оптимистичную блокировку.

Результат: баг исправлен за 2 часа. Экономия: 2 недели × 2 разработчика = 4 человеко-недели. Потеря конверсии за 2 недели бага: ~$30K.

Готовый промпт

Дебаг по методу СЛОК

Этот промпт структурирует ваш запрос по формуле СЛОК. Замените параметры в квадратных скобках:

ChatGPT / Claude / DeepSeek
Ты — senior-разработчик с 10-летним опытом отладки сложных систем. Находишь корневые причины, а не симптомы.

СТЕКТРЕЙС / ОШИБКА:
[вставьте полный стектрейс или описание ошибки]

ЛОГИКА (что должен делать код):
[опишите ожидаемое поведение]

ОЖИДАНИЕ vs РЕАЛЬНОСТЬ:
- Ожидаю: [что должно произойти]
- Получаю: [что происходит на самом деле]
- Разница: [в чём конкретно отличие]

КОНТЕКСТ:
- Стек: [язык, фреймворк, версии]
- Что изменилось: [недавние обновления, деплои, изменения конфигурации]
- Частота: [всегда / иногда / при определённых условиях]
- Окружение: [dev / staging / production]

КОД (если есть):
[вставьте подозрительный участок кода]

ЗАДАЧА:
1. Определи корневую причину (root cause), а не симптом
2. Объясни, ПОЧЕМУ это происходит (механизм бага)
3. Предложи исправление с кодом
4. Предложи, как предотвратить подобный баг в будущем (тест, проверка, паттерн)
📝 Как использовать:

Не бойтесь давать AI «слишком много» контекста. Лишней информации при дебаге не бывает. Лучше дать 20 строк контекста и получить точный ответ, чем дать 3 строки и получить 5 гипотез.

🤖 Открыть в AI-модели
Инсайт

Мысль дня

Баг — это не ошибка в коде. Это расхождение между тем, что вы думаете код делает, и тем, что он делает на самом деле. AI сокращает это расхождение, потому что видит код без ваших предубеждений.
— Адаптировано
Практика

Найдите и исправьте 3 бага с AI

Сегодня вы применяете метод СЛОК на практике. Задание из трёх шагов — от получения «сломанного» кода до его защиты от будущих багов:

📦 Шаг 1: Получите код с багами

Попросите AI: «Сгенерируй Python-функцию на 40 строк для расчёта зарплаты сотрудника (оклад + бонус + налог + надбавки). Специально вставь 3 бага: один очевидный (TypeError), один логический (неправильный расчёт), один граничный (деление на ноль при определённых условиях). Не говори, где баги.»

🔍 Шаг 2: Найдите баги методом СЛОК

Запустите код мысленно или реально. Для каждого бага заполните промпт СЛОК: стектрейс (или описание ошибочного поведения), логика, ожидание vs реальность, контекст. Сравните свои находки с тем, что нашёл AI.

🛡️ Шаг 3: Защитите код от будущих багов

Попросите AI: «Для каждого найденного бага: 1) напиши тест, который бы поймал этот баг ДО релиза, 2) предложи защитный паттерн, чтобы подобный баг не повторился.» Это связывает Урок 4 (тесты) с Уроком 5 (дебаг) — тесты предотвращают, дебаг лечит.

Блок изучен!