Снижение рисков получения некачественного ПО требует тщательного анализа кода, всестороннего тестирования и баланса между автоматизированной помощью и вмешательством человека, пишет на портале The New Stack Маниш Капур, старший директор по маркетингу технических продуктов компании Sonar.
Внедрение искусственного интеллекта в жизненный цикл разработки ПО (SDLC) имеет свои преимущества, например, позволяет разработчикам работать более эффективно. Так, исследование GitHub показало, что разработчики могут выполнять задачи более чем на 50% быстрее.
Большие языковые модели (LLM), такие как GPT-4, продемонстрировали свое мастерство в понимании естественного языка и генерации текста. Они также могут генерировать фрагменты кода, функции и даже целые программы на основе текстовых данных или высокоуровневых требований.
Такая возможность имеет существенное значение для разработки ПО, поскольку позволяет ускорить выполнение задач кодирования и открыть двери для более быстрого создания инновационных решений. Более того, это означает, что значительная часть кода в будущем будет генерироваться с использованием LLM, что приведет к экспоненциальному ускорению разработки приложений.
При этом это вовсе не означает, что ИИ вытеснит разработчиков. Напротив, с появлением ИИ в мире разработки потребность в человеческих навыках только возрастет. В будущем у разработчиков будет больше возможностей для решения более сложных задач, и они смогут переключить свое внимание на проекты, которые им интересны. Эффект от использования ИИ для повышения производительности также будет заключаться в улучшении рабочей атмосферы и борьбе с выгоранием.
Однако без компромиссов не обойтись. Хотя код, генерируемый LLM, помогает разработчикам быстро приступить к работе и позволяет компаниям быстрее создавать приложения, это сопряжено со значительными рисками. Иногда LLM могут генерировать неверную, вводящую в заблуждение или даже вымышленную информацию. Это явление известно как «галлюцинация».
LLM обучаются на огромных массивах данных, которые могут быстро устаревать. В результате они могут не иметь доступа к самой актуальной информации или закреплять устаревшие сведения. Важно убедиться, что фрагмент кода, предлагаемый ИИ-инструментом, безопасен и чист в контексте всей кодовой базы.
Вот 10 подводных камней разработки ПО на основе ИИ, о которых следует помнить:
- Качество и надежность. Код, разработанный ИИ, может содержать ошибки или неэффективность из-за отсутствия тестирования и проверки модели в реальном времени. Модели ИИ генерируют код на основе шаблонов, примеров и обучающих данных. Однако они не обладают механизмами обратной связи в реальном времени для проверки корректности и эффективности сгенерированного кода, как это сделал бы человек-разработчик в процессе кодирования. Кроме того, для обеспечения критически важного контроля, выявления ошибок и уязвимостей, а также оптимизации кода с целью повышения его эффективности и удобства сопровождения требуется его статический анализ.
- Уязвимости безопасности. Одна из серьезных проблем, связанных с использованием LLM при генерации кода, заключается в том, что эти модели могут непреднамеренно создавать код с уязвимостями. Они могут сделать приложения и системы уязвимыми для взлома, нарушений и других угроз безопасности. Для предотвращения этого сгенерированный LLM код должен быть проверен с использованием статического тестирования безопасности приложений (SAST) до развертывания в производстве.
- Отсутствие контекста. ИИ может генерировать код без глубокого понимания контекста проекта и требований, что приводит к неадекватным или неправильным решениям. Хотя модели ИИ в некоторой степени способны понимать контекст, они могут не в полной мере уловить все нюансы и специфические требования конкретного проекта. Это может привести к тому, что технически код будет работать, но не будет соответствовать уникальным целям проекта или требованиям к пользовательскому опыту.
- Сопровождение. Стремясь выполнить запрос разработчика или обеспечить требуемую функциональность, генеративный ИИ может создавать код, отличающийся излишней сложностью. Такая чрезмерная инженерия может привести к ненужным абстракциям, избыточным слоям кода, отсутствию модульности или чрезмерно запутанной логике. Сложные и запутанные структуры кода могут затруднить дальнейшее обслуживание, отладку и сопровождение.
- Технический долг. Под техническим долгом понимаются будущие затраты на доработку или сопровождение, возникающие в результате приоритета скорости и быстрых исправлений над качеством кода. Модели генеративного ИИ часто ставят во главу угла генерацию синтаксически корректного кода, который не всегда оптимизирован с точки зрения качества, эффективности и удобства сопровождения. Это может привести к тому, что код будет сложнее понимать, модифицировать или расширять, что приведет к увеличению технического долга.
- Проблемы с зависимостями. Разработанный ИИ код может использовать внешние библиотеки или зависимости без тщательной проработки. Модели генеративного ИИ могут не иметь полного представления о внешних библиотеках и зависимостях. При генерации кода они могут использовать библиотеки, которые служат непосредственной цели, не задумываясь о долгосрочных последствиях. Они также могут генерировать код, полагаясь на конкретные версии библиотек или зависимостей, доступные на момент генерации. По мере развития этих библиотек, их обновления или устаревания могут возникнуть проблемы совместимости со сгенерированным кодом. Это может привести к ошибкам во время выполнения или неожиданному поведению.
- Этические и юридические проблемы. Хотя достижения генеративного ИИ несомненно впечатляют, это обоюдоострый меч. Помимо беспрецедентного повышения производительности и точности в различных отраслях, он порождает целый ряд этических и правовых проблем. Сгенерированный код может случайно оказаться похожим на существующий, что вызовет опасения по поводу плагиата или нарушения авторских прав.
- Отсутствие творческого подхода. Одним из основных ограничений при создании кода генеративным ИИ является отсутствие в нем инновационных решений и творческого подхода по сравнению с тем, что могут предложить разработчики-люди. Хотя модели генеративного ИИ, такие как GPT-3.5, хорошо справляются с пониманием паттернов, синтаксиса и общепринятой практики кодирования, они могут испытывать трудности с творческим подходом к решению проблем.
- Неэффективность. Сгенерированный код может быть неэффективным и неоптимизированным с точки зрения использования памяти, скорости обработки, пропускной способности сети и других показателей. Модели генеративного ИИ в первую очередь ориентированы на генерацию синтаксически корректного кода для решения поставленной задачи. При этом они могут не обладать возможностью оптимизации кода с точки зрения эффективности использования ресурсов. Это ограничение обусловлено наличием обучающих данных, в которых оптимизация может быть неприоритетной.
- Соответствие нормам и правилам. Код, генерируемый ИИ, несет в себе риск неполного соответствия отраслевым стандартам, нормативным требованиям или соглашениям по кодированию. Он может не учитывать отраслевые комплаенс-требования, что создает риск их нарушения. Некоторые стандарты кодирования включают в себя требования доступности и инклюзивности, гарантирующие, что ПО будет удобным и доступным для людей с ограниченными возможностями. Код, создаваемый ИИ, может не учитывать эти требования, что может привести к исключению пользователей и нарушению правил доступности.
Убедитесь в чистоте разработанного ИИ кода
Важно признать, что, несмотря на неоспоримую привлекательность автоматически генерируемого кода, он по своей сути не является готовым к производству. Существует риск того, что в сгенерированном LLM коде приоритет отдается сиюминутной функциональности, а не долгосрочной сопровождаемости, читаемости и масштабируемости. Для снижения этих рисков требуется тщательный анализ, всестороннее тестирование, доработка кода и поддержание баланса между автоматической помощью и вмешательством человека в процесс разработки.
Обеспечив чистоту — последовательность, продуманность, адаптивность и ответственность — сгенерированного ИИ кода, организации смогут минимизировать риски, сократить технический долг и получить бóльшую ценность от своего ПО предсказуемым и устойчивым образом.