exponenta event banner

Аннотирование кода и скрытие известных или приемлемых результатов

Если анализ кода Polyspace ® обнаруживает известные или приемлемые дефекты или нарушения правил кодирования, можно подавить дефекты или нарушения в последующих анализах. Добавьте аннотации кода, указывающие на то, что вы просмотрели проблемы и не намерены их устранять.

Аннотации можно добавлять через интерфейс пользователя Polyspace или вводя их непосредственно в коде. Общий рабочий процесс см. в разделе Результаты адресного полипространства с помощью исправлений ошибок или обоснований. В этом разделе показан синтаксис аннотации.

Обратите внимание, что ошибки времени выполнения, обнаруженные с помощью программы проверки кода, нельзя скрыть из исходного кода даже с аннотациями кода. Однако, как и все другие результаты, информация проверки, связанная с ошибкой времени выполнения, извлекается из соответствующей аннотации кода и показывается вместе с результатом.

Синтаксис аннотации кода

Для добавления комментариев непосредственно в исходный файл используйте синтаксис аннотаций Polyspace. Синтаксис не учитывает регистр и имеет следующий формат. Оба комментария к стилю C в /* */ и комментарии стиля C++, начиная с // поддерживаются.

Аннотирование одной строки кода

Чтобы аннотировать результат в текущей строке кода (включая макросы), используйте следующий синтаксис:

line of code; /* polyspace Family:Result_name */

Аннотации начинаются с ключевого слова polyspace и должны включать Family и Result_name значения полей. При необходимости можно указать Status, Severity, и Comment значения полей.

polyspace Family:Result_name [Status:Severity] "Comment"

Если статус не задан, Полиспейс считает результат выровненным и присваивает ему статус No action planned к результату.

Дополнительные сведения см. в разделах Сведения о синтаксисе аннотаций и Примеры синтаксиса.

Аннотирование блока кода

Чтобы аннотировать блок кода, используйте следующий синтаксис.

  • Аннотация для текущей строки кода и n следующие строки:

    code; /* polyspace +n Family:Result_name */

  • Аннотация для блока кода:

    /* polyspace-begin Family:Result_name */
    code;
    /* polyspace-end Family:Result_name */

При необходимости укажите состояние, степень серьезности и комментарий.

Если аннотации для результатов с тем же самым Family и Result_name вложены, используется самая внутренняя аннотация.

Например, в этом коде аннотация в строке 9 применяется вместо аннотации блока, но аннотация блока применяется к нарушению в строке 7.

1  /*polyspace-begin MISRA-C:14.9 [To fix:High] "Block annotation"*/
2  int main(void) 
3  {
4      int x = 1;
5      int y = x / 2;
6  
7      if (y < 0) /* Block annotation is applied to this violation of MISRA-C:14.9*/
8          y++;
9      if (x > y) /*polyspace MISRA-C:14.9 [Justified:Low] "Nested annotation applied"*/
10         return x;
11     return x;
12 }
13 /*polyspace-end MISRA-C:14.9 [To fix:High] "Block annotation"*/

Если аннотация применяется к нескольким строкам кода, она не применяется к зеленым чекам в коде. При повторном выполнении анализа эти зеленые проверки не считаются обоснованными, и их Status и Severity в списке результатов не изменяются на Status и Severity аннотации.

Дополнительные сведения см. в разделах Сведения о синтаксисе аннотаций и Примеры синтаксиса.

Выравнивание нескольких результатов в одной аннотации

Для выравнивания нескольких результатов в одной аннотации используйте следующий синтаксис.

  • Если результаты принадлежат одному семейству, укажите имена результатов, разделенные запятыми.

    line of code; /* polyspace Family:Result_1_name,Result_2_name */
  • Если результаты относятся к разным семействам, укажите имена семейств, разделенных пространствами.

    line of code; /* polyspace Family_1:Result_1_name Family_2:Result_2_name */

При необходимости укажите состояние, степень серьезности и комментарий.

Дополнительные сведения см. в разделах Сведения о синтаксисе аннотаций и Примеры синтаксиса.

Сведения о синтаксисе аннотаций

Чтобы заменить различные поля аннотаций их разрешенными значениями, используйте значения в этой таблице или просмотрите примеры.

ОбластьДопустимое значение
Family

Тип результата анализа:

  • DEFECT (Polyspace Bug Finder™)

  • RTE, для проверок во время выполнения (Polyspace Code Prover™)

  • CODE-METRICS, для показателей сложности кода функционального уровня

  • VARIABLE, для глобальных переменных (средство проверки кода Polyspace)

  • MISRA-C или MISRA2004 для нарушений правил MISRA C ®: 2004

  • MISRA-AC-AGC за нарушения правил MISRA C:2004, применимых к сгенерированному коду

  • MISRA-C3 или MISRA2012 для нарушений правил MISRA C: 2012. Аннотация работает даже для правил, применимых к сгенерированному коду.

  • CERT-C для нарушений стандартов кодирования CERT ® C

  • CERT-CPP для нарушений стандарта кодирования CERT C++

  • ISO-17961 для стандартов кодирования ISO/IEC TS 17961

  • MISRA-CPP для нарушений правил MISRA ® C++

  • AUTOSAR-CPP14 для нарушений правил AUTOSAR C++ 14

  • JSF для нарушений правил JSF ® + +

  • CUSTOM за нарушения пользовательских правил кодирования

Чтобы указать все результаты анализа, используйте символ звездочки *:*.

См. примеры синтаксиса.

Result_name

Для DEFECT, используйте короткие имена шашек. См. Краткие имена чекеров дефектов для поиска ошибок.

