ИИ для разработчиков: код-ревью и тесты
Как встроить нейросеть в ежедневную работу разработчика без магии и хайпа: промт для ревью, генерация тестов и граница, за которой ИИ лучше не доверять.
Илья Воронов
Developer Advocate
ИИ не заменит разработчика, но отлично заменяет «второго ревьюера в пятницу вечером». Рассказываем, как наша команда использует модели для ревью и тестов — и где проходит граница доверия.
Код-ревью: что поручить модели
Модель хорошо ловит то, на что у человека к концу дня уже не хватает внимания:
- пропущенные проверки на
nullи пустые массивы; - необработанные ошибки и промисы без
await; - дублирование логики и слишком длинные функции;
- неочевидные имена переменных и устаревшие комментарии.
А вот архитектурные решения, бизнес-логику и безопасность оставьте людям — модель не знает контекста вашего продукта.
Промт для ревью
Ты — senior TypeScript-разработчик. Проведи ревью diff ниже.Сгруппируй замечания: баги, производительность, читаемость.Для каждого — строка, проблема и исправленный фрагмент.Не комментируй стиль, который исправит линтер.
Последняя строка важна: без неё половина ответа уйдёт на отступы и кавычки.
Генерация тестов
Самый быстрый выигрыш — тесты для чистых функций. Возьмём простую утилиту:
export function formatCredits(value: number): string {if (!Number.isFinite(value) || value < 0) return "0";if (value >= 1000) return `${(value / 1000).toFixed(1)}K`;return String(Math.round(value));}
Попросите модель покрыть граничные случаи — и получите примерно такой набор:
import { describe, expect, it } from "vitest";import { formatCredits } from "./format-credits";describe("formatCredits", () => {it("returns 0 for negative and non-finite values", () => {expect(formatCredits(-5)).toBe("0");expect(formatCredits(Number.NaN)).toBe("0");});it("formats thousands with one decimal", () => {expect(formatCredits(3420)).toBe("3.4K");});it("rounds small values", () => {expect(formatCredits(12.6)).toBe("13");});});
Тесты всё равно нужно читать: модель иногда подгоняет ожидания под текущее поведение функции, даже если оно ошибочное.
Какую модель выбрать
Для ревью больших изменений подходит Model B — она рассуждает пошагово и реже пропускает связанные ошибки. Для тестов и рефакторинга небольших функций хватит Model A: быстрее и вдвое дешевле.
Встраиваем в процесс
- Подключите API Haar AI к CI: модель оставит комментарии в пул-реквесте ещё до того, как его откроет коллега.
- Отправляйте на ревью только изменённые файлы и ограничьте размер diff — ответы точнее, а расходы предсказуемы.
- Раз в спринт смотрите, какие замечания модели команда принимает, а какие игнорирует, и уточняйте промт.
Правила безопасности
- Не отправляйте в модель ключи, пароли и персональные данные — даже в тестовых фикстурах.
- Проверяйте лицензии, если модель предлагает скопированный фрагмент.
- Относитесь к любому сгенерированному коду как к чужому пул-реквесту: сначала ревью, потом мерж.
Хорошее правило: ИИ пишет первый вариант, человек принимает решение.