Дебаг — это детективная работа
В уроках 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.
Дебаг по методу СЛОК
Этот промпт структурирует ваш запрос по формуле СЛОК. Замените параметры в квадратных скобках:
Ты — senior-разработчик с 10-летним опытом отладки сложных систем. Находишь корневые причины, а не симптомы. СТЕКТРЕЙС / ОШИБКА: [вставьте полный стектрейс или описание ошибки] ЛОГИКА (что должен делать код): [опишите ожидаемое поведение] ОЖИДАНИЕ vs РЕАЛЬНОСТЬ: - Ожидаю: [что должно произойти] - Получаю: [что происходит на самом деле] - Разница: [в чём конкретно отличие] КОНТЕКСТ: - Стек: [язык, фреймворк, версии] - Что изменилось: [недавние обновления, деплои, изменения конфигурации] - Частота: [всегда / иногда / при определённых условиях] - Окружение: [dev / staging / production] КОД (если есть): [вставьте подозрительный участок кода] ЗАДАЧА: 1. Определи корневую причину (root cause), а не симптом 2. Объясни, ПОЧЕМУ это происходит (механизм бага) 3. Предложи исправление с кодом 4. Предложи, как предотвратить подобный баг в будущем (тест, проверка, паттерн)
Не бойтесь давать AI «слишком много» контекста. Лишней информации при дебаге не бывает. Лучше дать 20 строк контекста и получить точный ответ, чем дать 3 строки и получить 5 гипотез.
🤖 Открыть в AI-модели
Мысль дня
Баг — это не ошибка в коде. Это расхождение между тем, что вы думаете код делает, и тем, что он делает на самом деле. AI сокращает это расхождение, потому что видит код без ваших предубеждений.
Найдите и исправьте 3 бага с AI
Сегодня вы применяете метод СЛОК на практике. Задание из трёх шагов — от получения «сломанного» кода до его защиты от будущих багов:
Попросите AI: «Сгенерируй Python-функцию на 40 строк для расчёта зарплаты сотрудника (оклад + бонус + налог + надбавки). Специально вставь 3 бага: один очевидный (TypeError), один логический (неправильный расчёт), один граничный (деление на ноль при определённых условиях). Не говори, где баги.»
Запустите код мысленно или реально. Для каждого бага заполните промпт СЛОК: стектрейс (или описание ошибочного поведения), логика, ожидание vs реальность, контекст. Сравните свои находки с тем, что нашёл AI.
Попросите AI: «Для каждого найденного бага: 1) напиши тест, который бы поймал этот баг ДО релиза, 2) предложи защитный паттерн, чтобы подобный баг не повторился.» Это связывает Урок 4 (тесты) с Уроком 5 (дебаг) — тесты предотвращают, дебаг лечит.