В этом примере показано, как загрузить, проанализируйте и запросите данные о покрытии с помощью скрипта.
Загрузите данные о покрытии
Загрузите модель, затем восстановите сохраненные данные о покрытии из файла covdata.cvt использование cvload. Данные и тестовые настройки получены в массиве ячеек. Тестовые настройки хранятся в cvtest объект, который содержит параметры от симуляции, которая создала данные о покрытии.
load_system('slvnvdemo_ratelim_harness'); [savedSettings,savedData] = cvload('covdata'); savedData = savedData{1};
Извлеките информацию из объектов данных покрытия
Получите информацию о покрытии из блока path или указателя блока при помощи decisioninfo. Выход является вектором с достигнутыми и общими результатами для одного объекта модели.
subsysCov = decisioninfo(savedData,... 'slvnvdemo_ratelim_harness/Adjustable Rate Limiter')
subsysCov =
5 6
Определите покрытие процента, достигнутое при помощи decisioninfo.
percentCov = 100 * (subsysCov(1)/subsysCov(2))
percentCov = 83.3333
Укажите, что вы хотите извлечь данные о Decision Coverage для блока switch под названием, Применяют Ограниченное Усиление при помощи 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 выведите, вы видите, что блок switch под названием Применяется, Ограниченное Усиление никогда не было ложным потому что ложный случай 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% Decision Coverage, потому что выровненные по ширине цели считаются, как удовлетворено.
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 — Decision Coverage
mcdcinfo — Модифицированный Decision Coverage условия (MCDC)
overflowsaturationinfo — Насыщайте на покрытии целочисленного переполнения
relationalboundaryinfo — Реляционное граничное покрытие
sigrangeinfo — Покрытие диапазона сигнала
sigsizeinfo — Покрытие размера сигнала
tableinfo — Покрытие блока интерполяционной таблицы
getCoverageinfo — Покрытие для блоков Simulink® Design Verifier™
Для примера, который использует эти функции, смотрите Подробную информацию Извлечения из Данных о Покрытии.
slcoverage.BlockSelector | slcoverage.Filter | slcoverage.FilterRule | slcoverage.MetricSelector