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