Как измерить сложность.
Возможно, самый важный способ предложил Том Маккейб, Сложность в нем измеряется с помощью подсчета количества «точек принятия решения» в методе
1. Начните считать с 1 на некотором участке кода.
2. Добавляйте 1 для каждого из следующих ключевых слов или их эквивалентов:
if while repeat for and or.
3. Добавляйте 1 для каждого варианта в операторе case.
Приведем пример:
if ( ( (status = Success) and done ) or
( not done and ( numLines >= maxLines ) ) ) then ...
В этом фрагменте вы начинаете считать с 1, получаете 2 для if, 3 — для and, 4 —для or и 5 — для and. Таким образом, этот фрагмент содержит всего пять точек принятия решения.
Посчитав количество точек принятия решения, вы можете использовать это число для анализа сложности вашего метода:
0–5 Этот метод, возможно, в порядке.
6–10 Начинайте думать о способах упрощения метода.
10+ Вынесите часть кода в отдельный метод и вызывайте его.
Перенос части метода в другой метод не упрощает программу — он просто перемещает точки принятия решения. Но он уменьшает сложность, с которой вам приходится иметь дело в каждый момент времени.
Максимум в 10 точек принятия решения не является абсолютным ограничением. Используйте количество этих точек как сигнал, предупреждающий о том, что метод, возможно, стоит перепроектировать.
|