Как ИИ помогает в  процессе код ревьюнга
Люди

Как ИИ помогает в процессе код ревьюнга

Этой статьей мы начинаем новую рубрику с говорящим названием – “сложно о сложном”. Статьи в ней написаны IT-специалистами для IT-специалистов (ну или для тех, кто хочет все знать). Автор премьерного материала – Нуржан Ногербек, Lead Software Engineer в британской ритейл компании River Island.

Что такое код ревью, и зачем он нужен

В современной разработке программного обеспечения, код ревью – не просто этап проверки кода на ошибки – это краеугольный камень создания качественного и надежного продукта.

Код ревью – детальный процесс, в котором разработчики анализируют чужой код перед его интеграцией в основную кодовую базу, чтобы обнаружить ошибки, обеспечить соответствие единому стилю программирования, улучшить качество кода и способствовать обмену знаниями внутри команды.

Код ревью также позволяет идентифицировать потенциальные уязвимости и проблемы безопасности, предотвращая их появление в финальной версии продукта.

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

Основные проблемы и вызовы в код ревьюинге

  1. Время и ресурсы
  • Затраты времени: процесс может занимать значительное количество времени у разработчиков, что влияет на сроки выполнения проекта.
  • Недостаток ресурсов: В небольших командах или при высокой загруженности специалистов, у сотрудников может просто напросто не хватать времени на тщательное исследование.
  1. Качество
  • Непоследовательность: Разные рецензенты могут сосредоточиться на разных аспектах кода, пропуская важные моменты.
  • Поверхностность: Иногда код ревью проводится формально, без глубокого анализа и конструктивной критики.
  1. Коммуникация и сотрудничество
  • Недопонимание: Комментарии в код ревью могут быть интерпретированы как критика, что порождает конфликты.
  • Отсутствие обратной связи: Разработчики иногда не получают достаточно информации для улучшения своего кода.
  1. Технические ограничения
  • Отсутствие инструментов: Нехватка или неэффективность инструментов код ревью может затруднять процесс.
  • Сложность интеграции: Проблемы с интеграцией инструментов в существующие рабочие процессы.

Как решать такие проблемы?

Проблема

Решение

Время и ресурсы

Внедрение автоматизированных ИИ инструментов для первичного анализа кода приводит к экономии времени и повышению эффективности работы.

Качество ревью

Разработка чек-листов и стандартов кодирования для обеспечения консистентности.

Коммуникация и сотрудничество

Разработка процесса, в котором рецензенты используют отчеты анализа, созданные автоматизированными ИИ инструментами, для объективного обсуждения кода.

Это позволяет перенести акцент субъективной критики на объективные данные, способствуя конструктивной обратной связи и профессиональному развитию. Регулярные встречи команды, на которых обсуждаются результаты анализа и стратегии улучшения кода, также способствуют культуре сотрудничества и непрерывного обучения.

Технические ограничения

Оценка и выбор подходящих ИИ инструментов для код ревью, которые можно легко интегрировать в существующие рабочие процессы и настроить с учетом специфики проектов и команды.

Мы уже немного затронули ИИ, время разобраться в том, как он влияет на код ревьюинг.

Преимущества использования ИИ

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

На всякий случай сделаем оговорку:

Искусственный интеллект (ИИ) – это область информационных технологий, занимающаяся созданием машин, способных имитировать человеческий интеллект: от генерации и распознавания естественного языка до реализации более узких задач.

ИИ инструменты для код ревьюнга

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 фокусируется на подобных улучшениях структуры и чистоты кода, помогая разработчикам поддерживать высокие стандарты качества кода и избегать технического долга.

Заключение

Выбор ИИ-инструмента для код ревью зависит от множества факторов, включая технические требования проекта, предпочтения команды и бюджетные ограничения.

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

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

Ну а сейчас самое время пройти тест и понять, насколько вы финансово грамотные. Поехали!
Теги:
Tags:
Рекомендуется к прочтению
What to read next
От токенизации до «зеленых» сертификатов: главные события недели
НовостиОт токенизации до «зеленых» сертификатов: главные события недели

Итоги года Binance Казахстан, штраф в размере 6 миллионов долларов ...

Крипто-хроники: миллионы на старых кошельках, Северная Корея и совесть
ИнтересноеКрипто-хроники: миллионы на старых кошельках, Северная Корея и совесть

Самые странные/безумные новости из криптомира. На этот раз без лишних слов.

Технологический рай для стартапов: Нидерланды
В миреТехнологический рай для стартапов: Нидерланды

Тюльпаны, сыры, ветряные мельницы, самый высокий уровень проникновения ...

Материалы по теме

Смотреть все
писельная стрелка вправо зеленая

Other materials

More
писельная стрелка вправо зеленая
Читать ещеMore