Вы считаете цикломатическую сложность полезной мерой? - PullRequest
53 голосов
/ 14 апреля 2009

Я играл с измерением цикломатической сложности большой базы кода.

Цикломатическая сложность - это число линейно независимых путей в исходном коде программы, и существует множество бесплатных инструментов для вашего языка.

Результаты интересные, но не удивительные. То есть части, которые я знаю, были самыми волосатыми, были на самом деле самыми сложными (с рейтингом> 50). Но что я нахожу полезным, так это то, что каждому методу присваивается конкретный номер «плохости», на который я могу указать, когда решаю, с чего начать рефакторинг.

Вы используете цикломатическую сложность? Какой самый сложный фрагмент кода вы нашли?

Ответы [ 15 ]

1 голос
/ 09 сентября 2009

Да, мы используем его, и я тоже нашел его полезным. У нас есть большая база унаследованного кода, и мы обнаружили высокую цикломатическую сложность. (387 в одном методе!). CC указывает вам непосредственно на области, которые стоит реорганизовать. Мы используем CCCC для кода C ++.

1 голос
/ 09 июня 2009

После понимания того, что это значит, я начал использовать его "на пробной" основе. До сих пор я обнаружил, что это полезно, потому что обычно высокий CC идет рука об руку с Arrow Anti-Pattern , что делает код труднее для чтения и понимания. У меня пока нет фиксированного номера, но NDepend предупреждает обо всем выше 5, что выглядит как хорошее начало для исследования методов.

1 голос
/ 26 мая 2009

+ 1 для значений списка совпадений kenj0418.

Худшее, что я видел, было 275. Было еще несколько человек старше 200, которые мы смогли реорганизовать до гораздо меньших CC; они все еще были высокими, но это подтолкнуло их снова в очередь У нас не было особой удачи с 275 зверями - это была (вероятно, до сих пор) сеть операторов if и switch, которая была слишком сложной. Это только реальная ценность в качестве шага, когда они решают восстановить систему.

Исключениями для высоких CC, которые мне нравились, были фабрики; IMO, они должны иметь высокий CC, но только если они только создают и возвращают простые объекты.

1 голос
/ 14 апреля 2009

Боюсь, что для языка проекта, для которого мне больше всего хотелось бы таких показателей, как LPC , на самом деле не так много бесплатных инструментов для его создания. Так что нет, это не очень полезно для меня.

1 голос
/ 14 апреля 2009

Я не использовал его некоторое время, но в предыдущем проекте это действительно помогло определить потенциальные проблемы в чужом коде (не мой, конечно!)

Найдя область для проверки, я быстро обнаружил многочисленные проблемы (также много GOTOS, вы могли бы поверить!) С логикой и действительно странным кодом WTF.

Цикломатическая сложность отлично подходит для показа областей, которые, вероятно, имеют большое значение и, следовательно, нарушают единственную ответственность. В идеале они должны быть разбиты на несколько функций

...