Объявления

Как мы создали 273 модульных теста за 3 дня, не написав ни одной строчки кода

Как мы создали 273 модульных теста за 3 дня, не написав ни одной строчки кода

Этот пост — Часть 3 из серии из 4 частей. Обязательно ознакомься с другими постами в серии для более глубокого понимания нашего генератора бизнес-планов на основе ИИ.
Часть 1: Как мы создали генератор бизнес-планов на основе ИИ с использованием LangGraph & LangChain
Часть 2: Как мы оптимизировали создание бизнес-планов на ИИ: скорость против качества
Часть 3: Как мы создали 273 модульных теста за 3 дня без написания единой строки кода
Часть 4: Фреймворк оценки ИИ — как мы создали систему для оценки и улучшения бизнес-планов, созданных ИИ

В быстро меняющемся мире разработки программного обеспечения роль искусственного интеллекта расширяется за пределы генерации кода до автоматизации тестирования. В течение интенсивного трёхдневного периода в феврале 2025 года мы провели глубокое исследование в DreamHost, оценивая, насколько эффективно ИИ может автономно писать модульные тесты с минимальным вмешательством человека. Эта статья делится ключевыми результатами, метриками и выводами, которые могут изменить наш подход к автоматизации тестирования.

Исходная Постановка Задачи

Основная цель была ясна: оценить, может ли ИИ надежно создавать тесты единицы производственного качества без написания кода человеком. Это не было просто академическим упражнением — в DreamHost мы применяем ИИ для того, чтобы увеличить нашу производительность в 100000 раз в проекте «Бизнес-планировщик с ИИ», и эти исследования были направлены на дальнейшее продвижение этих границ. Такой подход представляет собой значительный сдвиг от традиционных рабочих процессов тестирования единиц и может кардинально повлиять на производительность разработки.

Параметры Проекта

Для этого исследования мы разработали структурированную методологию:

  1. Ввод Данных для ИИ: Предоставь ИИ исходный код, примеры тестовых файлов, показывающих стилистику/паттерны, требования к тестированию и контекст среды разработки
  2. Ограничения для Человека: Ограничь ввод данных человеком до уточнений, исправления недопониманий и предоставления недостающего контекста — без прямого написания кода
  3. Фокус на Измерениях: Отслеживай время выполнения, необходимые итерации, типы возникших ошибок, качество результатов, достигнутый охват и затраченные человеческие усилия

Наши критерии успеха были амбициозны, но необходимы для применения в производстве:

  • 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. Изменённый Рабочий Процесс

Вместо того чтобы разработчики писали тесты с нуля, более эффективный рабочий процесс выглядит следующим образом:

  1. Разработчик предоставляет исходный код и примеры тестов ИИ
  2. ИИ создаёт первоначальную реализацию теста
  3. Разработчик предоставляет итеративные отзывы по конкретным проблемам
  4. ИИ уточняет реализацию до достижения целей по покрытию
  5. Разработчик проводит финальный обзор и совершает фиксацию

Этот подход позволяет разработчикам сосредоточиться на проверке качества тестов и крайних случаях, а не на написании шаблонного тестового кода.

2. Возможности Оптимизации

Несколько практик значительно улучшили производительность генерации тестов с ИИ:

  • Предоставление четких примеров тестов в том же стиле/формате
  • Указание точных требований к покрытию заранее
  • Включение информации о сложных типах
  • Проактивное выявление потенциальных краевых случаев
  • Использование подходов с тестированием на первом этапе, где ИИ имеет доступ к реализации и тестам одновременно

3. Экономическое Влияние

Основываясь на сравнении времени реализации ИИ и оценочного времени реализации человеком, потенциальная прибавка в производительности значительна:

  • Сокращение времени, затрачиваемого на написание рутинных модульных тестов, на 70–85%
  • Более высокая стабильность покрытия
  • Более быстрые циклы обратной связи во время разработки
  • Больше тестовых случаев при том же объеме разработки

Вперёд В Будущее: Перспективы Испытаний С Использованием ИИ

Это исследование представляет собой раннее исследование того, что, вероятно, станет стандартной практикой разработки. Несколько тенденций указывают на то, куда направляется эта область:

