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

Типы и важность диагностик

Каждая диагностика относится к определенному типу и имеет определенную важность.
Для того, чтобы выбрать тип и важность для создаваемой диагностики, ниже приведено их подробное описание.

Важность

Важность диагностики указывается в аннотации @DiagnosticMetadata параметром severity и принимает значения типа DiagnosticSeverity.

Возможные варианты (общие случаи, если не сказано иного):

Блокирущий (BLOCKER)

Ошибки, приводящие приложение в нерабочее состояние. Используется только для Ошибок и Уязвимостей.

Критичный (CRITICAL)

Неправильно работающая ключевая бизнес-логика, дыры в системе безопасности, проблемы, приводящие к временной неработоспособности приложения или его компонент. Используется только для Ошибок и Уязвимостей.

Важный (MAJOR)

Часть основной бизнес-логики работает некорректно, но есть обходные пути либо низкокачественный код, приводящий к проблемам производительности, эффективности, плавающим ошибкам. Используется только для Ошибок и Дефектов кода.

Незначительный (MINOR)

Не нарушается бизнес-логика приложения, плавающая ошибка, низкокачественный, слабоподдерживаемый код, ошибки в редкоиспольземой функциональности. Используется только для Ошибок и Дефектов кода.

Информационный (INFO)

Тривиальная ошибка, не касающаяся бизнес-логики приложения, плохо воспроизводимая проблема, малозаметная, не оказывающая никакого влияния на общее качество продукта. Используется только для Дефектов кода.

Тип диагностики

Тип диагностики указывается в аннотации @DiagnosticMetadata параметром type и принимает значения типа DiagnosticType.

Уязвимость (VULNERABILITY)

К этому типу диагностик относятся ошибки безопасности. Они всегда должны иметь важность Блокирующий в случае наличия известного способа компрометации, или Критичный если его нет либо ценность утечки не высока.
Примеры

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

Потенциальная уязвимость (SECURITY_HOTSPOT)

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

Примеры

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

Дефект кода (CODE_SMELL)

Дефект кода не приводит к ошибкам в программе, но усложняет дальнейшую разработку, возможность адаптировать и расширять функционал. Может иметь любую важность, кроме Блокирующий и Критичный. Требует исправления по мере важности в процессе рефакторинга.

Ошибка (ERROR)

К данной категории относятся реальные ошибки при работе пользователя. Они могут быть любой важности, кроме Информационный, при этом:

  • Блокирующий означает отсутствие известного способа обхода, необходимо срочно исправить. Примером такой ошибки является некомпилиремый код или обращение к несуществующему методу.
  • Критичный означает наличие известного способа обхода (например отключения функциональности с ошибкой), но требующий максимально оперативного исправления.