Получите детали покрытия из результатов

Анализируйте данные о покрытии Используя скрипт

В этом примере показано, как загрузить, проанализируйте и запросите данные о покрытии с помощью скрипта.

Переместите текущую директорию MATLAB® в местоположение, которое содержит файлы в качестве примера.

openExample('slcoverage/AnalyzeCoverageDataUsingAScriptExample');

Загрузите данные о покрытии

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

Для примера, который использует эти функции, смотрите Подробную информацию Извлечения из Данных о Покрытии.

Смотрите также

| | |

Похожие темы