Перейти к основному содержимому

Отчет сканирования

В верхней части отчета о сканировании пользователь может увидеть общую информацию о сканировании. В этом разделе содержится информация о:

  • Пользователе, который инициировал сканирование
  • Методе сканирования
  • Кодовой базе, которая была сканирована
  • Содержимом сканирования
  • Типе сканирования
  • Схеме правил, которая была использована при сканировании
  • Результатах проверки качества

Результаты сканирования содержат в себе следующие критерии:

  • Результаты проверки качества
  • Пороги качества
  • Отчет в формате PDF, доступный для скачивания
  • Количество дефектов с высоким риском
  • Количество дефектов
  • Количество строк кода и рейтинг
  • Оценка дефектов с высоким риском
  • Метрики кода
  • Результаты модульных тестов
  • Рейтинг безопасности

Рейтинг кода по количеству строк:

  • XS: строк в коде меньше или равно1K
  • S: строк в коде от 1к до 10к
  • M: строк в коде от 10K до 100K
  • L: строк в коде от 100K до 500K
  • XL: строк в коде более 500K

Рейтинг дефектов высокого риска:

  • A: Количество дефектов высокого риска на 1к строк меньше 0.05
  • B: Количество дефектов высокого риска на 1к строк в диапазоне от 0.05 до 0.5
  • C: Количество дефектов высокого риска на 1к строк в диапазоне от 0.5 до 1
  • D: Количество дефектов высокого риска на 1к строк в диапазоне от 1 до 2
  • E: Количество дефектов высокого риска на 1к строк больше 2

Спецификации, Баги, Угрозы Безопасности

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

Спецификации баги и угрозы безопасности включают в себя следующую информацию:

  • Название правила
  • Пользователь, инициировавший проверку
  • Время завершения проверки
  • Тип правил
  • Outbreak lines and corresponding code blocks
  • Правила
  • Тип дефекта
  • Уровень риска
  • Детальное описание
  • Используемый инструмент
  • Время создания
  • Пример исправления

Пользователь может фильтровать найденные дефекты по правилу, уровню риска, и пользователю.

Метрики используемые в отчете проверки

Пользователь может просматривать метрики проверки кода во вкладке.

Раздел содержит в себе следующие метрики:

  • Очки
    • Среднее значение очков по результатам проверки
  • Общие метрики
    • Рейтинг комментариев в коде
    • Количество строк
    • Количество строчек с комментариями
    • Количество длинных функций
    • Количество функций с несколькими переменными
    • Количество длинных файлов
    • Количество категорий
    • Количество пустых классов
    • Количество глобальных переменных
    • Максимальное число уровней вложенности
    • Общая сложности
    • Процент выражений с уровнем вложенности больше трех
  • Сложность
    • Статистика по методам и сложности
    • Статистика по количеству файлов и сложности
  • Файлы
    • Среднее количество срок кода в файле
    • Среднее количество классов в файле
    • Среднее количество методов в файле
    • Количество длинных файлов
    • Количество длинных файлов и длинных строк
  • Классы
    • Категории
    • Классы без методов
    • Количество глобальных переменных
    • Статистика классов
      • Среднее количество методов в классе
      • Среднее количество распространенных методов в классе
      • Среднее количество частных методов в классе
      • Среднее количество статичных методов в классе
      • Среднее количество распространенных переменных в классе
      • Среднее количество частных переменных в классе
      • Классы и соответствующие файлы, включая переменный и методы
    • Функции
      • 10 наиболее часто используемых функций
      • Сверхдлинные функции, содержащие их файлы и соответствующие строчки кода
      • Функции с несколькими параметрами, содержащие их файлы и соответствующие строчки кода
    • Операторы
      • Процентное соотношения всех используемых операторов
      • Максимальная вложенность
        • Уровни
        • Название файла
        • Тип
        • Имя
        • Начальная строчка
        • Конечная строчка

Критерии метрик:

  • Очень длинная функция: более 500 строк
  • Функция с несколькими параметрами: больше 7 параметров
  • Длинные файлы: строк кода в файле больше 800
  • Большой класс: в классе больше 20 функций или переменных
  • Класс без методов: в классе нет функций

Критерии оценки метрик:

  • Рейтинг комментариев в коде (Строк с комментариями/Всего строк)
    • 5: >= 25%
    • 4: [20%, 25%)
    • 3: [10%, 20%)
    • 2: < 10%
  • Очень длинная функция (более 500 строк)
    • 10: <= 0.1%
    • 8: (0.1%, 0.5%]
    • 6: (0.5%, 1%]
    • 4: >1%
    • Если есть функция более 800 строк, то 1 бал будет вычтен и конечного результата
    • Если есть функция более 100 строк, то 2 балла будут вычтены и конечного результата
  • Функция с несколькими параметрами (параметров больше 7)
    • 10: <= 1%
    • 8: (1%, 2%]
    • 6: (2%, 3%]
    • 4: >3%
    • Если есть функция с более чем 8 параметрами, то 1 бал будет вычтен и конечного результата
    • Если есть функция более чем 9 параметрами, то 2 балла будут вычтены и конечного результата
  • Длинные файлы (строк в файле больше 800)
    • 10: <= 4%
    • 8: (4%, 6%]
    • 6: (6%, 8%]
    • 4: >8%
    • Если есть файлы с более чем 900 строчками, то 1 бал будет вычтен и конечного результата
    • Если есть файлы с более чем 1000 строчек, то 2 балла будут вычтены и конечного результата
  • Большой класс (количество функций или переменных больше 200)
    • 10: <= 2%
    • 8: (2%, 3%]
    • 6: (3%, 5%]
    • 4: >5%
    • Если в классе более 22 членов, то 1 бал будет вычтен и конечного результата
    • Если в классе более 25 членов, то 2 балла будут вычтены и конечного результата
  • Пустой класс (класс без функций)
    • 10: <= 5%
    • 8: (5%, 8%]
    • 6: (8%, 10%]
    • 4: >10%
  • Средняя сложность файла (общая сложность/количество файлов)
    • 10: <= 5
    • 8: (5, 8]
    • 6: (8, 10]
    • 4: >10
  • Средняя сложность класса (общая сложность/количество классов)
    • 10: <= 10
    • 8: (10, 20]
    • 6: (20, 30]
    • 4: >30
  • Средняя сложность функции (общая сложность/количество функций. Общая сложность – это сумма сложности всех функций. PHP считает сумму каждого выражения функции, и C++ считает максимальную вложенность внутри каждой ветки функции)
    • 10: <= 5
    • 8: (5, 10]
    • 6: (10, 15]
    • 4: >15
  • Максимальная вложенность
    • 5: <= 4
    • 4: (4, 7]
    • 3: (7, 10]
    • 2: >10
  • Более трех уровней вложенности
    • 10: <= 100
    • 8: (100, 300]
    • 6: (300, 500]
    • 4: >500

