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

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

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

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

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

Укажите, что вы хотите извлечь данные о Decision Coverage для блока switch под названием 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 выход, можно увидеть, что блок switch с именем 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% 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 - Охват решением об измененных условиях (MCDC)

  • overflowsaturationinfo - Насыщение по целочисленному переполнению покрытия

  • relationalboundaryinfo - Реляционный краевой охват

  • sigrangeinfo - Охват диапазона сигнала

  • sigsizeinfo - Охват по размеру сигнала

  • tableinfo - Покрытие блока интерполяционной таблицы

  • getCoverageinfo - Покрытие для Simulink® Design Verifier™ блоков

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

См. также

| | |

Похожие темы