Этот пост — Часть 3 из серии из 4 частей. Обязательно ознакомься с другими постами в серии для более глубокого понимания нашего генератора бизнес-планов на основе ИИ.
Часть 1: Как мы создали генератор бизнес-планов на основе ИИ с использованием LangGraph & LangChain
Часть 2: Как мы оптимизировали создание бизнес-планов на ИИ: скорость против качества
Часть 3: Как мы создали 273 модульных теста за 3 дня без написания единой строки кода
Часть 4: Фреймворк оценки ИИ — как мы создали систему для оценки и улучшения бизнес-планов, созданных ИИ
В быстро меняющемся мире разработки программного обеспечения роль искусственного интеллекта расширяется за пределы генерации кода до автоматизации тестирования. В течение интенсивного трёхдневного периода в феврале 2025 года мы провели глубокое исследование в DreamHost, оценивая, насколько эффективно ИИ может автономно писать модульные тесты с минимальным вмешательством человека. Эта статья делится ключевыми результатами, метриками и выводами, которые могут изменить наш подход к автоматизации тестирования.
Исходная Постановка Задачи
Основная цель была ясна: оценить, может ли ИИ надежно создавать тесты единицы производственного качества без написания кода человеком. Это не было просто академическим упражнением — в DreamHost мы применяем ИИ для того, чтобы увеличить нашу производительность в 100000 раз в проекте «Бизнес-планировщик с ИИ», и эти исследования были направлены на дальнейшее продвижение этих границ. Такой подход представляет собой значительный сдвиг от традиционных рабочих процессов тестирования единиц и может кардинально повлиять на производительность разработки.
Параметры Проекта
Для этого исследования мы разработали структурированную методологию:
- Ввод Данных для ИИ: Предоставь ИИ исходный код, примеры тестовых файлов, показывающих стилистику/паттерны, требования к тестированию и контекст среды разработки
- Ограничения для Человека: Ограничь ввод данных человеком до уточнений, исправления недопониманий и предоставления недостающего контекста — без прямого написания кода
- Фокус на Измерениях: Отслеживай время выполнения, необходимые итерации, типы возникших ошибок, качество результатов, достигнутый охват и затраченные человеческие усилия
Наши критерии успеха были амбициозны, но необходимы для применения в производстве:
- 100% покрытие тестами
- Типобезопасная реализация
- Соблюдение лучших практик тестирования
- Минимальное вмешательство человека
- Разумное время выполнения
- Поддерживаемый тестовый код
Ключевые Результаты Исследования
Всего за три дня наша команда добавила 273 новых теста в проект Бизнес-планировщика, значительно увеличив покрытие тестами. После анализа множества реализаций тестов, созданных ИИ для различных сервисов и компонентов, были выявлены несколько закономерностей, которые предоставляют ценные сведения о текущем состоянии модульного тестирования на базе ИИ.
1. Метрики Эффективности
Одно из самых поразительных открытий — значительное сокращение времени реализации:

