По сути, он хочет быть предиктором риска изменения метода.
В нем есть два фактора:
- сложность кода метода (
cyclomatic complexity
) или количество путей принятия решений в указанном методе: comp(m)
. - насколько тестируем этот метод (с помощью автоматических тестов, предоставляемых инструментом покрытия кода).В основном это измеряет, сколько решений в указанном коде автоматически тестируется.
Если метод имеет 100% охват, риск изменения считается равным только сложности метода: C.R.A.P.(m) = comp(m)
.
Если метод имеет 0%охват, чем риск изменения, считается полиномом второй степени в меру сложности (из-за того, что если вы не можете протестировать изменение пути к коду, это увеличивает риск поломки): C.R.A.P.(m) = comp(m)^2 + comp(m)
Надеюсь, этопоможет вам.
Я только что заметил, что даю только половину ответа (прочитанная часть).Как это улучшить, должно быть достаточно понятно, если вы понимаете причины индекса.Но гораздо более четкое объяснение дано в ответе @ edorian .
Короткая история такова: пишите тесты до тех пор, пока вы не достигнете почти 100% покрытия, а после этого реорганизуйте методы для уменьшения цикломатической сложности,Вы можете попытаться провести рефакторинг до проведения тестов, но в зависимости от реальной сложности метода вы рискуете ввести поломку, если не можете объяснить (из-за сложности) все последствия изменений, которые вы делаете.