exponenta event banner

класс polyspace.ClausedRulesOptions

Пакет: полиспейс

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

Описание

Создайте пользовательский список правил кодирования для сдачи на хранение в анализ Polyspace ®.

Примечание

Перед запуском Polyspace из MATLAB ® необходимо связать установки Polyspace и MATLAB. См. раздел Интеграция полиспейса с MATLAB и Simulink.

Строительство

ruleList = polyspace.CodingRulesOptions(RuleSet) создает объект правил кодирования ruleList для RuleSet набор правил кодирования. Установите активные правила в объекте правил кодирования.

Входные аргументы

развернуть все

Стандартный набор правил кодирования, указанный в качестве одной из аббревиатур правил кодирования.

Пример: 'misraCpp'

Типы данных: char

Свойства

Для каждого набора правил кодирования создается объект со всеми поддерживаемыми правилами, разделенными на разделы. По умолчанию все правила включены. Чтобы отключить правило, установите для него значение false. Например:

misraRules = polyspace.CodingRulesOptions('misraC');
misraRules.Section_20_Standard_libraries.rule_20_1 = false;

Копирование семантики

Значение. Сведения о том, как классы значений влияют на операции копирования, см. в разделе Копирование объектов.

Примеры

свернуть все

Настройте правила кодирования, которые проверяются в анализе Polyspace. Поскольку все правила включены по умолчанию, можно создать пользовательское подмножество, отключив некоторые правила.

Создание двух объектов: polyspace.CodingRulesOptions объект для установки правил кодирования и polyspace.Project для выполнения анализа Polyspace.

misraRules = polyspace.CodingRulesOptions('misraC2012');
proj = polyspace.Project;

Настройте список правил кодирования, отключив правила 2.1-2.7.

misraRules.Section_2_Unused_code.rule_2_1 = false;
misraRules.Section_2_Unused_code.rule_2_2 = false;
misraRules.Section_2_Unused_code.rule_2_3 = false;
misraRules.Section_2_Unused_code.rule_2_4 = false;
misraRules.Section_2_Unused_code.rule_2_5 = false;
misraRules.Section_2_Unused_code.rule_2_6 = false;
misraRules.Section_2_Unused_code.rule_2_7 = false;

Добавление настраиваемого списка правил кодирования в Configuration имущества polyspace.Project объект.

proj.Configuration.CodingRulesCodeMetrics.MisraC3Subset = misraRules;
proj.Configuration.CodingRulesCodeMetrics.EnableMisraC3 = true;
proj.Configuration.CodingRulesCodeMetrics.EnableCheckersSelectionByFile = true;
Необходимо включить выбор контрольных элементов по файлам, поскольку при выполнении Polyspace используется XML-файл, расположенный ниже, для включения проверки правил кодирования. XML-файл сохраняется в .settings подпапка папки результатов.

Теперь вы можете использовать polyspace.Project для выполнения анализа. Например, можно ввести:

proj.Configuration.Sources = {fullfile(polyspaceroot, 'polyspace', ... 
    'examples', 'cxx', 'Bug_Finder_Example', 'sources', 'numerical.c')};
run(proj, 'bugfinder');

Предположим, что для анализа необходимо указать подмножество правил MISRA C ®: 2012. Вместо перечисления правил, которые необходимо отключить, можно указать правила, которые необходимо включить. Номера правил также можно указать только без разделов MISRA C: 2012, содержащих правила.

Укажите номера правил в массиве ячеек для createRulesObject функция определяется следующим образом.

function rulesObject = createRulesObject(rulesToEnable)

%% This function takes a cell array of MISRA C:2012 rules and returns
%% a polyspace.CodingRulesOptions object with the rules enabled.
%% Example input argument: {'2.7', '3.1'}

    rulesObject = polyspace.CodingRulesOptions('misraC2012');
    
    % Coding Standards documents have many sections. Loop over all
    % sections.
    ruleSections = properties(rulesObject);
    for i=1:length(ruleSections)
         sectionName = ruleSections{i};
         rulesInSection = properties(rulesObject.(sectionName));
         
         % Loop over all rules in a section, enable or disable rule based
         % on input
         for j=1:length(rulesInSection)
             ruleNumberAsProperty = rulesInSection{j};
             ruleNumber = strrep(strrep(ruleNumberAsProperty,'rule_',''),'_','.');
             if(any(strcmp(rulesToEnable,ruleNumber)))
                 rulesObject.(sectionName).(ruleNumberAsProperty)=1;
             else
                 rulesObject.(sectionName).(ruleNumberAsProperty)=0;
             end
         end
    end
end

Например, чтобы включить правила 1.1 и 2.2, введите:

createRulesObject({'1.1','2.2'})

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