exponenta event banner

класс slcoverage.CodeSelector

Пакет: slcoverage

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

Описание

Использовать объекты slcoverage.CodeSelector для указания пользовательских критериев выбора кода C или 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 или C++, указанного как перечисление slcoverage.CodeSelectorType класс:

  • slcoverage.CodeSelectorType.File - Имя файла пользовательского кода C или C++.

  • slcoverage.CodeSelectorType.Function - Имя пользовательской функции кода C или C++.

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

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

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

  • slcoverage.CodeSelectorType.ConditionOutcome - Результат пользовательского условия кода C или 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 или 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