Аналитика строк кода¶
Модуль Аналитика строк кода показывает динамику объёма и сложности кодовой базы проекта: сколько в проекте строк кода и функций, насколько сложен код, и как эти показатели меняются со временем. Модуль помогает отслеживать рост проекта и вовремя замечать ухудшение качества кода — например, рост сложности функций.
Как запускается анализ¶
Анализ выполняется автоматически в CI/CD-пайплайне проекта: при каждом прогоне пайплайна с подключённым шагом анализа формируется новый отчёт по текущему состоянию ветки. Каждый отчёт фиксирует ветку, коммит и автора коммита, для которых выполнялся анализ.
Отдельных действий от пользователя для построения отчёта не требуется — достаточно, чтобы шаг анализа был подключён в пайплайн проекта. Чем регулярнее выполняются прогоны, тем подробнее будет картина динамики на графике.
Для подключения шага аналитики строк кода в пайплайн необходимо выполнить следующие шаги:
-
В меню проекта выберите пункт Сборка и его подпункт Редактор конвейера.
-
На странице Редактор конвейера представлена кнопка CCN (Cyclomatic Complexity Number). Она копирует шаблон пайплайна Complexity Analyze в буфер обмена. Шаблон включает скрипт установки инструмента Lizard и вызов скрипта analyze.sh. Содержимое шаблона можно вставить в конфигурационный файл пайплайна .appsec_code-ci.yml.
-
Результаты выполнения скрипта выводятся в лог пайплайна и сохраняются в форматах: CSV, XML, HTML, CheckStyle, StdOut.
-
Созданные артефакты (отчёты) сохраняются в проекте в папку Артефакты/complexity-report.
- Архив с отчётами в разных форматах.
- Более подробная информация, чем в логе (например, имя метода и путь к исходнику) позволяет детально изучить проблемные места в исходном коде.
-
После завершения выполнения скрипта аналитика строк кода доступна в пользовательском интерфейсе.
Где смотреть результаты¶
Раздел доступен на уровне проекта:
Проект → боковое меню → Анализ → Аналитика строк кода
На странице отображаются:
- Фильтры — выбор ветки и диапазона дат (вверху страницы).
- Карточки метрик — текущие значения по последнему отчёту с индикатором изменения в процентах и направлением тренда (рост/снижение).
- График динамики — линейный график изменения метрик во времени: по горизонтали даты отчётов, по вертикали значения метрик. У графика есть легенда, отдельные метрики можно скрывать и показывать.
Если за выбранный период отчётов нет, вместо графика отображается сообщение No data.
Метрики и как они считаются¶
| Метрика | Что показывает | Как считается |
|---|---|---|
| Количество строк кода (LOC) | Объём кодовой базы | Число значащих строк кода в проекте — без учёта комментариев и пустых строк |
| Количество функций | Общее число функций и методов в проекте | Подсчитывается по всем файлам, попавшим в анализ |
| Цикломатическая сложность — Средняя | Среднюю сложность функций проекта | Среднее число независимых путей выполнения по всем функциям. Чем выше значение, тем сложнее код для понимания и тестирования |
| Цикломатическая сложность — Максимальная | Сложность самой сложной функции проекта | Максимальное значение цикломатической сложности среди всех функций |
Как считается изменение (тренд)¶
Рядом со значением каждой метрики показывается процент изменения:
- Если диапазон дат не выбран — сравниваются два последних отчёта: последний с предпоследним.
- Если диапазон дат выбран — сравниваются последний и первый отчёты в выбранном периоде, то есть тренд показывает суммарное изменение за период.
Формула: (новое значение − старое значение) / старое значение × 100, результат округляется до целых процентов. Если изменения нет, индикатор не отображается.
Окраска тренда¶
- Для количества строк кода и количества функций рост — нейтральное событие (проект развивается), индикатор информационный.
- Для цикломатической сложности рост — негативное событие: увеличение средней или максимальной сложности означает, что код становится труднее сопровождать.
Фильтры и параметры¶
| Фильтр | Описание | По умолчанию |
|---|---|---|
| Ветка | Отчёты отбираются по ветке, для которой выполнялся анализ. Можно выбрать ветку или тег | Ветка проекта по умолчанию |
| Период дат | Диапазон «с — по»; учитываются отчёты, созданные в этом периоде. Дата окончания не может быть в будущем | Не задан (показываются все отчёты по ветке) |
Выбранные фильтры сохраняются в адресе страницы — ссылкой с настроенными фильтрами можно поделиться с коллегами.
Как читать результаты¶
- Стабильный рост LOC при стабильной средней сложности — нормальное развитие проекта.
- Рост средней цикломатической сложности — сигнал к рефакторингу: новые изменения усложняют код.
- Высокая максимальная сложность — в проекте есть отдельная функция-«рекордсмен», которую стоит декомпозировать в первую очередь.
- Резкий скачок любой метрики на графике — повод посмотреть, какие изменения попали в кодовую базу между соседними отчётами (каждый отчёт привязан к коммиту).