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

Раздел 13. Принципы анализа кода на сервере SonarQube

По умолчанию SonarQube считает, что порог качества любого проекта пройден, если:

image-20200812130643358

Эта методология оценки технического долга называется «SQALE» («Software Quality Assessment based on Lifecycle Expectations»).

Стандартный профиль качества SonarQube использует следующие значения метрик для определения того, что код успешно прошел проверки:

  • 0 новых багов
  • 0 новых уязвимостей
  • коэффициент технического долга на новом коде <= 5%
  • покрытие нового кода не ниже 80%

Команда «SonarSource» определила «семь смертных грехов разработчиков» , увеличивающих технический долг:

  • баги и потенциальные баги
  • нарушение стандартов кодирования
  • дублирование кода
  • недостаточное покрытие модульными тестами
  • плохое распределение сложности
  • спагетти-дизайн
  • недостаточно или слишком много комментариев

Платформа «SonarQube» предназначена для того, чтобы помогать бороться с этими семью грехами.

Выглядит это так:

image-20200812130714268

Серебряная Пуля советует добавить еще 3 условия:

Проект считается некачественным, когда

  • существуют новые замечания с признаком «Блокирующая»;
  • общая запутанность функций превышает 20;
  • объем копипаста превышает 20%.

Условия выглядят так:

image-20200812130726457

Семантическое описание метрик

Метрика Семантика метрики
Дублирование Копипаст кода. Фактически означает либо непонимание технологии разработки либо отражает некачественную архитектуру. Большой процент дублирования плох еще и тем, что, если в одном из участков обнаружится баг, его придется исправлять во всех дублирующихся участках, что «дорого по времени» и есть опасность не исправить во всех дублях.
Уязвимость Решение не безопасно и не закрыто от утечек данных
Сложность Так называемые цикломатическая или когнитивные сложности, то есть запутанность кода и использование «длинных» функций – на английский манер называется «brain overload». В итоге сложный код не может быть доработан никем, кроме его автора, да и он с течением времени не сможет понять «как это работает» и почему.
Блокирующее замечание Блокирующие замечания – явный баг кодирования, таких правил не слишком много в коде каждого языка – но соблюдать их стоит в любом случае.