В этом примере показано, как загружать, анализировать и запрашивать данные покрытия с помощью сценария.
Данные о покрытии нагрузки
Загрузите модель, а затем восстановите сохраненные данные покрытия из файла covdata.cvt использование cvload. Данные и параметры тестирования извлекаются из массива ячеек. Настройки теста хранятся в cvtest объект, содержащий параметры моделирования, которые создали данные покрытия.
load_system('slvnvdemo_ratelim_harness'); [savedSettings,savedData] = cvload('covdata'); savedData = savedData{1};
Извлечение информации из объектов данных покрытия
Получение информации о покрытии из пути блока или дескриптора блока с помощью decisioninfo. Выходные данные представляют собой вектор с полученными и суммарными результатами для одного объекта модели.
subsysCov = decisioninfo(savedData,... 'slvnvdemo_ratelim_harness/Adjustable Rate Limiter')
subsysCov =
5 6
Определение процентного покрытия, достигаемого с помощью decisioninfo.
percentCov = 100 * (subsysCov(1)/subsysCov(2))
percentCov = 83.3333
Укажите, что требуется извлечь данные покрытия принятия решения для блока коммутатора с именем Apply Limited Gain с помощью decisioninfo. Это возвращает структуру, которая содержит решения и результаты.
[blockCov,desc] = decisioninfo(savedData, ... 'slvnvdemo_ratelim_harness/Adjustable Rate Limiter/Apply limited gain'); descDecision = desc.decision; outcome1 = desc.decision.outcome(1) outcome2 = desc.decision.outcome(2)
outcome1 =
struct with fields:
text: 'false (out = in3)'
executionCount: 0
executedIn: []
isFiltered: 0
isJustified: 0
filterRationale: ''
outcome2 =
struct with fields:
text: 'true (out = in1)'
executionCount: 101
executedIn: []
isFiltered: 0
isJustified: 0
filterRationale: ''
От decisioninfo вывод, вы можете видеть, что блок коммутатора под названием Apply Limited Gain никогда не был ложным, потому что ложный случай executionCount поле имеет значение 0. Если такое поведение ожидается, и вы не собирались выполнять это дело с помощью тестов, вы можете добавить правило фильтра, чтобы оправдать это отсутствие покрытия, используя slcoverage.Filter класс.
Во-первых, запрос на фильтрацию экземпляра блока, так как нам нужно фильтровать только тот экземпляр блока, который получил неполное покрытие, но не все экземпляры этого типа блока. Затем используйте slcoverage.BlockSelector класс с BlockInstance тип селектора для обозначения одного экземпляра блока для фильтрации.
id = getSimulinkBlockHandle('slvnvdemo_ratelim_harness/Adjustable Rate Limiter/Apply limited gain');
sel = slcoverage.BlockSelector(slcoverage.BlockSelectorType.BlockInstance,id);
Создание объекта фильтра и правила фильтра с помощью slcoverage.Filter и slcoverage.FilterRule классы.
filt = slcoverage.Filter;
rule = slcoverage.FilterRule(sel,'Edge case',slcoverage.FilterMode.Justify);
Добавьте правило к фильтру с помощью addRule способ. Затем сохраните новый файл фильтра с помощью save способ.
filt.addRule(rule);
filt.save('blfilter');
Создание нового cvdata из исходного объекта и применить к нему файл фильтра. Использовать decisioninfo на отфильтрованных данных покрытия, чтобы увидеть, что теперь 100% покрытия решения, потому что оправданные цели считаются удовлетворенными.
FilteredData = savedData; FilteredData.filter = 'blfilter'; newCov = decisioninfo(FilteredData,... 'slvnvdemo_ratelim_harness/Adjustable Rate Limiter') percentNewCov = 100 * (newCov(1)/newCov(2))
newCov =
6 6
percentNewCov =
100
После сбора данных покрытия можно извлечь определенную информацию о покрытии из cvdata с помощью следующих функций. Эти функции используются для извлечения указанной информации о покрытии для блока, подсистемы или диаграммы Stateflow ® в модели или для самой модели.
Можно включить подсветку покрытия в модели Simulink с помощью cvmodelview. Отчет о покрытии также можно просмотреть с помощью cvhtml.
complexityinfo - Цикломатическое покрытие сложности
executioninfo - Покрытие исполнения
conditioninfo - Покрытие состояния
decisioninfo - Охват принятием решений
mcdcinfo - Покрытие для принятия решений по измененным условиям (MCDC)
overflowsaturationinfo - Насыщение при покрытии целочисленного переполнения
relationalboundaryinfo - Покрытие реляционных границ
sigrangeinfo - Охват диапазонов сигналов
sigsizeinfo - Охват по размеру сигнала
tableinfo - Охват блоков таблицы подстановки
getCoverageinfo - Покрытие для блоков Simulink ® Design Verifier™
Пример использования этих функций см. в разделе Извлечение подробной информации из данных покрытия.
slcoverage.BlockSelector | slcoverage.Filter | slcoverage.FilterRule | slcoverage.MetricSelector