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

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

Можно добавить аннотации через пользовательский интерфейс 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"

Если вы не задаете состояние, Polyspace считает результат выровненным по ширине и присваивает состояние 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"*/

Для получения дальнейшей информации смотрите Детали Синтаксиса Аннотации и Примеры Синтаксиса.

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

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

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

    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 Code Prover)

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

  • MISRA-AC-AGC поскольку нарушения MISRA C:2004 управляют применимый к сгенерированному коду

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

  • CERT-C для CERT® C, кодирующего стандартные нарушения

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

  • ISO-17961 для ISO/IEC TS 17961, кодирующего стандартные нарушения

  • MISRA-CPP поскольку MISRA® C ++ управляет нарушениями

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

  • JSF поскольку JSF® ++ управляет нарушениями

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

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

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

Result_name

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

Для RTE, используйте краткие названия проверок на этапе выполнения. Смотрите Краткие названия Проверок на этапе выполнения Программы автоматического доказательства Кода (Polyspace Code Prover).

Для 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

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

  • Unset

  • High

  • Medium

  • Low

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

Comment

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

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

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

Подавите один дефект

Введите аннотацию на ту же линию как дефект и задайте Family (DEFECT) и Result_name (INT_OVFL). Когда вы не задаете состояние, Polyspace присваивает состояние 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: 2 012 нарушений по нескольким линиям

Введите аннотацию с +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:*
   ...
}

Задайте несколько семейств в той же аннотации

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

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Состояние:Severity] или Comment записи, необходимо повторно войти в ключевое слово polyspace после текста в двойных кавычках.

Установите состояние и серьезность

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

//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] */

Смотрите также

Похожие темы