Аналитика дубликатов кода¶
Модуль Аналитика дубликатов кода находит повторяющиеся фрагменты кода (клоны) в проекте и показывает, какая доля кодовой базы дублируется и как этот показатель меняется со временем. Дублирование — один из главных источников ошибок сопровождения: исправление в одном месте легко забыть продублировать в остальных. Модуль помогает контролировать уровень дублирования и отслеживать эффект от рефакторинга. Поддерживаются различные языки программирования (JavaScript, TypeScript, Java, C#, Python, Ruby, PHP, Go, C++, Swift, Kotlin, Scala, Rust и другие).
Как запускается анализ¶
Анализ выполняется автоматически в CI/CD-пайплайне проекта: при каждом прогоне пайплайна с подключённым шагом анализа формируется новый отчёт по текущему состоянию ветки. Каждый отчёт фиксирует ветку, коммит и автора коммита, для которых выполнялся анализ.
Отдельных действий от пользователя для построения отчёта не требуется — достаточно, чтобы шаг анализа был подключён в пайплайн проекта.
Для подключения шага поиска дубликатов в пайплайн необходимо выполнить следующие шаги:
-
В меню проекта выберите пункт Сборка и его подпункт Редактор конвейера.
-
На странице Редактор конвейера представлена кнопка DuplicateCheck. Она копирует шаблон для поиска дубликатов кода в буфер обмена. Шаблон включает в себя фрагмент для поиска дубликатов кода code-duplication с вызовом скрипта analyze.sh. Содержимое шаблона можно вставить в конфигурационный файл пайплайна .appsec_code-ci.yml.
-
Результаты выполнения скрипта выводятся в лог пайплайна и сохраняются в форматах HTML, JSON и CSV. Созданные отчёты сохраняются в артефактах выполненного задания в каталоге code-duplication-reports. Там же сохраняется лог анализа.
-
После завершения выполнения скрипта метрики по дубликатам доступны в пользовательском интерфейсе.
Где смотреть результаты¶
Раздел доступен на уровне проекта:
Проект → боковое меню → Анализ → Аналитика дубликатов кода
Страница называется Отчет по дубликатам и содержит:
- Фильтры — выбор ветки и диапазона дат.
- Блок Последний отчёт от {дата} — таблица показателей самого свежего отчёта по выбранной ветке. Рядом с датой выводится ссылка на детальный файл отчёта (CSV) со списком найденных дубликатов — по ней можно посмотреть, какие именно фрагменты и в каких файлах дублируются.
- Блок Срез — таблица изменений показателей за выбранный период дат.
Если данных нет, в таблицах отображается No data, а вместо даты последнего отчёта — сообщение Нет данных о последнем отчёте.
Метрики и как они считаются¶
Последний отчёт¶
| Показатель | Что показывает |
|---|---|
| Количество просканированных файлов | Сколько файлов проекта попало в анализ |
| Количество клонов | Сколько повторяющихся блоков кода найдено |
| Дублированные строки | Сколько строк кода входит в найденные клоны |
| % дублирования | Доля дублированных строк от общего числа строк: дублированные строки / все строки × 100 |
| Новые клоны | Сколько клонов появилось по сравнению с предыдущим анализом |
| Новые дублированные строки | Сколько дублированных строк добавилось по сравнению с предыдущим анализом |
Срез (изменения за период)¶
Срез рассчитывается, только когда выбран период дат и в него попадает не менее двух отчётов. Сравниваются первый и последний отчёты периода:
| Показатель | Как считается |
|---|---|
| Всего отчетов в выборке | Число отчётов, попавших в выбранный период по выбранной ветке |
| Прирост/убыль клонов | Количество клонов в последнем отчёте минус в первом; знак «+» — дублирование выросло, «−» — снизилось |
| Прирост/убыль дублированных строк | Дублированные строки в последнем отчёте минус в первом |
| Изменение процента дублирования | Процент дублирования в последнем отчёте минус в первом, с точностью до сотых |
| Новые клоны | Сумма новых клонов по всем отчётам периода — сколько всего дублей добавлялось за период |
| Новые дублированные строки | Сумма новых дублированных строк по всем отчётам периода |
Фильтры и параметры¶
| Фильтр | Описание | По умолчанию |
|---|---|---|
| Ветка | Отчёты отбираются по ветке, для которой выполнялся анализ. Можно выбрать ветку или тег | Ветка проекта по умолчанию |
| Период дат | Диапазон с — по; влияет на блок Срез. Блок Последний отчёт всегда показывает самый свежий отчёт по ветке независимо от периода | Не задан (срез не рассчитывается) |
Выбранные фильтры сохраняются в адресе страницы — ссылкой можно поделиться.
Как читать результаты¶
- % дублирования — главный показатель здоровья кодовой базы: следите за его трендом, а не только за абсолютным значением.
- Отрицательный «прирост/убыль» в срезе — рефакторинг работает: дублирования стало меньше.
- Большие «новые клоны» при стабильном итоговом проценте — дубли регулярно добавляются и удаляются; стоит обратить внимание на практики код-ревью.
- Конкретные места дублирования смотрите в детальном файле отчёта по ссылке рядом с датой последнего отчёта.