slcoverage.CodeSelector class

Пакет: slcoverage

Выберите пользовательский код C or C++ для фильтра покрытия

Описание

Использование объектов slcoverage.CodeSelector Класс, чтобы задать пользовательские критерии выбора кода C or C++ для правила фильтра.

The slcoverage.CodeSelector класс является handle класс.

Создание

sel = slcoverage.CodeSelector(type,fileName) создает CodeSelector объект заданного type на основе заданного fileName и устанавливает Type и FileName свойства.

sel = slcoverage.CodeSelector(type,fileName,functionName) создает CodeSelector объект на основе заданных functionName C или C++ в файле и устанавливает FunctionName свойство.

sel = slcoverage.CodeSelector(type,fileName,functionName,expr,exprIndex) создает CodeSelector объект для указанного индекса выражения и выражения и наборов Expr и ExprIndex свойства.

sel = slcoverage.CodeSelector(type,fileName,functionName,expr,exprIndex,outcomeIndex) создает CodeSelector объект на основе заданного результата покрытия и устанавливает OutcomeIndex свойство.

sel = slcoverage.CodeSelector(type,fileName,functionName,expr,exprIndex,outcomeIndex,parentExprIndex) создает CodeSelector объект на основе заданного результата покрытия, который принадлежит выражению, принадлежащему parentExprIndex и устанавливает DecOrCondIndex свойство к parentExprIndex.

Свойства

расширить все

Тип пользовательского кода C or C++ для выбора, заданный как перечисление slcoverage.CodeSelectorType класс:

  • slcoverage.CodeSelectorType.File - Настраиваемое имя файла кода C or C++.

  • slcoverage.CodeSelectorType.Function - Настраиваемое имя функции кода C or C++.

  • slcoverage.CodeSelectorType.Decision - Пользовательское решение кода C или C++.

  • slcoverage.CodeSelectorType.Condition - Пользовательское условие кода C or C++.

  • slcoverage.CodeSelectorType.DecisionOutcome - Пользовательский результат принятия решения по коду C or C++.

  • slcoverage.CodeSelectorType.ConditionOutcome - Пользовательский результат условия кода C or C++.

  • slcoverage.CodeSelectorType.MCDCOutcome - Пользовательский результат MCDC кода C или C++.

  • slcoverage.CodeSelectorType.RelationalBoundaryOutcome - Пользовательский результат реляционной границы кода C или C++.

Пример: slcoverage.CodeSelectorType.Function

Признаки

SetAccess
protected

Типы данных: slcoverage.CodeSelectorType

Файл C или C++ для выбора, заданный как символьный массив или строковые массивы.

Пример: 'myfile.c'

Признаки

SetAccess
protected

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

Функция C или C++ для выбора, заданная как символьный массив или строковые массивы.

Пример: 'counterbusFcn'

Признаки

SetAccess
protected

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

Решение или выражение условия для выбора, заданное как символьный массив или строковые массивы.

Пример: 'x | y'

Признаки

SetAccess
protected

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

Индекс выражения, заданный как целое число. Если вы фильтруете результат, это свойство является индексом выражения, которому принадлежит этот результат. Если вы фильтруете выражение, это свойство является индексом этого выражения в теле функции.

Пример: 2

Признаки

SetAccess
protected

Типы данных: single | double | int

Индекс выбранного результата, заданный как целое число:

  • Для логического выражения введите 1 для F результат или 2 для T результат.

  • Для оператора switch/case введите 1 для первого случая, 2 для второго случая и так далее.

  • Для реляционного контура

    • Целый тип:

      • введите 1 для типа -1.

      • введите 2 для типа +1.

      • введите 3 для типа 0.

    • Тип с плавающей точкой:

      • введите 1 для [-tol 0] или [-tol 0).

      • введите 2 для (0 tol] или [0 tol] является результатом 2

    Для получения дополнительной информации о реляционном граничном покрытии см. «Реляционное граничное покрытие».

Пример: 2

Признаки

SetAccess
protected

Типы данных: single | double | int

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

Пример: 2

Признаки

SetAccess
protected

Типы данных: single | double | int

Код, используемый для создания этого объекта селектора, возвращенный как вектор символов.

Признаки

SetAccess
protected

Описание селектора, возвращаемое как вектор символов. Simulink® Coverage™ создает описание на основе селектора.

Признаки

SetAccess
protected

Это свойство пустое для slcoverage.CodeSelector класс.

Признаки

SetAccess
protected

Типы данных: char | string | handle | integer

Методы

расширить все

Примеры

свернуть все

В этом примере показано, как выбрать пользовательский код C or C++, для которого вы хотите добавить правило фильтра.

Загрузите модель.

modelName = 'slcovCCallerExample';
Simulink.importExternalCTypes('my_func.h','EnumClass','dynamic');
load_system(modelName)

Настройте параметры покрытия с помощью Simulink.SimulationInput объект.

