slcoverage.CodeSelector class

Пакет: slcoverage

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

Описание

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

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

Создание

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

sel = slcoverage.CodeSelector(type,fileName,functionName) создает CodeSelector основанный на объектах на заданном C или C++ functionName в файле и наборах 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 or C++.

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

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

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

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

  • slcoverage.CodeSelectorType.RelationalBoundaryOutcome — Пользовательский код C or 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 результат.

  • Для переключателя/оператора выбора введите 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