вторник, 23 апреля 2019 г.

Codacy: онлайн-сервис для статического анализа кода приложений

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

Codacy похож на известный инструмент для анализа кода SonarQube, но более прост в использовании и интеграции с проектами. Сервис легко встраивается в существующий процесс continuous integration и не требует особых заморочек с настройками. Для разработчиков опенсорс проектов он бесплатен.

Интеграция с GitHub

Если у вас есть проект на GitHub, то интегрировать его с Codacy можно по инструкции (en):
Базовая интеграция очень простая, с ней не должно возникнуть трудностей.

Предположим, что ваш проект на python. Рассмотрим, как добавить на дашборд Codacy информацию о покрытии кода проекта тестами — code coverage. Эти данные можно собирать в процессе сборки кода и отправлять их в Codacy. Для этого нужно добавить следующие команды в файл конфигурации .travis.yml (если у вас сборка проекта настроена в Travis CI) или в аналогичные сборочные файлы:
  1. Устанавливаем утилиту coverage для python: https://pypi.python.org/pypi/coverage — она будет собирать информацию о покрытии кода тестами:
    pip install coverage
  2. Устанавливаем утилиту python-codacy-coverage: https://github.com/codacy/python-codacy-coverage — она будет пушить результаты покрытия тестами в проект на codacy:
    pip install codacy-coverage
  3. Находясь в корне своего проекта запустите сбор статистики. Команда в простейшем случае будет такая:
    coverage run -m py.test tests
    — если ваши тесты находятся в каталоге tests. Дополнительные опции и команды можно изучить, набрав команду:
    coverage help [command]
  4. После сбора статистики формируется служебный файл .coverage. Преобразуйте его:
    coverage xml
    — для дальнейшей отправки в codacy, либо
    coverage html
    — для изучения отчёта человеком.
  5. Отправьте в Codacy информацию о покрытии кода тестами командой:
    python-codacy-coverage -r coverage.xml
    Профит: получите красивый дашборд в Codacy, где отображена вся информация о покрытии тестами.

Примеры

После базовой интеграции и настройки code coverage вы получите примерно вот такой дашборд (на картинке изображёна оценка качества и статус нашего опенсорс проекта CrossPM): 


С дашборда можно сразу перейти на список обнаруженных проблем, либо кликнув на вкладку Issues. Для каждой проблемы будут даны объяснения, к чему она может привести, указаны способы решения проблемы и даже примерное время на её исправление:


Также можно добавить оценку качества кода в README.md файл вашего проекта на GitHub:


Для этого в начале вашего README.md файла добавьте так называемый "badge". Код для badge у каждого будет свой, посмотреть его можно в настройках проекта на Codacy (подробнее в инструкции). В нашем случае, это была строка:
[![codacy](https://api.codacy.com/project/badge/Grade/7a9ed2e6bb3e445f9e4a776e9b7f7886)](https://www.codacy.com/app/devopshq/crosspm/dashboard)

На этом всё. Смотрите больше примеров в официальном FAQhttps://support.codacy.com/hc/en-us

Желаю вам отличного кода!