Дублирование блоков кода

**
**Пользователь может посмотреть статистику по повторяющимся блокам кода в соответствующем разделе.

Раздел дублирующихся блоков кода содержит следующую информацию:

  • Общее количество дублирующихся блоков кода
  • Общее количество дублирующихся строчек когда
  • Максимальная избыточность
  • Средняя избыточность
  • Максимальная избыточность кода
  • Повторение содержимого блока кода и файла, содержащего блок

Пример вычисления дублирующихся блоков кода: есть два набора повторяющихся блоков, одна группа содержит два блока повторяющегося кода, количество посторяющихся строк – 60, и другая группа с тремя блоками повторяющегося кода и 40 повторяющимися строчками, тогда общее число повторяющихся блоков (2+3); общее число повторяющихся строк 240 ((60*2)+(40*3)); максимальная избыточность 3 (max(2,3)); средняя избыточность 2.5 (avg(2 ,3)); максимальная избыточность кода 60 (max(60,40)).

Удобство поддержки кода

Пользователь может посмотреть статистику удобства поддержки кода в соответствующей вкладке.

Термины, используемые в данном разделе:

  • Индекс удобства поддержки: сокращенно MI, чем меньше значение, тем меньше индекс удобства поддержки.
  • Цикломатическая сложность: чем больше значение, тем сложнее функция.
  • Функции с высокой цикломатической сложностью: функции с цикломатической сложностью больше 5

Индекс удобства поддержки, используется для того, чтобы измерить сложность написанного кода. Рассчитывается по формуле:
MI = MAX(0, (171 — 5.2 * ln(HV) — 0.23 * CC — 16.2 * ln(LoC)) * 100 / 171), где

  • HV – Halstead Volume, вычислительная сложность. Чем больше операторов, тем больше значение этой метрики
  • Cyclomatic Complexity – цикломатическая сложность, показывает структурную сложность кода, т.е. количество различных ветвей в коде. Чем больше этот показатель, тем больше тестов должно быть написано, для полного покрытия кода.
  • LoC – Lines of Code, количество строк кода

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

  • [0,10]: Слабая поддерживаемость. Сложный код.
  • (10, 20]: Нормальная поддерживаемость
  • (20, 100]: Хорошая поддерживаемость

При подсчете емкости кода, ведется подсчет конструкций, используемых в коде, ниже представлены примеры измерений:

  • n1: Число уникальных операторов, число разных операндов (операторов)
  • n2: Число уникальных операндов, число разных операндов (операторов)
  • N1: Общее число появления операторов, общее число появления всех операндов (операторов)
  • N2: Общее число появления операндов, общее число появления всех операндов (операторов)
  • Словарь кода: n1 + n2, объем словаря
  • Длинна: N1+N2, длинна
  • Объем: длинна * Log2 словарь кода, емкость

Пример:

function tFunc(opt) {

let result = opt + 1;

return result;

}

- n1: function, let, =, +, return
- n2: tFunc, opt, result, 1
- N1: function, let, =, +, return
- N2: tFunc, opt, result, opt, 1, result
- Vocabulary = n1 + n2 = 9
- length = N1 + N2 = 11
- Volume = length \* Log2 Vocabulary = 34.869

Цикломати́ческая сло́жность програ́ммы (англ. cyclomatic complexity of a program) — структурная (или топологическая) мера сложности компьютерной программы, обозначается символами VG или M. При вычислении цикломатической сложности используется граф потока управления программы. Узлы графа соответствуют неделимым группам команд программы, они соединены ориентированными рёбрами, если группа команд, соответствующая второму узлу, может быть выполнена непосредственно после группы команд первого узла. Цикломатическая сложность может быть также вычислена для отдельных функций, модулей, методов или классов в пределах программы.

Определение высокой цикломатической сложности:

  1. PHP/C++/OC/Python: >=20
  2. JS: >=10

Если маршрут от конечной вершины графа до начальной добавляется в граф управления потоками, то образуется петля. Цикломатическая сложность – это число линейнонезависимых петель внутри этой замкнутой петли.

cyclomatic complexity 2

Как показано на рисунке, есть две линейнонезависимые петли:

  • e1 → e2 → e
  • e1 → e3 → e

Поэтому цикломатическая сложность равна 2.