Вы никогда не должны реорганизовывать свой код из-за ощущения, что улучшение чисел, выбрасываемых метрикой, хорошо для вашего кода.Вместо того, чтобы идти на цифры и навороченные отчеты (я видел, что это сделано к сожалению), вы должны стремиться понять метрику и то, почему она используется в первую очередь.
Цикломатическая сложность - простая математическая мера, которая только устанавливаетмного разных путей, по которым ваш код может выполнить, если все его ветви перемещены.Так что да, высокая цикломатическая сложность действительно указывает на то, что ваши тесты могут стать более сложными.Но иногда просто не существует более простого способа написания кода с высоким уровнем CC и огромными тестами.Вам просто нужно знать, когда это справедливая практика и когда что-то не так с вашим дизайном.С другой стороны, уменьшение CC путем разбиения кода на методы вовсе не облегчает задачу тестирования, поскольку код должен рассматриваться в любом случае.Это просто число, которое будет выглядеть «красивее».
Примите во внимание следующее: вам поручено разработать код, который реагирует на нажатия клавиш и выполняет некоторую задачу в зависимости от того, какая клавиша нажата.Устройство имеет только фиксированное количество кнопок, что означает, что программное обеспечение должно быть исчерпывающим и не должно быть расширяемым (возьмите этот шаблон команд).
Вы можете написать простое утверждение switch
, котороебудет легко читать, вызывая один метод на нажатие кнопки.Это был бы хороший способ быстро и эффективно решить эту задачу.Но контроль над способом получения нажатия клавиш был бы ужасен.Вы должны разделить код?Зачем?Я имею в виду, что он читабелен, отлично справляется со своей задачей, и независимо от того, что вы делаете, ваши тесты все равно должны учитывать каждое нажатие кнопки.Так что рефакторинг не принесет никакой пользы, кроме уменьшения этого числа.
Мой совет - узнать, когда цикломатическая сложность является значимым показателем, а когда нет.Кроме того, попробуйте некоторые советы по реорганизации Micheal из его сообщения в блоге .У него есть твердый совет.