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

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

Каждая находка несёт оценку времени на устранение — она показывается в сводках долга и отчётах. Каждое правило объявляет собственную базовую оценку — среднее усилие на типичную находку такого рода. Когда находка также несёт значение метрики и порог, базовое время масштабируется по тому, насколько метрика превышает порог: base * max(1, ln(overshoot)). Небольшие превышения получают время, близкое к базовому; экстремальные -- намного больше.

Эта страница перечисляет базовую оценку каждого правила рядом друг с другом, чтобы читатель мог спросить, действительно ли SQL-инъекция заслуживает вчетверо больше времени, чем отладочный вывод. Она сгенерирована из тех же констант, которые объявляют сами правила -- см. src/Analysis/Evidence/Prioritization/Debt/RemediationTimeRegistry.php.

Правила сложности (Complexity)

Правило ID Минуты
Cyclomatic Complexity complexity.ccn 30
Cognitive Complexity complexity.cognitive 30
NPath Complexity complexity.npath 30
WMC complexity.wmc 30

Правила связанности (Coupling)

Правило ID Минуты
CBO coupling.cbo 45
ClassRank coupling.class-rank 30
Instability coupling.instability 30
Distance coupling.distance 30
Непривязанный неймспейс фреймворка coupling.unmatched-framework-namespace 10

Правила сцепления (Cohesion)

Правило ID Минуты
LCOM cohesion.lcom 45

Правила дизайна (Design)

Правило ID Минуты
DIT (глубина наследования) design.dit 30
NOC design.noc 20
Покрытие типами параметров design.type-coverage.param 15
Покрытие типами возврата design.type-coverage.return 15
Покрытие типами свойств design.type-coverage.property 15
Data Class design.data-class 30
God Class design.god-class 120

Правила размера (Size)

Правило ID Минуты
Class Count size.class-count 30
Method Count size.method-count 20
Property Count size.property-count 15

Правила сопровождаемости (Maintainability)

Правило ID Минуты
Maintainability Index maintainability.mi 60

Code Smell правила

Правило ID Минуты
Constructor Over-injection code-smell.constructor-overinjection 60
Boolean Argument code-smell.boolean-argument 10
Debug Code code-smell.debug-code 5
Empty Catch code-smell.empty-catch 10
eval() code-smell.eval 15
exit()/die() code-smell.exit 10
goto code-smell.goto 15
Superglobals code-smell.superglobals 15
Error Suppression code-smell.error-suppression 10
count() in Loop code-smell.count-in-loop 10
Long Parameter List code-smell.long-parameter-list 20
Unreachable Code code-smell.unreachable-code 10
Unused Private code-smell.unused-private 15
Identical Sub-expression code-smell.identical-subexpression 15

Правила безопасности (Security)

Правило ID Минуты
Hardcoded Credentials security.hardcoded-credentials 30
SQL Injection security.sql-injection 60
XSS security.xss 45
Command Injection security.command-injection 60
Sensitive Parameter security.sensitive-parameter 10

Правила дублирования (Duplication)

Правило ID Минуты
Code Duplication duplication.clone 15

Архитектурные правила

Правило ID Минуты
Circular Dependencies architecture.circular-dependency 120
Layer Violations architecture.layer-violation 15
Unassigned Classes architecture.unassigned-class 15

Правила обнаружения файлов (Discovery)

Правило ID Минуты
Непривязанное исключение discovery.unmatched-exclude 10

Правила подавления (Suppression)

Правило ID Минуты
Конфигурация подавлений suppression.configuration 10

Правила аннотаций

Правило ID Минуты
Directive annotation.directive 15

Вычисляемые метрики

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

Правило ID Минуты
Health: Complexity health.complexity 15
Health: Cohesion health.cohesion 15
Health: Coupling health.coupling 15
Health: Typing health.typing 15
Health: Maintainability health.maintainability 15
Health: Overall health.overall 15
Computed Metric computed 15

Почему эти значения отличаются от пороговых значений по умолчанию

Эта страница -- про калибровку, а не про обнаружение. Пороговые значения по умолчанию говорят, когда правило срабатывает; эта страница говорит, сколько времени ожидаемо занимает исправление одного случая. coupling.class-rank масштабирует свои собственные пороги по размеру проекта и исключён из масштабирования по превышению, которое модель этой страницы применяет ко всем остальным magnitude-каналам -- см. ClassRank, почему.