На работе мы изучаем распространенные проблемы, которые приводят к высокой цикломатической сложности. Например, наличие большого оператора if-else может привести к высокой цикломатической сложности, но это можно решить, заменив условные операторы полиморфизмом. Какие еще примеры вы нашли?
Общие причины цикломатической сложности и их решения
Ответы (2)
См. определение цикломатической сложности от NDepend.
Глубина вложенности также является отличным показателем кода.
Цикломатическая сложность — популярная метрика процедурного программного обеспечения, равная количеству решений, которые могут быть приняты в процедуре. Конкретно, в C# CC метода равен 1 + {количество следующих выражений, найденных в теле метода}:
если | пока | для | foreach | случай | по умолчанию | продолжить | перейти | && | || | поймать | тернарный оператор ?: | ??
Следующие выражения не учитываются при вычислении CC:
еще | делать | переключатель | попробовать | используя | бросить | наконец | вернуться | создание объекта | вызов метода | доступ к полю
Адаптированная к миру OO, эта метрика определяется как для методов, так и для классов/структур (как сумма ее методов CC). Обратите внимание, что CC анонимного метода не учитывается при вычислении CC его внешнего метода.
Рекомендации: Методы, в которых CC выше 15, трудно понять и поддерживать. Методы, в которых CC выше 30, чрезвычайно сложны и должны быть разделены на более мелкие методы (за исключением случаев, когда они автоматически генерируются инструментом).
Еще один пример того, как избежать использования большого количества «если», — это реализация конечного автомата. Поскольку события запускают переходы, условные операторы более понятным образом неявны с этими переходами, которые изменяют состояние System. Управление проще.
Оставьте вам ссылку, где упоминаются некоторые из его преимуществ:
http://www.skorks.com/2011/09/why-developers-never-use-state-machines/