Цикломатическая сложность для нескольких операторов возврата

Я читал о цикломатической сложности и множественных операторах возврата, но я немного сбит с толку из-за разных мнений о множественных операторах возврата.

Прежде всего, во время расчета цикломатической сложности я должен считать каждый оператор возврата конечной точкой, которая, как я думаю, увеличивает сложность? В формуле (M = E - N + 2*P), когда я добавляю оператор return, он увеличивается на единицу, верно?

Предложения Guard, которые используются для простых проверок работоспособности, добавляют другой способ вместо вложенных предложений if для возврата как можно скорее. Однако это добавляет в код больше операторов return и увеличивает CC?

Существуют ли какие-либо общие рекомендации по использованию защитных предложений и множественных операторов возврата с точки зрения CC?


person Deniz    schedule 21.05.2014    source источник
comment
Я думаю, это интересный вопрос. Однако подумайте о том, чтобы изменить его формулировку - некоторым людям не понравится Ваше мнение о..., и они пометят ваш вопрос как основанный на мнении. Уточните, что вы спрашиваете не о мнении, а о фактах :)   -  person Honza Zidek    schedule 21.05.2014
comment
Я так и думал, пока писал вопрос. :) Спасибо, Хонза.   -  person Deniz    schedule 21.05.2014
comment
Использование if вам не поможет, так как они также увеличивают цикломатическую сложность, так как измеряют различные возможные способы прохождения вашего кода.   -  person Uwe Allner    schedule 21.05.2014
comment
Уве, вы правы, но мы заранее не знаем путь потока вызовов (зависит от параметров и т.д.). Насколько я понимаю, CC не интересует что-то вроде анализа лучшего/среднего/худшего случая (из-за сложности вычислений). Вы сказали, что он измеряет различные возможные способы через ваш код, но это больше похоже на предположение, чем на формулу (я имею в виду, что если у вас есть недопустимый параметр, вы должны вернуться как можно скорее, но что, если данные действительны?).   -  person Deniz    schedule 21.05.2014
comment
Расчет CC не может знать, как будет проходить код, он просто измеряет возможности (даже не вероятности, поскольку сложность ниже, когда вы покидаете код раньше). Речь идет о тестируемости и работоспособности (множество -возможностей ;o), так как вы должны покрыть все способы, например. в ваших модульных тестах, независимо от того, как часто они могут использоваться. Считается, что они могут быть использованы.   -  person Uwe Allner    schedule 21.05.2014
comment
возможный дубликат Cyclomatic Complexity в части кода с несколькими выходами баллы   -  person Dave Schweisguth    schedule 21.05.2014


Ответы (1)


Хотя было предложено много метрик, сложность программного обеспечения оказалось нелегко измерить. Несмотря на то, что цикломатическая сложность очень широко используется, она также имеет свои ограничения. Ниже приведены ссылки на некоторые академические критические замечания.

Чтобы дать конкретный ответ на вопрос, я не знаю ни одной такой передовой практики. Должен сказать, что считаю CC в лучшем случае приблизительным показателем с моей стороны. Соблюдение условий охраны было бы для меня важнее. Надеюсь это поможет.

person henginy    schedule 21.05.2014