Раздел 13. Принципы анализа кода на сервере SonarQube
По умолчанию SonarQube считает, что порог качества любого проекта пройден, если:
Эта методология оценки технического долга называется «SQALE» («Software Quality Assessment based on Lifecycle Expectations»).
Стандартный профиль качества SonarQube использует следующие значения метрик для определения того, что код успешно прошел проверки:
- 0 новых багов
- 0 новых уязвимостей
- коэффициент технического долга на новом коде <= 5%
- покрытие нового кода не ниже 80%
Команда «SonarSource» определила «семь смертных грехов разработчиков» , увеличивающих технический долг:
- баги и потенциальные баги
- нарушение стандартов кодирования
- дублирование кода
- недостаточное покрытие модульными тестами
- плохое распределение сложности
- спагетти-дизайн
- недостаточно или слишком много комментариев
Платформа «SonarQube» предназначена для того, чтобы помогать бороться с этими семью грехами.
Выглядит это так:
Серебряная Пуля советует добавить еще 3 условия:
Проект считается некачественным, когда
- существуют новые замечания с признаком «Блокирующая»;
- общая запутанность функций превышает 20;
- объем копипаста превышает 20%.
Условия выглядят так:
Семантическое описание метрик
Метрика | Семантика метрики |
---|---|
Дублирование | Копипаст кода. Фактически означает либо непонимание технологии разработки либо отражает некачественную архитектуру. Большой процент дублирования плох еще и тем, что, если в одном из участков обнаружится баг, его придется исправлять во всех дублирующихся участках, что «дорого по времени» и есть опасность не исправить во всех дублях. |
Уязвимость | Решение не безопасно и не закрыто от утечек данных |
Сложность | Так называемые цикломатическая или когнитивные сложности, то есть запутанность кода и использование «длинных» функций – на английский манер называется «brain overload». В итоге сложный код не может быть доработан никем, кроме его автора, да и он с течением времени не сможет понять «как это работает» и почему. |
Блокирующее замечание | Блокирующие замечания – явный баг кодирования, таких правил не слишком много в коде каждого языка – но соблюдать их стоит в любом случае. |