Классический Test-Driven Development (TDD) требует высокой дисциплины от инженера. При делегировании задач ИИ-агентам TDD становится единственным надежным механизмом контроля качества и предотвращения галлюцинаций в логике. Агент, работающий вне цикла TDD, склонен генерировать избыточный код, нарушать SOLID-принципы и внедрять скрытые дефекты.
В AI-Assisted TDD цикл Red-Green-Refactor формализуется: спецификация конвертируется в падающие тесты (Red), агент пишет минимально достаточный код для их прохождения (Green), а затем оптимизирует структуру с сохранением поведения (Refactor). Тесты выступают непрерывной петлей обратной связи для LLM.
Процесс AI-Assisted TDD представляет собой итеративный конвейер, управляемый строгими ассертами.
[Системная Спецификация]
│
▼
┌──► [RED: Агент пишет тест по спеке (Тест падает)]
│ │
│ ▼
│ [GREEN: Агент пишет минимальный код для прохождения]
│ │
│ ▼
└─── [REFACTOR: Оптимизация без изменения поведения (Тесты зеленые)]Инженер скармливает агенту спецификацию компонента.
Агент генерирует набор тестов, проверяющих все граничные условия. Тесты запускаются и должны упасть.
Агент генерирует код, пока все тесты не станут зелеными.
Агент очищает код от дублирования и улучшает архитектуру, не меняя логику.
Почему в конвейере AI-Assisted TDD категорически запрещено позволять агенту одновременно генерировать падающие тесты и реализацию кода в рамках одной итерации?
Пример реализации цикла агентом на TypeScript с использованием Vitest.
import { describe, it, expect } from "vitest";
import { applyDiscount } from "./discount";
describe("DiscountService", () => {
// RED: Тест написан на основе спецификации
it("должен применять скидку 10% для VIP-пользователей", () => {
const result = applyDiscount(1000, "VIP");
// Агент строго контролирует ассерты
expect(result).toBe(900);
});
it("не должен применять скидку для обычных пользователей", () => {
const result = applyDiscount(1000, "REGULAR");
expect(result).toBe(1000);
});
it("не может вернуть отрицательную стоимость", () => {
const result = applyDiscount(50, "SUPER_VIP_99_PERCENT");
expect(result).toBeGreaterThanOrEqual(0);
});
});// GREEN & REFACTOR: Минимальная реализация, созданная агентом
export function applyDiscount(amount: number, userTier: string): number {
if (amount < 0) throw new Error("Сумма не может быть отрицательной");
let discountMultiplier = 1;
if (userTier === "VIP") {
discountMultiplier = 0.9;
}
const finalAmount = amount * discountMultiplier;
return Math.max(0, finalAmount); // Защита от отрицательных значений
}Какое правило песочницы (Agent Guardrails) необходимо зафиксировать для AI-агента на этапе Refactor?
Агент может написать сложную фабрику классов там, где достаточно одной функции. Важно давать инструкцию: "Реализуй минимально возможный код для прохождения тестов".
При неудачном рефакторинге агент может попытаться "подогнать" тесты под сломанный код. Тесты должны быть заблокированы от изменений на этапе Refactor.
Агент генерирует проверки вроде expect(result).toBeTruthy(), которые скрывают реальные баги. Требуйте строгих проверок (toBe, toStrictEqual).