Предполагаемое количество статических путей
Эта метрика измеряет количество путей в функции.
Рекомендуемый верхний предел для этой метрики составляет 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 оператор явно ложен. Операторы написаны как 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 |
| ЕГО Метрика: Да |