Привет! Продолжаем осваивать принципы создания качественного ПО! И сегодня мы поговорим о том, как можно измерить сложность исходного кода программы, который Вы написали, а также о том, зачем вообще нужно измерять сложность кода.
Ранее в материале «Этапы разработки программы – как создаются и проектируются программы?» мы рассмотрели общие этапы создания качественных и крупных программ. Сейчас мы поговорим, на самом деле, об одном из самых главных аспектов создания качественного ПО, а именно об управлении сложностью внутренней реализации программы, а точнее о сложности кода, т.е. насколько сложный код Вы пишите.
Зачем измерять сложность кода программы?
Как я уже отметил, управление сложностью – это важная часть создания качественной программы, данный процесс заключается в снижении сложности внутренней реализации программы, включая уменьшение сложности кода. Если Вы будете уменьшать сложность кода программы, Вам будет легче сопровождать этот код, и тем самым в нем будет меньше ошибок, что как раз и способствует повышению качества разрабатываемой программы.
Снижение сложности кода — это действия, направленные на сведение к минимуму объема сложного кода, с которым Вам необходимо работать в каждый конкретный момент времени. С практической стороны это выглядит, как, например, разбиение крупных процедур или методов, в которых много кода, на более мелкие. Иными словами, те участки кода, которые можно вынести в отдельные функции, процедуры или методы, необходимо заменять на вызов соответствующих функций, процедур и методов, которые были созданы специально для выполнения этого участка кода. Кроме того, существуют и другие приемы уменьшения сложности кода.
Отсюда и возникает этот очевидный вопрос — как измерить сложность кода, который мы написали в процессе программирования, чтобы узнать, сложный он или нет?
Способы измерения сложности исходного кода программы
Одним из основных и, главное, простых способов оценки сложности кода является способ, который заключается в простом подсчете в коде конкретных методов и процедур, так называемых «Точек принятия решения».
Суть в следующем, Вы считаете, сколько в отдельно взятом методе или процедуре «Точек принятия решения», и если итоговое количество превышает рамки допустимого предела, то код подлежит переконструированию.
К «Точкам принятия решения» относятся следующие операторы:
- if
- while
- repeat
- for
- and
- or
- Каждый вариант CASE в SWITCH или в SELECT CASE.
Так вот, ориентируйтесь на следующие диапазоны значений количества точек принятия решения:
- До 5 – все хорошо;
- От 5 до 10 – можно начать думать о способах упрощения кода;
- Больше 10 – необходимо вынести часть кода в отдельные функции, процедуры и методы.
Отсюда следует, что если Ваш метод или процедура содержит, например:
- 10 – if;
- 5 – while;
- 3 – and;
- 2 – or.
Итого 10 + 5 + 3 + 2 = 20, значит, этот метод или процедуру необходимо переделать, создать для определенных участков кода отдельные функции, процедуры и методы, а в текущем коде просто вызывать их.
Тем самым, Вы уменьшаете сложность кода, с которым Вы имеете дело в каждый момент времени.
Однако допускается и больше 10 точек принятия решения в отдельном методе или процедуре, т.е. это не строгое ограничение, так как действительно бывают случаи, когда сократить количество точек принятия решения невозможно (но это исключительные случаи), поэтому их может быть и больше, но число 10 должно стать для Вас предупреждающим уведомлением о том, что код нужно пересмотреть.
Еще одним приемом уменьшения сложности кода является использование допустимой глубины вложенности таких конструкций как: if или while. Ведь многим программистам достаточно трудно понять условные конструкции и циклы, которые содержат более 3-4 уровней вложенности, т.е., например, внутри if есть еще один if, а внутри этого еще один, и так далее.
Таким образом, чтобы измерить сложность кода, можно также подсчитать и количество уровней вложенности if и while, и, если условные конструкции или циклы содержат более 3 уровней вложенности, значит, эти конструкции сложные, и их необходимо переконструировать.
Если Вас интересуют вопросы управления сложностью, правильного конструирования ПО с использованием объектно-ориентированного языка программирования (C++, Java, Visual Basic), то я Вам рекомендую почитать книгу Стива Макконела «Совершенный код», но сразу скажу, что она для программистов, которые уже имеют базовые знания программирования, иными словами, она не для новичков, и она не учит Вас тому или иному языку.
Также пользуясь случаем, хочу порекомендовать свою книгу «Как стать программистом? 14 советов по достижению поставленной цели», она для тех, кто только собирается стать программистом, но не знает с чего начать, в ней рассмотрен конкретный план действий, который поможет Вам стать программистом.
На сегодня это все, надеюсь, материал был Вам полезен, удачи Вам, пока!