Как ИИ помогает в процессе код ревьюнга
Этой статьей мы начинаем новую рубрику с говорящим названием – “сложно о сложном”. Статьи в ней написаны IT-специалистами для IT-специалистов (ну или для тех, кто хочет все знать). Автор премьерного материала – Нуржан Ногербек, Lead Software Engineer в британской ритейл компании River Island.
Читается за
Что такое код ревью, и зачем он нужен
В современной разработке программного обеспечения, код ревью – не просто этап проверки кода на ошибки – это краеугольный камень создания качественного и надежного продукта.
Код ревью – детальный процесс, в котором разработчики анализируют чужой код перед его интеграцией в основную кодовую базу, чтобы обнаружить ошибки, обеспечить соответствие единому стилю программирования, улучшить качество кода и способствовать обмену знаниями внутри команды.
Код ревью также позволяет идентифицировать потенциальные уязвимости и проблемы безопасности, предотвращая их появление в финальной версии продукта.
У процесса есть ряд проблем, которые затрудняют его эффективность. Их понимание и исследование способов их устранения – основа для общего повышения качества кодирования.
Основные проблемы и вызовы в код ревьюинге
- Время и ресурсы
- Затраты времени: процесс может занимать значительное количество времени у разработчиков, что влияет на сроки выполнения проекта.
- Недостаток ресурсов: В небольших командах или при высокой загруженности специалистов, у сотрудников может просто напросто не хватать времени на тщательное исследование.
- Качество
- Непоследовательность: Разные рецензенты могут сосредоточиться на разных аспектах кода, пропуская важные моменты.
- Поверхностность: Иногда код ревью проводится формально, без глубокого анализа и конструктивной критики.
- Коммуникация и сотрудничество
- Недопонимание: Комментарии в код ревью могут быть интерпретированы как критика, что порождает конфликты.
- Отсутствие обратной связи: Разработчики иногда не получают достаточно информации для улучшения своего кода.
- Технические ограничения
- Отсутствие инструментов: Нехватка или неэффективность инструментов код ревью может затруднять процесс.
- Сложность интеграции: Проблемы с интеграцией инструментов в существующие рабочие процессы.
Как решать такие проблемы?
Мы уже немного затронули ИИ, время разобраться в том, как он влияет на код ревьюинг.
Преимущества использования ИИ
Внедрение искусственного интеллекта в процесс код ревьюнга позволяет автоматизировать рутинные задачи и заметно повышает качество и эффективность проверки кода. В целом, позволяет расширить возможности разработчиков и рецензентов, делая процесс более глубоким и менее трудозатратным.
На всякий случай сделаем оговорку:
Искусственный интеллект (ИИ) – это область информационных технологий, занимающаяся созданием машин, способных имитировать человеческий интеллект: от генерации и распознавания естественного языка до реализации более узких задач.
ИИ инструменты для код ревьюнга
Amazon CodeGuru Reviewer
Инструмент, предоставляемый Amazon Web Services, использует машинное обучение для анализа исходного кода и обнаружения проблем, таких как дефекты написанного, неэффективное использование ресурсов, неоптимальные практики и потенциальные уязвимости.
У него есть с десяток заметных преимуществ:
- Автоматический анализ кода: Инструмент автоматически проводит анализ кода на этапе пул-реквестов, что помогает обнаружить проблемы до их попадания в продакшн.
- Поддержка многих языков: CodeGuru поддерживает ряд популярных языков программирования, включая Java и Python.
- Обучение на больших данных: ИИ CodeGuru обучается на десятках тысяч проектов и миллионах линий кода, обеспечивая высокую точность и релевантность предложений.
- Проверка на уязвимости: Обнаруживает известные уязвимости в коде, что позволяет разработчикам исправить их до релиза.
- Оптимизация производительности: Дает рекомендации по оптимизации производительности (например, находит неэффективный код, который замедляет приложение или увеличивает расходы на вычислительные мощности).
- Интеграция с существующими инструментами: CodeGuru легко интегрируется с популярными инструментами разработки и CI/CD платформами, такими как GitHub, Bitbucket и AWS CodeCommit.
- Анализ использования ресурсов: Анализирует использование ресурсов AWS и дает рекомендации по сокращению затрат.
- Обучение на реальных отзывах: CodeGuru Reviewer может обучаться на основе фидбэка от разработчиков, со временем улучшая точность и релевантность своих рекомендаций.
- Простота использования: Легкость настройки и использования позволяет быстро начать работу с инструментом, без необходимости глубоких знаний в машинном обучении.
- Комментарии и рекомендации в контексте: CodeGuru Reviewer предоставляет комментарии и рекомендации непосредственно в контексте строки кода, к которой они относятся, упрощая понимание и исправление проблем.
- Масштабируемость: Благодаря облачной инфраструктуре Amazon, CodeGuru способен обрабатывать большие объемы кода, что подходит для крупных и быстроразвивающихся проектов.
- Интеграция с AWS: Плотная интеграция с экосистемой AWS упрощает использование для тех, кто уже является клиентом AWS, и обеспечивает дополнительные функции.
- Улучшение кода в реальном времени: Предоставляет рекомендации по улучшению кода в реальном времени, что помогает ускорить обучение разработчиков и процесс разработки.
Но нет ничего идеального, вот основные минусы:
- Ограниченная поддержка языков: На данный момент поддерживает ограниченное количество языков программирования
- Стоимость: Как и многие продукты AWS, CodeGuru может быть дорогим при использовании в больших объемах, особенно для стартапов и малого бизнеса.
- Кривая обучения: Хотя сам инструмент относительно прост в настройке, интерпретация и внедрение его рекомендаций могут потребовать времени и определенных знаний.
- Зависимость от экосистемы AWS: Для максимальной эффективности инструмент предполагает использование других сервисов AWS, что может быть неудобным для команд, не использующих облачные решения Amazon.
- Ложные срабатывания: Как и любые другие автоматические инструменты, CodeGuru может порождать ложные срабатывания, требующие дополнительной проверки разработчиками.
Инструмент в действии
Предположим, есть небольшой фрагмент кода AWS Lambda функции на Golang, который содержит распространенную ошибку неэффективного использование ресурсов:
Amazon CodeGuru Reviewer может выявить эту проблему как неэффективное использование ресурсов Lambda, поскольку функция может истечь по времени до того, как будут обработаны все таймеры, и предложить решения, такие как использование внешних триггеров для вызова Lambda функции или применение других методов асинхронной обработки для эффективного управления временем выполнения функции.
SonarQube
SonarQube – платформа для непрерывного анализа качества исходного кода, которая помогает разработчикам обнаруживать проблемы и исправлять их, улучшая безопасность, поддерживаемость и производительность. Кроме того, платформа предоставляет обширные отчеты о проделанной работе.
Вот лишь часть того, на что способен этот инструмент:
- Широкая поддержка языков: SonarQube предлагает анализ для более чем 20 языков программирования, включая самые популярные.
- Обнаружение уязвимостей и ошибок: Автоматически идентифицирует потенциальные уязвимости и ошибки в коде.
- Отслеживание технического долга: Оценивает и отслеживает технический долг, предоставляя рекомендации по его уменьшению.
- Непрерывная интеграция: Легко интегрируется с CI/CD инструментами, обеспечивая автоматизированный и непрерывный анализ.
- Глубокий анализ качества: SonarQube предоставляет детальные отчеты по ошибкам, уязвимостям и "запахам кода", помогая улучшить качество и поддерживаемость кода.
- Пользовательские правила и профили качества: Позволяет создавать пользовательские правила и профили качества, адаптированные под специфические требования проекта или команды.
- Панель управления и отчеты: Предлагает детализированные панели управления и отчеты о качестве кода.
- Поддержка плагинов: SonarQube поддерживает широкий ассортимент плагинов, расширяя его функциональность и позволяя интегрировать дополнительные инструменты анализа и обработки.
- Управление безопасностью: Оценивает и анализирует безопасность кода.
- Коллаборативные функции: Улучшает сотрудничество в команде с помощью комментариев, обсуждений и прямого назначения задач на исправление проблем в коде.
Теперь к основным недостаткам:
- Комплексность настройки: Настройка SonarQube и его интеграция с существующими системами могут быть сложными для новых пользователей или небольших команд.
- Производительность: Анализ больших проектов может быть времязатратным, что потенциально замедляет рабочий процесс разработки.
- Стоимость для крупных команд: Хотя существует бесплатная версия, расширенные функции и версия Enterprise могут быть дорогостоящими для крупных организаций.
- Обучение и поддержка: Из-за обширности функционала и настроек может потребоваться значительное время для изучение инструмента и его эффективного использования.
- Возможность ложных срабатываний: Как и любой инструмент статического анализа кода, SonarQube может генерировать ложные положительные результаты, требующие дополнительной ручной проверки.
Инструмент в действии
Давайте создадим пример кода на Python, который содержит потенциальную уязвимость, связанную с небезопасной обработкой внешних данных, например, SQL инъекцией. Приведем пример кода, который собирает SQL запрос, используя конкатенацию строк (что является плохой практикой) и покажем, как SonarQube указывает на эту уязвимость и предлагает исправление.
В этом коде user_id напрямую конкатенируется в SQL запрос, что делает его уязвимым для SQL инъекции. SonarQube может выявить этот риск и предложить использовать параметризованные запросы для предотвращения инъекции. Вот пример того, как он предлагает улучшить код в отчете после анализа:
В улучшенном варианте функции get_user_data_safe мы используем плейсхолдер в SQL запросе и передаем user_id как параметр в метод execute, что предотвращает внедрение вредоносного SQL кода. SonarQube обычно рекомендует этот подход для обеспечения безопасности работы с базой данных.
DeepCode by Snyk
DeepCode – инструмент, использующий семантический анализ и машинное обучение для обнаружения уязвимостей и других проблем в коде.
Вот ключевые возможности и особенности DeepCode:
- Ориентированность на разработчика: Snyk разработан с акцентом на удобство для разработчиков, предлагая простые и понятные средства для исправления уязвимостей без нарушения рабочих процессов.
- Мгновенное сканирование и исправление: Реальное время сканирования и автоматическое предложение решений для обнаруженных уязвимостей ускоряют процесс устранения проблем.
- Широкая поддержка языков и инструментов: Snyk поддерживает множество языков программирования и инструментов разработки, включая различные IDE и системы CI/CD, а также постоянно расширяет свою совместимость.
- Продвинутая база знаний: За Snyk стоит мощный движок машинного обучения, анализирующий миллионы открытых библиотек, что позволяет постоянно улучшать инструменты безопасности на основе вклада из открытого исходного кода.
- Приоритизация рисков: Инструмент помогает определить и сосредоточить внимание на наиболее критических уязвимостях кода, улучшая общую безопасность приложений.
- Интеграция безопасности в повседневную работу: Snyk гладко интегрируется в ежедневные рабочие процессы разработчиков.
- ИИ-улучшенный опыт разработки: Система использует ИИ, разработанный с использованием технологии DeepCode, для точного определения уязвимостей и предложения практических решений.
- Ворота безопасности CI/CD: Внедряет сканирование уязвимостей в процесс сборки, повышая безопасность приложений.
- Настройка тестирования и правил: Позволяет создавать пользовательские запросы и правила с помощью поиска DeepCode AI, предлагая гибкость в адаптации под конкретные потребности разработки.
- Интеграции с популярными инструментами разработки: Snyk предлагает обширный набор интеграций с такими инструментами, как Bitbucket, Jira, GitHub, и IntelliJ, облегчая внедрение мер безопасности в существующие рабочие процессы разработки.
- Приоритизация и точность: Использование ИИ для анализа и приоритизации уязвимостей обеспечивает высокую точность обнаружения и целенаправленное исправление наиболее критических угроз.
Теперь к минусам:
- Фокус на безопасности, а не на качестве кода: Основное внимание DeepCode уделено безопасности, что означает меньшее внимание общему качеству кода.
- Кривая обучения: Несмотря на удобство для разработчиков, полное использование всех возможностей DeepCode может требовать времени на обучение и адаптацию.
- Стоимость для крупных команд и проектов: Для больших организаций и проектов стоимость подписки на Snyk, включающую функции DeepCode, может быть значительной.
- Возможность ложных срабатываний: Как и любой автоматизированный инструмент анализа, DeepCode может генерировать ложные срабатывания, требующие дополнительной проверки и настройки.
- Зависимость от внешних интеграций: Максимальная эффективность DeepCode достигается при использовании вместе с другими инструментами и платформами, что может представлять проблему для команд, использующих уникальные или специализированные инструменты разработки.
Инструмент в действии
Вот пример кода на Golang, который содержит проблему по неправильному закрытию файлового дескриптора, что может привести к утечкам ресурсов.
В этом коде файл example.txt открывается, но не закрывается правильно. Инструменты DeepCode выявят отсутствие defer file.Close() и предложат добавить эту строку сразу после успешного открытия файла для обеспечения его закрытия, как только завершится работа с ним. Также они предложат исправленный вариант:
Добавление defer file.Close() гарантирует, что файловый дескриптор будет корректно закрыт после завершения работы с файлом, предотвращая утечку ресурсов.
Code Climate
Code Climate – платформа, которая предоставляет автоматизированный код ревью и анализ качества с использованием инструментов машинного обучения.
К плюсам или возможностям и особенностям относятся:
- Автоматизированные комментарии: Code Climate предоставляет автоматические комментарии к пул-реквестам, помогая улучшить качество и безопасность кода прямо в процессе разработки.
- Полное покрытие тестами: Платформа позволяет проверять покрытие кода тестами построчно внутри изменений кода, предотвращая слияние кода без адекватного тестирования.
- Оповещения о поддерживаемости: Code Climate помогает активно бороться с техническим долгом, выделяя файлы с частыми изменениями, недостаточным покрытием тестами и проблемами поддерживаемости.
- Приоритизация кода: Инструмент позволяет выявлять критические области кода, нуждающиеся в улучшении, соединяя информацию о качестве кода с областями высокой изменчивости.
- Статусы пул-реквестов (pull request): Предоставляет статусы покрытия и поддерживаемости для каждого пул-реквеста, давая детальное представление о состоянии кода.
- Анализ начального обзора: Анализирует первые отклики на пул-реквесты для оценки качества ревью.
- Отслеживание покрытия: Мониторит процент комментированных файлов для измерения тщательности ревью кода.
- Скорость ревью: Измеряет время от открытия пул-реквеста до первого ревью, указывая на оперативность обратной связи.
- Влияние ревью: Оценивает воздействие комментариев ревью на изменения в коде и ответы.
- Анализ рецензентов: Предоставляет метрики участия рецензентов, выявляя узкие места и обеспечивая сбалансированное участие.
- Доступность и удобство использования: Платформа предлагает бесплатный план для малых проектов и удобные платные опции, а также интуитивно понятный интерфейс.
Из того, что может отпугнуть вас от этого инструмента:
- Стоимость для крупных команд: Для крупных организаций со множеством приватных репозиториев стоимость использования Code Climate может быть высокой.
- Кривая обучения: Некоторым командам может потребоваться время для адаптации и полного использования всех возможностей платформы.
- Ограничения бесплатного плана: Бесплатный план имеет ограниченный набор функций, что может потребовать переход на платное обслуживание для полного доступа.
- Возможность ложных срабатываний: Как и любой автоматизированный инструмент анализа кода, Code Climate может генерировать ложные срабатывания, требующие дополнительной проверки.
- Зависимость от интеграций: Полная функциональность Code Climate зависит от его интеграции с другими инструментами и платформами, что может быть препятствием для команд, использующих менее популярные или специализированные инструменты.
Инструмент в действии
Code Climate может выявлять так называемый code smells, которые могут указывать на более глубокие проблемы в структуре кода. Допустим, есть код на Python, который нарушает принципы DRY (Don't Repeat Yourself) и содержит дублирование логики. Вот пример такого кода:
Code Climate после анализа кода выделит дублирование строки dataset['processed'] = True и предложит устранение этого дублирования путем создания отдельной функции, которая будет обрабатывать общую логику. Вот исправленный вариант с учетом рекомендации Code Climate:
В исправленном примере мы избавились от дублирования кода путем вынесения повторяющейся логики в отдельную функцию mark_as_processed, что делает код более чистым, легким для поддержки и расширения.
Code Climate фокусируется на подобных улучшениях структуры и чистоты кода, помогая разработчикам поддерживать высокие стандарты качества кода и избегать технического долга.
Заключение
Выбор ИИ-инструмента для код ревью зависит от множества факторов, включая технические требования проекта, предпочтения команды и бюджетные ограничения.
Однако, независимо от выбора, важно помнить, что успешная интеграция таких инструментов требует не только технических усилий, но и развития культуры код ревью внутри команды, где такие инструменты рассматриваются как помощники, а не заменители человеческого взаимодействия и экспертизы.
Создание эффективного процесса код ревью, подкрепленного современными технологиями, позволяет командам достигать высоких стандартов качества при одновременном сокращении времени на разработку и увеличении удовлетворенности работы среди разработчиков.
Рекомендуется к прочтению
What to read next
Казахстанские банки начали внедрение стандарта ISO 20022 для модернизации платежных систем, а активы банков страны выросли на 6,7 трлн тенге за 2024 год.
Наш редактор Катерина уже делилась своим опытом взаимодействия с Chat GPT, но это – не мнение профессионала и исследователя. Мы решили погрузиться еще ...
Это интервью отличается от остальных. Чаще всего мы говорим с теми, у кого уже все получилось. А на этот раз – с теми, за кого болеем и верим, что все еще впереди.