Будущие Возможности

  1. Разработка через тестирование: ИИ может генерировать тесты и код реализации итеративно
  2. Интеграция с CI/CD: Автоматическое создание и поддержание тестов в процессе сборки
  3. Обучение для конкретных доменов: Тонкая настройка моделей для конкретных кодовых баз или паттернов
  4. Самовосстанавливающиеся тесты: ИИ обновляет тесты при изменениях в реализации
  5. Специализированные модели для тестирования: Модели ИИ, специально оптимизированные для генерации тестов

Оставшиеся Задачи

Несмотря на значительный прогресс, остаются следующие проблемы:

  1. Сложное Управление Состоянием: Тестирование компонентов с состоянием, имеющих сложные взаимодействия
  2. Специализированные Знания: Тесты, требующие специфических знаний в области или бизнес-правил
  3. Интеграционное Тестирование: Переход от модульного тестирования к интеграционным и системным тестам
  4. Тестирование Производительности: Выявление и составление эффективных тестов на производительность
  5. Тестирование Безопасности: Поиск и использование уязвимостей безопасности

Сводка Проекта: Цифры

Вот краткий обзор того, что мы достигли в нашем трёхдневном эксперименте:

  • Тестовые Добавления: добавлено 273 новых теста (с 22 до 295 в общем)
  • Успешность: ~90% попыток успешно достигли 100% покрытия
  • Время Реализации: в среднем 5–8 минут на компонент
  • Самый Большой Набор Тестов: 273 теста добавлено за приблизительно 6 часов общего рабочего времени
  • Самая Быстрая Реализация: 90 секунд для снимков фреймворка с 100% покрытием
  • Самый Сложный Случай: компонент графика с 13 зависимостями, завершён за 5 минут
  • Уровень Качества: качество кода поддерживалось на уровне опытного разработчика
  • Вклад Человека: ни одной строки кода, написанной человеком

С точки зрения ROI, мы оцениваем экономию времени в 70–80% по сравнению с ручной реализацией, без ущерба для качества. Единственным значительным сбоем был RunsService, где нам удалось достичь покрытия только на 51% из-за чрезвычайно сложной логики ветвления.

Заключение: Практические Рекомендации

На основе этого исследования мы рекомендуем следующие практики для команд, желающих использовать ИИ для модульного тестирования:

  1. Начни Просто: Начни с простых компонентов, следуя установленным шаблонам
  2. Предоставь Примеры: Включи репрезентативные примеры своего стиля тестирования
  3. Итеративная Обратная Связь: Запланируй 2–3 цикла обратной связи для достижения оптимальных результатов
  4. Сосредоточься На Крайних Случаях: Используй свои знания в области для предложения крайних случаев, которые может пропустить ИИ
  5. Установи Чёткие Руководства: Определи, что означает «завершено» для покрытия тестами и стиля
  6. Регулярные Обновления: По мере улучшения моделей ИИ, пересматривай свой подход, чтобы использовать новые возможности

Самым захватывающим аспектом этого исследования является то, что это только начало. По мере развития возможностей ИИ потенциал ИИ-управляемого тестирования будет расширяться в более сложные области тестирования, в конечном итоге преобразуя подход к обеспечению качества в разработке программного обеспечения.

Это исследование проводилось в течение трёх дней в феврале 2025 года над проектом Бизнес-планировщика DreamHost с использованием нескольких моделей ИИ, включая GitHub Copilot, модели GPT от OpenAI и Claude от Anthropic. Тестовая среда была сервисом на основе TypeScript с Jest и ts-mockito для тестирования, с акцентом на компонентах реального предприятия. Самое главное, на протяжении всего процесса мы не написали ни одной строки кода — всю реализацию теста выполнял ИИ при минимальном участии человека.

Этот пост является частью 3 из серии из 4 частей. Обязательно ознакомьтесь с другими постами серии для более глубокого погружения в наш генератор бизнес-планов на базе ИИ.
Часть 1: Как мы создали генератор бизнес-планов на базе ИИ с использованием LangGraph & LangChain
Часть 2: Как мы оптимизировали генерацию бизнес-планов на базе ИИ: скорость против качества
Часть 3: Как мы создали 273 юнит-теста за 3 дня без написания единой строки кода
Часть 4: Фреймворк оценки ИИ — как мы создали систему для оценки и улучшения бизнес-планов, созданных ИИ