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

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

Можно добавить аннотации через пользовательский интерфейс Polyspace или путем ввода их непосредственно в коде. Для общего рабочего процесса смотрите Результаты Polyspace Адреса Через Исправления ошибок или Комментарии. Эта тема показывает синтаксис аннотации.

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

Чтобы добавить комментарии непосредственно в ваш исходный файл, используйте синтаксис аннотации Polyspace. Синтаксис не является чувствительным к регистру, и имеет этот формат:

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

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

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

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

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

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

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

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

Когда вы аннотируете блок кода, если последующие аннотации, вложенные в том блоке кода, применяются к тому же Family и Result_name, они проигнорированы.

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

1 /*polyspace-begin MISRA-C:14.9 [High:To fix] "Block annotation"*/ 
2 
3 int main(void) /*polyspace MISRA-C:14.7 "Annotation applied"*/
4 {
5     int x = 1;
6     int y = x / 2;
7 
8     
9     if (x > y) /*polyspace MISRA-C:14.9 "Annotation ignored"*/
1         return x;
11     return x;
12 }
13 /*polyspace-end MISRA-C:14.9 [High:To fix] "Block annotation"*/

Если вы применяете аннотацию к нескольким строкам кода, аннотация не применяется к зеленым регистрациям кода. Когда вы повторно выполняете анализ, эти зеленые проверки не рассматриваются выровненными по ширине, и их Status и Severity в Results List не изменяются на Status и Severity аннотации.

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

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

Поле Позволенное значение
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 используйте краткие названия средств проверки. Смотрите Краткие названия Средств проверки Дефекта Средства поиска Ошибки (Polyspace Bug Finder).

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

Текст, чтобы указать, как очень важный вы рассматриваете ошибку в своем коде. Это значение заполняет столбец 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" */

Подавите весь 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, [Status: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] */

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

Похожие темы