Как я перестал бояться ИИ-помощников и начал писать надёжный код с TDD
Помните первую неделю работы с ИИ агентами? У меня было ощущение магии: пишешь маленький промпт и появляется целый метод. Но уже через пару дней начались проблемы. ИИ предлагал код, который вроде работал, но я не понимал, почему именно так. Потом находил баги в проде от кода, который принял не глядя. А однажды ChatGPT сгенерировал SQL-запрос с уязвимостью — хорошо, что заметил на ревью.
Знакомо? Мы все проходили через это. ИИ-помощники обещают ускорение в 10 раз, но на практике получаешь код, которому не доверяешь. И вот ты сидишь и думаешь: либо перепроверять каждый символ за ИИ и тратить на это кучу времени, либо отказаться от использования ИИ.
Я нашёл третий путь. Оказалось, что старый добрый TDD идеально решает проблему контроля над ИИ-генерированным кодом. Расскажу, как это работает на практике.
Почему именно TDD спасает ситуацию
Главная проблема с ИИ-помощниками — непредсказуемость. Ты не знаешь, что получишь: рабочий код, полурабочий или красивую чушь. TDD переворачивает ситуацию: сначала я описываю, что должно работать, а потом проверяю предложения ИИ.
Представьте: вместо «Напиши мне сервис авторизации» я сначала пишу тест. И теперь у меня есть конкретное требование. Когда ИИ предлагает реализацию, я сразу вижу — работает или нет. Никаких догадок, никакого «вроде должно работать».
Как работает TDD (цикл TDD):
Red: Напишите тест для новой функции, который заведомо не проходит (так как код еще не написан).
Green: Напишите минимальный код, достаточный для того, чтобы этот тест прошел.
Refactor: Улучшите написанный код (сделайте его более чистым и читаемым), а затем убедитесь, что тесты всё ещё проходят.
Мой рабочий процесс: Red-Green-Refactor с ИИ
Red
Начинаю любую фичу с теста. Например, нужно добавить расчёт скидок для премиум-клиентов.
Тест красный — функции с логикой ещё нет. Но теперь я точно знаю, что нужно: функция, которая принимает клиента и корзину, возвращает размер скидки.
Здесь включается ИИ. Я показываю ему тест и прошу: «Предложи edge cases для этого сценария». Он добавляет тесты для обычных клиентов, пустой корзины, отрицательной истории покупок. Половину предложений удаляю как избыточные, но 2-3 полезных кейса остаются.
Green
Теперь прошу ИИ написать минимальную реализацию. Важный момент: в промпте указываю «только чтобы пройти этот конкретный тест, без дополнительной логики».
Запускаю тест — зелёный! Но я вижу, что код не учитывает историю покупок. Пишу следующий тест
Тест падает. Показываю ИИ оба теста, прошу доработать. Получаю новую версию, проверяю — работает. И так шаг за шагом выращиваю функцию, контролируя каждое изменение.
Refactor
Когда все тесты зелёные, начинаю рефакторинг. Здесь ИИ особенно полезен: «Посмотри на эту функцию, что можно улучшить?»
Он предлагает вынести расчёт процента в отдельный метод, добавить константы вместо магических чисел, разбить условие на несколько понятных проверок. Каждое предложение применяю отдельно и сразу прогоняю тесты. Если что-то ломается — откатываю.
Например, если ИИ предложил «рефакторинг», который меняет логику округления. Тесты сразу покажут расхождение
Итог
ИИ-помощники — это инструмент, а не замена разработчику. TDD даёт framework, в котором ИИ работает предсказуемо и безопасно. Вы остаётесь архитектором и владельцем кода, ИИ просто ускоряет реализацию.
Да, это не революционное ускорение в 10 раз. Но это стабильное улучшение продуктивности без потери качества. А главное — вы спите спокойно, зная, что каждая строка кода проверена тестами.
Попробуйте на одной задаче. Напишите тест, попросите ИИ реализацию, проверьте результат. Уверен, после первого же зелёного теста вы почувствуете, насколько это удобнее, чем гадать «а правильно ли сгенерировался код?»
Подробнее об ИИ инструментах, которые позволили попасть в топ 5% лучших сотрудников Яндекса, рассказываю тут: