На протяжении многих лет я входил в состав ряда команд по разработке программного обеспечения, и одна вещь оставалась неизменной во всех из них - это упор на анализ кода и качество кода. По мере приближения конца 2000-х большинство команд начали искать способы максимально автоматизировать этот процесс. Но проверка кода с участием человека все еще требуется, и большинство (хороших) команд потратят где-то 20% -30% времени разработки на коллегиальную проверку кода.

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

Что такое CodeGuru

CodeGuru - это на самом деле не один, а два отдельных сервиса. CodeGuru Reviewer и CodeGuru Profiler. Они в значительной степени делают именно то, что предполагают эти названия. Рецензент играет в пространстве статического анализа кода, конкурируя с подобными SonarQube и различными плагинами IDE, но с некоторыми возможностями AI. Профилировщик смотрит на ваш код с точки зрения времени выполнения, пытаясь найти недостатки в коде и определить самые дорогие строки кода.

Поддерживаемые платформы

CodeGuru Reviewer может анализировать только исходный код Java, и его можно интегрировать с репозиториями ниже.

  • AWS CodeCommit
  • Bitbucket
  • GitHub
  • GitHub Enterprise Cloud
  • GitHub Enterprise Server

CodeGuru Profiler может предоставлять рекомендации для приложений, написанных на Java, и имеет некоторые ограниченные возможности для предоставления подмножества рекомендаций для приложений, написанных на других языках JVM.

Настройка

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

Настройка профилировщика CodeGuru состоит из двух частей. Первый - настроить группу профилирования и соответствующие разрешения IAM, а второй - запустить приложение с агентом профилирования. Опять же, эти шаги очень просты, и их можно найти здесь.

Использование CodeGuru Reviewer

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

Эти рекомендации будут относиться к следующим категориям.

  • Лучшие практики AWS - то есть правильное использование aws apis, разбивки на страницы и т. Д.
  • Параллелизм - то есть нарушения атомарности, чрезмерная синхронизация и т. Д.
  • Предотвращение утечки ресурсов
  • Предотвращение утечки конфиденциальной информации
  • Общие передовые практики кодирования
  • Рефакторинг - то есть выявление дублированного кода
  • Проверка ввода

CodeGuru также добавит все рекомендации в качестве комментариев к PR. Пользователь может оставить отзыв о рекомендациях, комментируя код в запросе на вытягивание. Я считаю, что AWS использует эти отзывы для обучения своих алгоритмов машинного обучения, чтобы со временем улучшить обозревателя CodeGuru.

Использование CodeGuru Profiler

После настройки группы профилирования и запуска приложения с агентом профилирования CodeGuru Profiler будет собирать данные профилирования приложения, которые можно визуализировать в консоли AWS.

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

Рекомендации CodeGuru Profiler

После настройки CodeGuru Profiler будет непрерывно анализировать профили приложений в режиме реального времени и выявлять любые потенциальные проблемы, влияющие на производительность. Затем они перечислены как рекомендации в каждой группе профилирования. Также можно настроить тему SNS для получения уведомлений о любых рекомендациях при их обнаружении.

Вывод

Когда я начал изучать CodeGuru, я был приятно удивлен тем, насколько легко его было настроить по сравнению с любыми другими инструментами статической проверки кода, которые я использовал в прошлом. Также меня воодушевляет тот факт, что правила и логика рекомендаций обзора больше не статичны. Это, несомненно, сэкономит много времени, поскольку вам не придется соблюдать основные правила. Еще одна, на мой взгляд, наиболее ценная возможность - это способность определять потенциальные проблемы параллелизма в многопоточном коде.

Глядя на CodeGuru Profiler, я считаю, что единственным самым большим преимуществом является его способность добавлять в код долларовую стоимость. Это, очевидно, даст дополнительное представление на основе общих данных о производительности приложения.

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

Что касается CodeGuru Profiler, очевидно, что он не заменит ни одну из платформ мониторинга приложений, поскольку его возможности связаны только с мониторингом производительности приложения. Но, учитывая, насколько хорошо он интегрируется с эхо-системой AWS, и, что наиболее важно, его способность оценивать стоимость запуска кода определенными способами, я считаю, что CodeGuru Profiler может стать важной частью платформы мониторинга производительности вашего приложения.