Создание хорошо спроектированного и правильного кода является целью каждого разработчика. Одной из методологий, которая выделяется в достижении этой цели, является разработка через тестирование (TDD). Хотя TDD не проектирует ваш код и не пишет его за вас, это методология в разработке программного обеспечения, которая позволяет вам быстро получать обратную связь по решениям по проектированию в итеративном цикле разработки.
Написание юнит-тестов до или после кодирования или вообще не писать тесты зависит от выбора разработчика. Очевидно, что отсутствие написания тестов приводит к критическим ситуациям в производстве, если разработчику повезет, он обнаружит ошибки на этапе ручного тестирования.
Написание тестов после завершения кода лучше, чем отсутствие тестов. Большинство разработчиков, включая нас, применяют подход «сначала код» напрямую, а затем пишут тесты. Тем не менее, написанный код не лучше. Некоторые функциональные ошибки будут присутствовать, если мы забудем тестовый случай. Написание провальных тестовых случаев перед каждым фрагментом кода, а затем добавление кода для прохождения этого теста с помощью цикла TDD — гораздо лучше.
В настоящее время мы обсуждаем, как мы можем использовать генеративный ИИ, чтобы сделать нашу работу более автоматизированной. В этой работе мы представляем новый эксперимент, вдохновленный Блог Аллена Хелтона. Мы пишем несколько тестовых случаев для проекта, а затем просим ChatGPT сгенерировать код, связанный с тестом.
Генеративный ИИ для разработки с первым тестированием
Учитывая потенциальную возможность человеческой ошибки при ручном тестировании, возникает вопрос: почему бы не автоматизировать TDD с помощью генеративного ИИ?Генеративный ИИ может сыграть преобразующую роль в TDD, автоматизируя создание модульных тестов и соответствующего кода. Вот предлагаемый рабочий процесс:
- Тесты, написанные разработчиками: Разработчики начинают с написания начальных модульных тестов, указывая желаемые результаты для своего кода.
- Код, сгенерированный ИИ: Генеративный ИИ считывает эти модульные тесты и создает необходимый код для их прохождения. Если код выполняется успешно, он сохраняется на диске. Если нет, ИИ создает отчет об ошибке и пытается снова создать правильный код, создавая цикл до тех пор, пока тесты не пройдут. Внедряя ИИ таким образом, разработчики могут гарантировать, что их код тщательно протестирован и проверен, что сводит к минимуму риск ошибок.

Преимущества использования генеративного ИИ в TDD
Автоматизация процесса генерации и тестирования кода может значительно ускорить циклы разработки. Кроме того, снижается вероятность человеческой ошибки в тестовых случаях и написании кода. При этом обеспечивается всестороннее и последовательное покрытие всех тестов и легкое масштабирование процесса разработки без увеличения ручной нагрузки.
Возможные проблемы и решения
Хотя интеграция генеративного ИИ в TDD предлагает многочисленные преимущества, она не лишена проблем. Первоначальная настройка систем ИИ для TDD может быть сложной и иногда отнимать много времени. Разработчикам может потребоваться обучение, чтобы эффективно использовать и доверять инструментам ИИ. Но даже если разработчики готовы с этим справиться, ИИ может испытывать трудности с уникальными или пограничными случаями, которые недостаточно хорошо представлены в обучающих данных, что может запутать заданные сценарии. Генеративный ИИ отвечает приличным кодом, но это не лучший и не лучший выбор. Потому что пока код не применяет никаких механизмов обратной связи. Чтобы создавать отличный код, мы должны применять механизмы обратной связи к ИИ, такие как подход разработчиков к проверке кода. Мы можем объединить ИИ с человеческим контролем для обработки сложных сценариев, по крайней мере, на данный момент.. :)
Обратная связь Прикладной генеративный ИИ в TDD

Механизм обратной связи
Для дальнейшего совершенствования процесса можно ввести механизм обратной связи. Разработчики пишут модульные тесты, а агент разработчика генерирует код. Новый уровень проверки добавляется с агентом-рецензентом кода, который просматривает код и предоставляет обратную связь агенту разработчика.
Итеративное улучшение
Агент разработчика пересматривает код на основе отзывов агента-рецензента и повторно отправляет его на рецензию. Этот итеративный процесс продолжается до тех пор, пока код успешно не пройдет рецензию.
Окончательное тестирование
После того, как код одобрен агентом-рецензентом, запускаются модульные тесты. Если они пройдены, код сохраняется. Если они не пройдены, генерируется отчет об ошибке, и процесс возвращается к генерации кода.
По сути, рабочий процесс будет выглядеть следующим образом:
- Разработчик пишет unit tests.ev
- ИИ считывает эти тесты и генерирует необходимый код.
- Если тесты выполнены успешно, код сохраняется. Если нет, генерируется отчет об ошибке, и ИИ пытается исправить код в цикле.
- Такая первоначальная автоматизация может привести к созданию кода, подверженного ошибкам, и здесь в игру вступает механизм обратной связи.
- Разработчики пишут модульные тесты, а агент разработчика генерирует необходимый код и методы.
- Агент-рецензент кода проверяет код и отправляет отзыв агенту-разработчику.
- Разработчик дорабатывает код на основе отзывов и повторно отправляет его на проверку.
- Этот цикл продолжается до тех пор, пока агент-рецензент кода не одобрит код.
- После одобрения запускаются модульные тесты. Если все прошло успешно, код сохраняется; если нет, генерируется отчет об ошибке, и цикл продолжается.
Благодаря внедрению механизма обратной связи качество сгенерированного кода значительно повышается, гарантируя его соответствие необходимым стандартам и надежное прохождение всех тестов.
Заключение
Интеграция генеративного ИИ в разработку через тестирование (TDD) может произвести революцию в разработке программного обеспечения. Автоматизируя генерацию модульных тестов и соответствующего кода, разработчики могут обеспечить более высокое качество кода, сократить количество ошибок и оптимизировать свой рабочий процесс. Хотя есть проблемы, которые нужно преодолеть, преимущества намного перевешивают первоначальные препятствия, что делает этот подход многообещающим для будущего кодирования. Вы можете проверить наш Кодер ИИ проект, если вы заинтересованы в поддержке программирования с использованием генеративного ИИ.
Будущие направления
На основе этого подхода мы планируем реализовать три элемента:
Расширение поддержки языков: хотя мы сосредоточились на Java, эту методологию можно распространить и на другие языки, такие как Python, JavaScript и другие.
Автоматизированная генерация тестов: мы можем поручить генеративному ИИ писать тесты на основе высокоуровневых требований, предоставленных разработчиками, вместо того, чтобы писать тесты вручную.
Расширение команды агентов ИИ: помимо простого рецензента кода, мы могли бы ввести более специализированных агентов, таких как агент контроля качества для тестирования пограничных случаев, агент производительности для оптимизации производительности кода и т. д.
Мы рекомендуем каждому разработчику программного обеспечения тратить время на написание более надежных и точных тестовых случаев, а затем использовать возможности генеративного ИИ для создания высококачественного кода.