covSet = Simulink.SimulationInput(modelName);
covSet = covSet.setModelParameter('CovEnable','on');
covSet = covSet.setModelParameter('CovMetricStructuralLevel','MCDC');
covSet = covSet.setModelParameter('CovSFcnEnable','on');
covSet = covSet.setModelParameter('CovSaveSingleToWorkspaceVar','on');
covSet = covSet.setModelParameter('CovSaveName','covData');
covSet = covSet.setModelParameter('SimAnalyzeCustomCode','on');

Симулируйте модель с помощью covSet объект как вход.

simOut = sim(covSet);
covData = simOut.covData;

Создайте объект селектора для фильтрации пользовательской функции C timesK.

sel = slcoverage.CodeSelector(slcoverage.CodeSelectorType.Function, 'my_func.c', 'timesK');

Создайте объект фильтра и создайте правило на основе селектора, затем добавьте правило к фильтру.

filt = slcoverage.Filter;
rule = slcoverage.FilterRule(sel,'Tested elsewhere',...
           slcoverage.FilterMode.Exclude);
addRule(filt,rule);
setFilterName(filt,'Code Filter')

Сохраните фильтр следующим codefilter и добавить его в cvdata объект для my_func.c. Поскольку данные о покрытии хранятся в cv.cvdatagroup объект, используйте get метод для установки свойства.

save(filt,'codefilter');
covData.get('my_func.c').filter = 'codefilter';

Сгенерируйте отчет о покрытии.

cvhtml('codeCovReport',covData)

Просмотрите отчет. В разделе «Пользовательские файлы (Файлы) кода» нажмите my_func.c и найдите правило фильтра, добавленное в разделе Объекты, отфильтрованные из анализа покрытия.

В этом примере показано, как использовать slcoverage.CodeSelector объект для фильтрации результатов кода в пользовательской программе C или C++, вызываемой блоком C Caller.

Откройте модель и включите анализ покрытия

Откройте модель.

modelName = 'slcovCCallerExample';
Simulink.importExternalCTypes('my_func.h','EnumClass','dynamic');
load_system(modelName)

Настройте параметры покрытия с помощью Simulink.SimulationInput объект.

covSet = Simulink.SimulationInput(modelName);
covSet = covSet.setModelParameter('CovEnable','on');
covSet = covSet.setModelParameter('CovMetricStructuralLevel','ConditionDecision');
covSet = covSet.setModelParameter('CovSFcnEnable','on');
covSet = covSet.setModelParameter('CovSaveSingleToWorkspaceVar','on');
covSet = covSet.setModelParameter('CovSaveName','covData');

Симулируйте модель с помощью covSet как вход.

simOut = sim(covSet);
covData = simOut.covData;

Симуляция возвращает данные покрытия как cv.cvdatagroup объект, когда и модель, и пользовательский код анализируются на предмет покрытия. Чтобы извлечь данные покрытия кода, используйте get метод cvdatagroup класс.

codeCovData = get(covData,'my_func.c');

Обоснование отсутствующего результата

В этом примере вы объясняете F результат inputGElower условие в (u1->limits.upper_saturation_limit >= limit) && inputGElower решение, которое находится внутри counterbusFcn функция в my_func.c исходный файл.

Создайте объект селектора с помощью slcoverage.CodeSelector. Первый вход является CodeSelectorType перечисление. Чтобы обосновать результат условия, используйте ConditionOutcome перечисление. Второй вход является исходным файлом кода, my_func.c. Третий вход является именем функции, которая содержит результат, counterbusFcn. Четвертый вход является выражением, которое содержит результат, (u1->limits.upper_saturation_limit >= limit) && inputGElower. Пятый вход является индексом выражения, которому принадлежит результат. В этом случае inputGElower является вторым условием в родительском состоянии, поэтому этот вход 2. Шестой вход является индексом результата условия, который 1 для F результат логического выражения. Седьмой вход является индексом родительского решения или условия, которое 1 для (u1->limits.upper_saturation_limit >= limit) && inputGElower потому что это первое решение в функции.

enum = slcoverage.CodeSelectorType.ConditionOutcome;
sel = slcoverage.CodeSelector(enum,'my_func.c','counterbusFcn','(u1->limits.upper_saturation_limit >= limit) && inputGElower',2,1,1);

Создайте Filter объект и FilterRule объект и применить правило к фильтру.

filt = slcoverage.Filter;
rule = slcoverage.FilterRule(sel,'condition does not apply');
addRule(filt,rule);

Сохраните фильтр в файл фильтра, а затем примените фильтр к cvdata объект.

save(filt,'codeOutcomeFilter');
codeCovData.filter = 'codeOutcomeFilter';

Просмотрите отчет о покрытии

Проверьте, что результат фильтруется путем создания отчета о покрытии с помощью cvhtml.

cvhtml('filteredCodeCovReport',codeCovData)

Введенный в R2018b
Для просмотра документации необходимо авторизоваться на сайте