Экономия времени значительна — большинство тестовых реализаций были завершены менее чем за 10 минут, при оценочном человеческом эквиваленте 30–60 минут на выполнение той же задачи. Это представляет потенциальное увеличение производительности в 4–6 раз при написании стандартных тестов.
2. Сильные Стороны ИИ Тестирования
Через множество реализаций, некоторые возможности ИИ стабильно выделялись:
- Комплексное Покрытие: ИИ стабильно достигал покрытия кода на 96–100% при разной сложности сервисов
- Распознавание Образов: ИИ успешно распознавал тестовые образы из примеров и последовательно применял их
- Адаптация к Обратной Связи: Большинство ошибок могли быть устранены с минимальными уточнениями
- Реализация Макетов: ИИ продемонстрировал сильные способности в создании подходящих макетов и текстовых примеров
- Согласованность Структуры: Организация тестов следовала лучшим практикам с чёткими шаблонами arrange-act-assert
3. Наблюдаемые Ограничения И Проблемы
Несмотря на впечатляющие результаты, возникло несколько повторяющихся проблем:
- Обработка Типов в TypeScript: Наиболее частые ошибки связаны с неполными определениями типов или неверными предположениями о типах
- Понимание Структуры Проекта: Пути импорта и отношения зависимостей часто требовали ручной коррекции
- Покрытие Крайних Случаев: Хотя базовые пути были хорошо покрыты, сложная условная логика иногда требовала дополнительных тестов
- Предположения о Шаблонах: ИИ иногда делал необоснованные предположения о специфических для приложения шаблонах или паттернах
- Требования к Итерациям: Более сложные сервисы требовали большего количества обменов информацией для достижения полного покрытия
Снимки Кейс-Стади
Давайте рассмотрим несколько репрезентативных реализаций, чтобы лучше понять эти паттерны.
Случай 1: Тестирование Простого Экспорта Констант
Для тестирования файлов, содержащих в основном постоянные экспорты:
- Время Реализации: 1 минута 30 секунд
- Тестовые Случаи: 10
- Покрытие: 100%
- Итерации: 1 (исправления не требуются)
- Подход: Эффективное использование снимков для тестирования больших постоянных объектов
Этот случай показывает, что для простых тестовых сценариев, ИИ может создавать полные тесты без каких-либо повторений — по сути “идеальные” с первой попытки.
Случай 2: Сложная Служба С Зависимостями DI
Для более сложной услуги с внедрением зависимостей:
- Время Реализации: 4 минуты 50 секунд
- Тестовые Случаи: 5
- Покрытие: 100%
- Итерации: 2
- Проблемы: Для реализации теста Bootstrap требуется исправление зависимостей
Искусственный интеллект успешно справился с тестированием внедрения зависимостей, требуя лишь незначительных корректировок для инициализации контейнера.
Случай 3: Сложная Служба с Множеством Отделений
Для наиболее сложных проверенных услуг:
- Время Реализации: 24 минуты
- Тестовые Случаи: 11
- Покрытие: 51.26% (ниже цели)
- Итерации: 5–6
- Проблемы: Трудности с достижением полного покрытия ветвей для сложной условной логики
Это представляет собой важный граничный случай, где ИИ все еще испытывал трудности с полноценным тестированием очень сложной ветвистой логики.
Последствия для процесса разработки
Эти результаты предполагают несколько изменений в подходе к реализации тестирования:
1. Изменённый Рабочий Процесс
Вместо того чтобы разработчики писали тесты с нуля, более эффективный рабочий процесс выглядит следующим образом:
- Разработчик предоставляет исходный код и примеры тестов ИИ
- ИИ создаёт первоначальную реализацию теста
- Разработчик предоставляет итеративные отзывы по конкретным проблемам
- ИИ уточняет реализацию до достижения целей по покрытию
- Разработчик проводит финальный обзор и совершает фиксацию
Этот подход позволяет разработчикам сосредоточиться на проверке качества тестов и крайних случаях, а не на написании шаблонного тестового кода.
2. Возможности Оптимизации
Несколько практик значительно улучшили производительность генерации тестов с ИИ:
- Предоставление четких примеров тестов в том же стиле/формате
- Указание точных требований к покрытию заранее
- Включение информации о сложных типах
- Проактивное выявление потенциальных краевых случаев
- Использование подходов с тестированием на первом этапе, где ИИ имеет доступ к реализации и тестам одновременно
3. Экономическое Влияние
Основываясь на сравнении времени реализации ИИ и оценочного времени реализации человеком, потенциальная прибавка в производительности значительна:
- Сокращение времени, затрачиваемого на написание рутинных модульных тестов, на 70–85%
- Более высокая стабильность покрытия
- Более быстрые циклы обратной связи во время разработки
- Больше тестовых случаев при том же объеме разработки
Вперёд В Будущее: Перспективы Испытаний С Использованием ИИ
Это исследование представляет собой раннее исследование того, что, вероятно, станет стандартной практикой разработки. Несколько тенденций указывают на то, куда направляется эта область:
Будущие Возможности
- Разработка через тестирование: ИИ может генерировать тесты и код реализации итеративно
- Интеграция с CI/CD: Автоматическое создание и поддержание тестов в процессе сборки
- Обучение для конкретных доменов: Тонкая настройка моделей для конкретных кодовых баз или паттернов
- Самовосстанавливающиеся тесты: ИИ обновляет тесты при изменениях в реализации
- Специализированные модели для тестирования: Модели ИИ, специально оптимизированные для генерации тестов
Оставшиеся Задачи
Несмотря на значительный прогресс, остаются следующие проблемы:
- Сложное Управление Состоянием: Тестирование компонентов с состоянием, имеющих сложные взаимодействия
- Специализированные Знания: Тесты, требующие специфических знаний в области или бизнес-правил
- Интеграционное Тестирование: Переход от модульного тестирования к интеграционным и системным тестам
- Тестирование Производительности: Выявление и составление эффективных тестов на производительность
- Тестирование Безопасности: Поиск и использование уязвимостей безопасности
Сводка Проекта: Цифры
Вот краткий обзор того, что мы достигли в нашем трёхдневном эксперименте:
- Тестовые Добавления: добавлено 273 новых теста (с 22 до 295 в общем)
- Успешность: ~90% попыток успешно достигли 100% покрытия
- Время Реализации: в среднем 5–8 минут на компонент
- Самый Большой Набор Тестов: 273 теста добавлено за приблизительно 6 часов общего рабочего времени
- Самая Быстрая Реализация: 90 секунд для снимков фреймворка с 100% покрытием
- Самый Сложный Случай: компонент графика с 13 зависимостями, завершён за 5 минут
- Уровень Качества: качество кода поддерживалось на уровне опытного разработчика
- Вклад Человека: ни одной строки кода, написанной человеком
С точки зрения ROI, мы оцениваем экономию времени в 70–80% по сравнению с ручной реализацией, без ущерба для качества. Единственным значительным сбоем был RunsService, где нам удалось достичь покрытия только на 51% из-за чрезвычайно сложной логики ветвления.
Заключение: Практические Рекомендации
На основе этого исследования мы рекомендуем следующие практики для команд, желающих использовать ИИ для модульного тестирования:
- Начни Просто: Начни с простых компонентов, следуя установленным шаблонам
- Предоставь Примеры: Включи репрезентативные примеры своего стиля тестирования
- Итеративная Обратная Связь: Запланируй 2–3 цикла обратной связи для достижения оптимальных результатов
- Сосредоточься На Крайних Случаях: Используй свои знания в области для предложения крайних случаев, которые может пропустить ИИ
- Установи Чёткие Руководства: Определи, что означает «завершено» для покрытия тестами и стиля
- Регулярные Обновления: По мере улучшения моделей ИИ, пересматривай свой подход, чтобы использовать новые возможности
Самым захватывающим аспектом этого исследования является то, что это только начало. По мере развития возможностей ИИ потенциал ИИ-управляемого тестирования будет расширяться в более сложные области тестирования, в конечном итоге преобразуя подход к обеспечению качества в разработке программного обеспечения.
Это исследование проводилось в течение трёх дней в феврале 2025 года над проектом Бизнес-планировщика DreamHost с использованием нескольких моделей ИИ, включая GitHub Copilot, модели GPT от OpenAI и Claude от Anthropic. Тестовая среда была сервисом на основе TypeScript с Jest и ts-mockito для тестирования, с акцентом на компонентах реального предприятия. Самое главное, на протяжении всего процесса мы не написали ни одной строки кода — всю реализацию теста выполнял ИИ при минимальном участии человека.
Этот пост является частью 3 из серии из 4 частей. Обязательно ознакомьтесь с другими постами серии для более глубокого погружения в наш генератор бизнес-планов на базе ИИ.
Часть 1: Как мы создали генератор бизнес-планов на базе ИИ с использованием LangGraph & LangChain
Часть 2: Как мы оптимизировали генерацию бизнес-планов на базе ИИ: скорость против качества
Часть 3: Как мы создали 273 юнит-теста за 3 дня без написания единой строки кода
Часть 4: Фреймворк оценки ИИ — как мы создали систему для оценки и улучшения бизнес-планов, созданных ИИ