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

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

Можно добавить аннотации через пункты меню в пользовательском интерфейсе Polyspace (или плагины IDE) или путем ввода их непосредственно в коде. Для общего рабочего процесса добавляющих аннотаций:

Эта тема показывает синтаксис аннотации.

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

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

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

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

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

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

Например:

var++; /* polyspace DEFECT:INT_OVFL */

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

Можно опционально задать Status, Severity, и Comment значение поля:

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

Например:

var++; /* polyspace DEFECT:INT_OVFL [Justified:Low] "Overflow taken into
                                            account."*/

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

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

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

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

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

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

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

    /* polyspace-begin Family:Result_name */
    {
       block of 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 в Results List не превращаются в 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 Code Prover)

  • MISRA-C или MISRA2004 для MISRA C®: 2 004 нарушения правила. Эти аннотации также применяются к MISRA C: 2 012 нарушений на основе отображения между этими двумя стандартами. Отображение позволяет вам снова использовать свои выравнивания для более старого стандарта при миграции на более новый. Смотрите Импорт Существующий MISRA C: 2 004 Выравнивания к MISRA C: 2 012 Результатов.

  • 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, используйте краткие названия средств проверки. Смотрите Краткие названия Средств проверки Дефекта Bug Finder.

Для RTE, используйте краткие названия проверок на этапе выполнения. Смотрите Краткие названия Проверок на этапе выполнения 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 и комментарий.

line of 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. line of code ; // polyspace +3 MISRA2012:* 
5. //comment
6. 
7. line of code;
8. line of code;

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

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

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

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

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

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

line of code; /* polyspace MISRA2012:17.* RTE:* */

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

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

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

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

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

Например, чтобы подавить глобальную переменную заканчиваются с Justified состояние, Low серьезность и некоторые комментарии, можно ввести аннотацию как это:

int var; /* polyspace VARIABLE:* [Justified: Low] "Storage repo for later use"*/

Добавьте пояснительные записки в аннотацию

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

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

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

//Multiple comments correct syntax:
line of 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
line of code; /* polyspace DEFECT:* [To fix] "some comment" */

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

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

Предупреждения аннотации кода

Если вы вводите аннотацию кода неправильно, или аннотация больше не применяется, аналитический журнал содержит предупреждение:

Warning: These Polyspace annotations do not apply to the current code
Предупреждение может означать одно из следующего:

  • Проблема больше не обнаруживается из-за кода, фиксирует или изменяется в аналитической настройке.

    Например, аннотация, такая как:

    /* polyspace RTE:IDP [No action planned:Low] */
    Больше не может применяться, потому что проверка Illegally dereferenced pointer (аннотировал как IDP), который был ранее красным или оранжевым, является теперь зеленым.

  • Синтаксис аннотации является неправильным.

    Аннотация, начинающаяся с polyspace сопровождаемый словом и затем : (двоеточие), такое как:

    // polyspace Family : 
    рассматривается как аннотацию Polyspace, выравнивающую по ширине результат. Если слово Family следующий polyspace не тип результата Polyspace, такого как DEFECT или RTE, анализ рассматривает аннотацию как недопустимую и показывает предупреждение. Например, эта аннотация инициировала предупреждение:
    // polyspace TODO: Fix in March dev cycle
    начиная с TODO не тип результата Polyspace. Чтобы избежать этих предупреждений, используйте другую диафрагму, например, вместо двоеточия. Для полного списка типов результата смотрите Синтаксис Аннотации Кода.

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

Похожие темы