Описание тега cyclomatic-complexity

Цикломатическая сложность - это число, используемое для выражения сложности исходного кода (например, метода). Он рассчитывается на основе количества различных возможных путей прохождения исходного кода. Низкая цикломатическая сложность является одним из факторов улучшения читаемости, ремонтопригодности и тестируемости кода.

Цикломатическая сложность (или условная сложность) отображает теоретические метрики программного обеспечения для измерения сложности программы (или метода, функции, процедуры...). Он был определен Томасом Дж. МакКейбом в 1976 году.

Рассчитывается по следующей формуле:

V(G) = P + 1

где V(G) = цикломатическая сложность,
P = количество узлов предиката решения (если, еще, пока и т. д.)

Т.е. изначально цикломатическая сложность каждого метода определяется как 1. Каждая инструкция потока управления добавляет 1 к числу сложности метода.

Поскольку существует некоторая корреляция между хорошим качеством кода и низким уровнем сложности, методы с высокой цикломатической сложностью (например, от 10 до 15) считаются трудными для чтения и понимания. Низкое количество цикломатической сложности является хорошим показателем читабельного, (многократно) используемого, надежного и функционального стиля кодирования. В связи с этим рекомендуется такие методы высокой сложности разбивать на более мелкие.

Для измерения необходимого количества модульных тестов для получения полного покрытия кода лучше использовать расширенную цикломатическую сложность или сложность NPath. Следовательно, Cyclomatic Complexity МакКабба недостаточно точен, потому что он не может различать разные условные операторы (структуры потока управления). Также не учитывается уровень вложенности различных структур потока управления.