Предполагаемое статическое количество пути
Эта метрика измеряет количество путей в функции.
Рекомендуемый верхний предел для этой метрики равняется 80. Если количество путей высоко, код затрудняет в чтение и может вызвать больше оранжевых проверок. Попытайтесь ограничить значение этой метрики.
Чтобы осуществить пределы на метриках, смотрите, Вычисляют Метрики сложности кода.
Количество путей вычисляется согласно этим правилам:
Если операторы в функции не повреждают поток управления, количество путей является тем.
Даже пустой оператор, такой как ;
или пустой блок, такой как {}
количества как один путь.
Оператор управления вводит ветви и добавляет к исходному одному пути.
if-else if-else
: Каждый if
ключевое слово вводит новую ветвь. Вклад от if-else if-else
блок является количеством ветвей плюс одна (исходный путь). Если всеобъемлющий else
присутствует, все пути проходят блок; в противном случае один путь обходит блок.
Например, функция с if(..) {} else if(..) {} else {}
оператор имеет три пути. Функция с одним if() {}
только имеет два пути, тот, который проходит if
блокируйтесь и тот, который обходит блок.
switch-case
: Каждый case
метка вводит новую ветвь. Вклад от switch
блок является количеством case
метки плюс одна (исходный путь). Если всеобъемлющий default
присутствует, все пути проходят блок; в противном случае один путь обходит блок.
Например, функция с оператором switch (var) { case 1: .. break; case 2: .. break; default: .. }
имеет три пути, все проходящие switch
блок. Если вы не используете default
, функция все еще имеет три пути, два прохождения через switch
блокируйтесь и один обход блока.
for
и while
: Каждая инструкция циклов вводит новую ветвь. Вклад от цикла равняется двум - путь, который проходит цикл и путь, который обходит цикл.
do-while
: Каждый do-while
оператор вводит новую ветвь кроме тех случаев, когда условие while
оператор является явным образом ложным. Операторы, записанные как do{/*..*/}while(0)
не функционируйте как циклы. Такие операторы часто используются для включения нескольких линий макросов в фигурных скобках. Например, этот do-while
оператор служит, чтобы инкапсулировать многострочный макрос, а не создать новый путь:
#define myfunc(x) do{ ...\\ ...\\ ...}while(0);
Обратите внимание на то, что оператор с тернарным оператором такой как
result = a > b ? a : b;
Если больше чем один оператор управления присутствует в последовательности без какого-либо вложения, количество путей является продуктом вкладов от каждого оператора управления.
Например, если функция имеет три for
циклы и два if-else
блоки, один за другим, количество путей является 2 × 2 × 2 × 2 × 2 = 32.
Если много операторов управления присутствуют в функции, количество путей может быть большим. Вложенные операторы управления сокращают количество путей за счет увеличения глубины вложения. Для примера смотрите Функцию с Вложенными Операторами управления.
Программное обеспечение отображает определенные значения в случаях, где метрика не вычисляется:
Если goto
операторы присутствуют в теле функции, Polyspace не может вычислить количество путей и показывает количество путей как Not Computed
вместо этого.
Если количество путей достигает верхнего предела 1,000,000,000, Polyspace останавливает вычисление и отображает только верхний предел. Фактическое значение может быть выше.
Группа: Функция |
Акроним: PATH |
Метрика HIS: да |