Джон Скит в значительной степени кратко ответил на вопрос. Я хотел бы добавить, что в моем опыте работы с языками высокого уровня, такими как C #, ценность измерения цикломатической сложности снижается из-за значения, которое синтаксические сахарные пакеты, такие как LINQ, добавляют в разработку.
За последние десять лет, по мере развития языков, многие в сети проиллюстрировали сильную корреляцию между цикломатической сложностью и строками кода, заставляя многих из них задуматься о том, какую ценность на самом деле приносит такая мера. Другой способ взглянуть на это состоит в том, что девальвация CC как меры качества кода на самом деле является подтверждением важности читабельности, поскольку одно часто является обратным другому.
Например, если я помещаю условное в цикл foreach, условное вычисляется как мой код, и подсчитывается соответствующее количество путей кода. С другой стороны, если я применяю дерево функций к коллекции, которую я перебираю (например, Where (evalStr => evalStr == origStr), я перемещаю условное выражение за пределы цикла в код, сгенерированный компилятором. по-прежнему такое же количество ветвей, однако условные выражения не являются частью цикла, но CC увеличивается за пределы цикла foreach с «штрафами» за использование анонимных методов (лямбда-выражений и делегатов) поверх фактического числа ветвей. Функция где позволяет предварительно подготовить итеративную коллекцию, чтобы цикл выполнялся только в случае необходимости.
Однако код гораздо более читабелен.
Наконец, если кто-то решит, что булево выражение, используемое внутри функции LINQ IQueryable, не нуждается в модульном тестировании, якобы потому, что если есть исключение, это исключение более высокого порядка (так называемый бизнес-уровень) (неправильное значение) тестирование, неправильный оператор, неправильный операнд и т. д.), в отличие от неидеального использования языка (с использованием переключателя вместо if, если вместо троичного и т. д.), то при измерении цикломатической сложности следует учитывать это: Функция Where () не должна увеличивать мой CC. Измерение цикломатической сложности не поможет сделать лучший код; во всяком случае, это искусственно увеличит склонность разработчика к упрощению, если упрощение не требуется или не требуется.