Перейти к содержанию

Аналитика строк кода

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

Как запускается анализ

Анализ выполняется автоматически в CI/CD-пайплайне проекта: при каждом прогоне пайплайна с подключённым шагом анализа формируется новый отчёт по текущему состоянию ветки. Каждый отчёт фиксирует ветку, коммит и автора коммита, для которых выполнялся анализ.

Отдельных действий от пользователя для построения отчёта не требуется — достаточно, чтобы шаг анализа был подключён в пайплайн проекта. Чем регулярнее выполняются прогоны, тем подробнее будет картина динамики на графике.

Для подключения шага аналитики строк кода в пайплайн необходимо выполнить следующие шаги:

  1. В меню проекта выберите пункт Сборка и его подпункт Редактор конвейера.

  2. На странице Редактор конвейера представлена кнопка CCN (Cyclomatic Complexity Number). Она копирует шаблон пайплайна Complexity Analyze в буфер обмена. Шаблон включает скрипт установки инструмента Lizard и вызов скрипта analyze.sh. Содержимое шаблона можно вставить в конфигурационный файл пайплайна .appsec_code-ci.yml.

  3. Результаты выполнения скрипта выводятся в лог пайплайна и сохраняются в форматах: CSV, XML, HTML, CheckStyle, StdOut.

  4. Созданные артефакты (отчёты) сохраняются в проекте в папку Артефакты/complexity-report.

    • Архив с отчётами в разных форматах.
    • Более подробная информация, чем в логе (например, имя метода и путь к исходнику) позволяет детально изучить проблемные места в исходном коде.
  5. После завершения выполнения скрипта аналитика строк кода доступна в пользовательском интерфейсе.

Где смотреть результаты

Раздел доступен на уровне проекта:

Проект → боковое меню → Анализ → Аналитика строк кода

На странице отображаются:

  1. Фильтры — выбор ветки и диапазона дат (вверху страницы).
  2. Карточки метрик — текущие значения по последнему отчёту с индикатором изменения в процентах и направлением тренда (рост/снижение).
  3. График динамики — линейный график изменения метрик во времени: по горизонтали даты отчётов, по вертикали значения метрик. У графика есть легенда, отдельные метрики можно скрывать и показывать.

Если за выбранный период отчётов нет, вместо графика отображается сообщение No data.

Метрики и как они считаются

Метрика Что показывает Как считается
Количество строк кода (LOC) Объём кодовой базы Число значащих строк кода в проекте — без учёта комментариев и пустых строк
Количество функций Общее число функций и методов в проекте Подсчитывается по всем файлам, попавшим в анализ
Цикломатическая сложность — Средняя Среднюю сложность функций проекта Среднее число независимых путей выполнения по всем функциям. Чем выше значение, тем сложнее код для понимания и тестирования
Цикломатическая сложность — Максимальная Сложность самой сложной функции проекта Максимальное значение цикломатической сложности среди всех функций

Как считается изменение (тренд)

Рядом со значением каждой метрики показывается процент изменения:

  • Если диапазон дат не выбран — сравниваются два последних отчёта: последний с предпоследним.
  • Если диапазон дат выбран — сравниваются последний и первый отчёты в выбранном периоде, то есть тренд показывает суммарное изменение за период.

Формула: (новое значение − старое значение) / старое значение × 100, результат округляется до целых процентов. Если изменения нет, индикатор не отображается.

Окраска тренда

  • Для количества строк кода и количества функций рост — нейтральное событие (проект развивается), индикатор информационный.
  • Для цикломатической сложности рост — негативное событие: увеличение средней или максимальной сложности означает, что код становится труднее сопровождать.

Фильтры и параметры

Фильтр Описание По умолчанию
Ветка Отчёты отбираются по ветке, для которой выполнялся анализ. Можно выбрать ветку или тег Ветка проекта по умолчанию
Период дат Диапазон «с — по»; учитываются отчёты, созданные в этом периоде. Дата окончания не может быть в будущем Не задан (показываются все отчёты по ветке)

Выбранные фильтры сохраняются в адресе страницы — ссылкой с настроенными фильтрами можно поделиться с коллегами.

Как читать результаты

  • Стабильный рост LOC при стабильной средней сложности — нормальное развитие проекта.
  • Рост средней цикломатической сложности — сигнал к рефакторингу: новые изменения усложняют код.
  • Высокая максимальная сложность — в проекте есть отдельная функция-«рекордсмен», которую стоит декомпозировать в первую очередь.
  • Резкий скачок любой метрики на графике — повод посмотреть, какие изменения попали в кодовую базу между соседними отчётами (каждый отчёт привязан к коммиту).