Расчетное число статических путей
Эта метрика измеряет количество путей в функции.
Рекомендуемый верхний предел для этой метрики - 80. Если количество путей велико, код трудно прочитать и может привести к большему количеству проверок оранжевого цвета. Попробуйте ограничить значение этой метрики.
Для применения ограничений на метрики:
В пользовательском интерфейсе Polyspace ® см. раздел Показатели сложности вычислительного кода.
В веб-интерфейсе Polyspace Metrics см. раздел Сравнение показателей с целями качества программного обеспечения.
Количество путей вычисляется по следующим правилам:
Если операторы в функции не нарушают поток управления, количество путей равно единице.
Даже пустое выражение, такое как ; или пустой блок, такой как {} считается одним путем.
Оператор потока управления вводит ветви и добавляет к исходному пути.
if-else if-else: Каждый if ключевое слово вводит новую ветвь. Вклад от if-else if-else блок - количество ветвей плюс один (исходный путь). Если catch-all else присутствует, все пути проходят через блок; в противном случае один путь обходит блок.
Например, функция с if(..) {} else if(..) {} else {} оператор имеет три пути. Функция с одним if() {} имеет только два пути, один из которых проходит через if блок и блок, который обходит блок.
switch-case: Каждый case метка представляет новую ветвь. Взнос от switch блок - количество case метки плюс один (исходный путь). Если catch-all default присутствует, все пути проходят через блок; в противном случае один путь обходит блок.
Например, функция с оператором switch (var) { case 1: .. break; case 2: .. break; default: .. } имеет три пути, все проходят через switch блок. Если опустить default, функция все еще имеет три пути, два проходят через switch блок и один в обход блока.
for и while: Каждый оператор цикла вводит новую ветвь. Вклад от цикла два - путь, который проходит через цикл и путь, который обходит цикл.
do-while: Каждый do-while оператор вводит новую ветвь, за исключением случаев, когда состояние while явно имеет значение false. Заявления, написанные как 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, Полипространство останавливает вычисление и показывает просто верхний предел. Фактическое значение может быть выше.
| Группа: Функция |
Акроним: PATH |
| ЕГО метрика: Да |