ИИ-помощники для программистов создали новый тип багов. Что это за баги?
Новости
ИИ-помощники, такие как GitHub Copilot, создают новый тип багов: скрытые ошибки в импортах и коде из-за неверных предположений и автоматизации
76 открытий558 показов
В последние годы ИИ-помощники, такие как GitHub Copilot, стали популярными инструментами для ускорения разработки кода.
Однако, как показывает опыт разработчика Klaas van Schelven, использование таких инструментов может привести к появлению новых, труднообнаружимых ошибок в коде.
Случай с GitHub Copilot
В своём блоге разработчик описывает, как при работе над проектом с использованием Django он столкнулся с неожиданными сбоями в тестах.
После продолжительного поиска причины выяснилось, что Copilot автоматически сгенерировал следующую строку импорта:
На первый взгляд, этот импорт может показаться безобидным. Однако в Django классы TestCase
и TransactionTestCase
имеют разные поведения в отношении управления транзакциями:
- TestCase: оборачивает каждый тест в транзакцию и откатывает её после завершения, обеспечивая изоляцию тестов.
- TransactionTestCase: не управляет транзакциями автоматически, что полезно для тестов, зависящих от явного управления транзакциями.
Таким образом, импорт TestCase
под именем TransactionTestCase
привёл к тому, что тесты выполнялись с неверной семантикой транзакций, вызывая неожиданные сбои.
Почему такие ошибки трудно обнаружить?
Такие ошибки сложно выявить по нескольким причинам:
- Автоматизация: Разработчики могут не замечать автоматически сгенерированные строки кода, особенно при быстром темпе работы.
- Переименование: Использование ключевого слова
as
для переименования может скрыть истинную природу импортируемого объекта, вводя в заблуждение при чтении кода. - Доверие к ИИ: Разработчики могут чрезмерно полагаться на ИИ-помощников, не перепроверяя сгенерированный код, что увеличивает риск внедрения подобных ошибок.
Рекомендации для предотвращения подобных ошибок
Чтобы минимизировать риски, связанные с использованием ИИ-помощников, рекомендуется:
- Внимательно проверять сгенерированный код: особенно строки импорта и переименования.
- Понимать контекст: осознавать, какие классы и функции используются, и как они взаимодействуют в проекте.
- Ограничивать автоматизацию: использовать ИИ-помощников как вспомогательный инструмент, а не как основной источник кода.
76 открытий558 показов