В этом примере показано, как загрузить, проанализируйте и запросите данные о покрытии с помощью скрипта.
Загрузите данные о покрытии
Загрузите модель, затем восстановите сохраненные данные о покрытии из файла 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