exponenta event banner

-xml-аннотации-описание

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

Синтаксис

-xml-annotations-description file_path

Описание

-xml-annotations-description file_path использует синтаксис аннотации, определенный в XML-файле, расположенном в file_path для интерпретации аннотаций кода в исходных файлах. XML-файл можно использовать для задания синтаксиса аннотации и сопоставления его с синтаксисом аннотации Polyspace ®. При выполнении анализа с помощью этой опции можно выровнять и скрыть результаты с аннотациями, использующими синтаксис. При запуске программы Polyspace в командной строке file_path - абсолютный путь или путь к папке, из которой выполняется команда. При запуске Polyspace через интерфейс пользователя file_path - абсолютный путь.

При выполнении анализа через интерфейс пользователя эту опцию можно ввести в поле Другое (Other) в узле Дополнительные настройки (Advanced Settings) на панели Конфигурация (Configuration). Посмотрите Other.

Если в качестве расширений кода в IDE используется Polyspace, введите эту опцию в файл опций анализа. См. файл параметров.

Зачем использовать этот параметр

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

Примеры

Импорт существующих аннотаций для нарушений правил кодирования

Предположим, что вы ранее просмотрели исходный файл zero_div.c содержит следующий код и оправдывает некоторые нарушения MISRA C ®: 2012 с помощью пользовательских аннотаций.

#include <stdio.h>

/* Violation of Misra C:2012 
rules 8.4 and 8.7 on the next
line of code. */

int func(int p) //My_rule 50, 51
{	
    int i;
    int j = 1;

    i = 1024 / (j - p); 
    return i;
}

/* Violation of Misra C:2012 
rule 8.4 on the next line of 
code */

int func2(void){ //My_rule 50
	int x=func(2);
	return x; 
}

Комментарии кода My_rule 50, 51 и My_rule 50 не используйте синтаксис аннотации Polyspace. Вместо этого используется соглашение, в котором все правила MISRA помещаются в единый нумерованный список. В этом списке правила 8.4 и 8.7 соответствуют цифрам 50 и 51.Вы можете проверить этот код на наличие нарушений MISRA C: 2012, введя команду:

  • Поиск ошибок:

    polyspace-bug-finder -sources source_path -misra3 all
  • Проверка кода:

    polyspace-code-prover -sources source_path -misra3 all -main-generator
  • Сервер поиска ошибок:

    polyspace-bug-finder-server -sources source_path -misra3 all

  • Сервер проверки кода:

    polyspace-code-prover-server -sources source_path -misra3 all -main-generator

source_path - путь к zero_div.c.

Аннотированные нарушения появятся на панели Список результатов (Results List). Вы должны пересмотреть и оправдать их снова.

Этот пример XML определяет формат аннотации, используемый в zero_div.c и сопоставляет его с синтаксисом аннотаций Polyspace:

  • Формат аннотации - ключевое слово My_rule, за которым следует пробел и один или несколько алфавитно-цифровых идентификаторов правил, разделенных запятыми.

  • Идентификаторы правил 50 и 51 сопоставляются с правилами MISRA C: 2012 8.4 и 8.7 соответственно. При сопоставлении используется синтаксис аннотации Polyspace.

<?xml version="1.0" encoding="UTF-8"?>

<Annotations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:noNamespaceSchemaLocation="annotations_xml_schema.xsd"
             Group="exampleCustomAnnotation">
			 
  <Expressions Search_For_Keywords="My_rule"
			  Separator_Result_Name="," >
			  
								
	<!-- This section defines the annotation syntax format -->		  
   <Expression Mode="SAME_LINE"
               Regex="My_rule\s(\w+(\s*,\s*\w+)*)"
               Rule_Identifier_Position="1"
               />
			   
 </Expressions>
  <!-- This section maps the user annotation to the Polyspace
  annotation syntax -->
 <Mapping>
    <Result_Name_Mapping  Rule_Identifier="50" Family="MISRA-C3" Result_Name="8.4"/>
	<Result_Name_Mapping  Rule_Identifier="51" Family="MISRA-C3" Result_Name="8.7"/>
   </Mapping>
</Annotations>

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

  1. Скопируйте предыдущий пример кода в текстовый редактор и сохраните его на компьютере как annotations_description.xml, например, в C:\Polyspace_workspace\annotations\.

  2. Повторно запустите анализ на zero_div.c с помощью команды:

    • Поиск ошибок:

      polyspace-bug-finder -sources source_path -misra3 all ^
      -xml-annotations-desription ^
      C:\Polyspace_workspace\annotations\annotations_description.xml
    • Проверка кода:

      polyspace-code-prover -sources source_path -misra3 all ^
      -main-generator -xml-annotations-desription ^
      C:\Polyspace_workspace\annotations\annotations_description.xml
    • Сервер поиска ошибок:

      polyspace-bug-finder-server -sources source_path -misra3 all ^
      -xml-annotations-desription ^
      C:\Polyspace_workspace\annotations\annotations_description.xml

    • Сервер проверки кода:

      polyspace-code-prover-server -sources source_path -misra3 all ^
      -main-generator -xml-annotations-desription ^
      C:\Polyspace_workspace\annotations\annotations_description.xml

Полиспейс считает аннотированные результаты выровненными и скрывает их на панели Список результатов (Results List).

Представлен в R2017b