Для RTE, используйте короткие имена проверок времени выполнения. См. Краткие имена проверок времени выполнения программы проверки кода.

Для CODE-METRICS, используйте короткие имена показателей сложности кода. См. раздел Краткие имена показателей сложности кода.

Для VARIABLE, единственное допустимое значение - символ звездочки «*».

Для кодирования стандартных нарушений укажите номер правила или номера.

Указание всех частей имени результата [MISRA2012:17.*] или все имена результатов в семействе [DEFECT:*]используйте символ звездочки.

См. примеры синтаксиса.

Status

Текст для указания способа устранения ошибки в коде. Это значение заполняет столбец Статус (Status) на панели Список результатов (Results List) следующим образом:

  • Unreviewed

  • To investigate

  • To fix

  • Justified

  • No action planned

  • Not a defect

  • Other

Polyspace подавляет результаты, аннотированные статусом Justified, No action planned, или Not a defect в последующих анализах. Если указан статус, который не является допустимым значением, Polyspace сохраняет его как пользовательский статус.

Severity

Текст, указывающий на критичность ошибки в коде. Это значение заполняет столбец Серьезность на панели Список результатов следующим образом:

  • Unset

  • High

  • Medium

  • Low

Если указан недопустимый уровень серьезности, Polyspace добавляет его в поле состояния и сохраняет как пользовательский статус. Например, [To investigate:sporadic] отображается в столбце Статус (Status) панели Список результатов (Results List) как To investigate sporadic.

Comment

Дополнительный текст, например ключевое слово или объяснение состояния и серьезности. Это значение заполняет столбец Комментарий (Comment) на панели Список результатов (Results List).

Дополнительный текст может охватывать более одной строки в коде. При отображении этого текста в отчетах начальные и конечные пробелы в строке объединяются в одно пространство, так что весь текст может быть прочитан как один абзац.

Примеры синтаксиса

Подавление одиночного дефекта

Введите аннотацию на той же строке, что и дефект, и укажите Family (DEFECT) и Result_name (INT_OVFL). Если статус не задан, Полиспейс присваивает статус No action planned, а затем подавляет результат в последующих анализах.

int var = INT_MAX;
var++;/* polyspace DEFECT:INT_OVFL */

Подавление одного нарушения стандарта кодирования

Оправдать нарушение стандарта кодирования, например, нарушение CERT-C.

Введите аннотацию в той же строке, что и нарушение, и укажите Family (CERT-C) и Result_name (номер правила, например, STR31-C). Присвоение статуса Justified, степень серьезности Low и комментарий.

code; /* polyspace CERT-C:STR31-C [Justified:Low] "Overflow cannot happen
                                            because of external constraints." */

Подавление всех нарушений MISRA C: 2012 по нескольким строкам

Введите аннотацию с помощью +n между polyspace и Family:Result_name записей. Аннотация применяется к одной и той же строке и n следующие строки.

Эта аннотация применяется к строкам 4-7. Число строк включает код, комментарии и пустые строки.

4. code ; // polyspace +3 MISRA2012:* 
5. //comment
6. 
7. code;
8. code;

Подавление всех метрик кода в функции

Чтобы аннотировать метрики сложности кода функционального уровня, в определении функции введите аннотацию в той же строке, что и имя функции.

Эта аннотация подавляет все метрики сложности кода для функции func:

char func(char param) { //polyspace CODE-METRICS:*
   ...
}

Указание нескольких семейств в одной аннотации

Введите каждое семейство, разделенное помещением. Эта аннотация применяется ко всем правилам 17 C:2012 MISRA и ко всем проверкам времени выполнения.

some code; /* polyspace MISRA2012:17.* RTE:* */

Указание нескольких имен результатов в одной аннотации

После указания Family (DEFECT), введите каждый Result_name разделен запятой.

system("rm ~/.config"); /* polyspace DEFECT:UNSAFE_SYSTEM_CALL,RETURN_NOT_CHECKED */

Добавление пояснительных комментариев к аннотации

После указания Family и Result_name, можно добавить Comment с дополнительной информацией для обоснования. Можно указать комментарий для всех семейств и имен результатов или комментарий для каждого семейства или имени результата.

//Single comment
code; /* polyspace DEFECT:BAD_FREE MISRA2004:* "Comment applies to defect and Misra C:2004 rules" */

//Multiple comments incorrect syntax:
code; /* polyspace DEFECT:* "Comment applies to all defects" MISRA2004:5.2 "Comment applies to Misra C: 2004 rule 5.2" */

//Multiple comments correct syntax:
code; /* polyspace DEFECT:* "Comment applies to all defects" polyspace MISRA2004:5.2 "Comment applies to Misra C: 2004 rule 5.2" */

В аннотациях Polyspace игнорирует весь текст, следующий за двойными кавычками. Чтобы указать дополнительные Family:Result_name, [Status:Severity] или Comment записей, необходимо повторно ввести ключевое слово polyspace после текста в двойных кавычках.

Задать состояние и степень серьезности

Можно указать допустимые значения или ввести пользовательские значения состояния и степени серьезности. Пользовательская запись серьезности добавляется к состоянию и сохраняется в пользовательском интерфейсе как пользовательское состояние.

//Set Status only
code; /* polyspace DEFECT:* [To fix] "some comment" */

//Set Status 'To fix' and Severity 'High'
code; /* polyspace VARIABLE:* [To fix: High] "some comment"*/

//Set custom status 'Assigned' and Severity 'Medium'
code; /* polyspace MISRA2012:12.* [Assigned: Medium] */

См. также

Связанные темы