Извлечение подробной информации из данных о покрытии

В этом примере показано, как сервисные команды покрытия могут использоваться, чтобы извлечь информацию для отдельной подсистемы, блока или объекта Stateflow® от объектов cvdata.

Модель в качестве примера

Этот пример иллюстрирует доступ к командной строке данных о покрытии для маленькой модели, которая содержит аспекты различных поддерживаемых метрик покрытия.

Используйте следующие команды, чтобы открыть модель 'slvnvdemo_cv_small_controller' и ее подсистема 'Усиление'.

open_system('slvnvdemo_cv_small_controller');
open_system('slvnvdemo_cv_small_controller/Gain');

Сгенерируйте данные о покрытии и отчет HTML

Симулируйте модель с помощью sim. Используйте Simulink.SimulationInput возразите, чтобы получить настройки покрытия и использовать его в качестве входа к sim. После симуляции данные о покрытии будут храниться в cvdata объект.

simIn = Simulink.SimulationInput('slvnvdemo_cv_small_controller');
simIn = simIn.setModelParameter('CovEnable','on');
simIn = simIn.setModelParameter('CovMetricStructuralLevel','MCDC');
simIn = simIn.setModelParameter('CovSaveSingleToWorkspaceVar','on');
simIn = simIn.setModelParameter('CovSaveName','covData');
simIn = simIn.setModelParameter('CovScope','EntireSystem');
simIn = simIn.setModelParameter('CovMetricLookupTable','on');
simIn = simIn.setModelParameter('CovMetricSignalRange','on');
simOut = sim(simIn);

Обработайте данные о покрытии, возвращенные в cvsim команда с командой генерации отчета cvhtml. Получившийся отчет является удобным представлением покрытия модели для целой модели.

cvhtml('tempfile.html',covData);

Данные о покрытии также доступны в симуляции выходной объект.

simOut
simOut = 

  Simulink.SimulationOutput:
                covData: [1x1 cvdata] 
                   tout: [59x1 double] 
                   yout: [59x1 double] 

     SimulationMetadata: [1x1 Simulink.SimulationMetadata] 
           ErrorMessage: [0x0 char] 

Извлеките информацию о Decision Coverage

Используйте decisioninfo команда, чтобы извлечь информацию о Decision Coverage для отдельных блоков Simulink или объектов Stateflow.

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

cov = decisioninfo(covData,'slvnvdemo_cv_small_controller')
percent = 100*cov(1)/cov(2)
cov =

     4     6


percent =

   66.6667

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

[blkCov, description] = decisioninfo(covData,'slvnvdemo_cv_small_controller/Saturation')

decision1 = description.decision(1).text
out_1a = description.decision(1).outcome(1).text
count_1a = description.decision(1).outcome(1).executionCount
out_1b = description.decision(1).outcome(2).text
count_1b = description.decision(1).outcome(2).executionCount
blkCov =

     3     4


description = 

  struct with fields:

           isFiltered: 0
    justifiedCoverage: 0
          isJustified: 0
      filterRationale: ''
             decision: [1x2 struct]


decision1 =

    'U > LL'


out_1a =

    'false'


count_1a =

     0


out_1b =

    'true'


count_1b =

     6

Количественная информация о покрытии доступна для каждого результата в иерархии, которая содержит или имеет результаты цели покрытия. Текстовые описания сгенерированы только для объектов, которые имеют сами результаты цели покрытия. Например, вызовите decisioninfo для виртуального Усиления подсистемы и возвращаемого значения описания пусто.

[blkCov, description] = decisioninfo(covData,'slvnvdemo_cv_small_controller/Gain')
blkCov =

     1     2


description = 

  struct with fields:

           isFiltered: 0
    justifiedCoverage: 0
          isJustified: 0
      filterRationale: ''

В некоторых случаях объект имеет внутренние цели покрытия, но также и содержит потомков с дополнительными целями покрытия. Информация о покрытии обычно включает всех потомков, если третий аргумент для игнорирования потомков не установлен в 1.

subsysOnlycov = decisioninfo(covData,'slvnvdemo_cv_small_controller/Gain',1)
subsysOnlycov =

     []

decisioninfo команда также работает с указателями блока, идентификаторами Stateflow и объектами API Stateflow.

blkHandle = get_param('slvnvdemo_cv_small_controller/Saturation','Handle')
blkCov = decisioninfo(covData,blkHandle)
blkHandle =

   31.0009


blkCov =

     3     4

Если объект не имеет никакого Decision Coverage, команда возвращает пустые выходные параметры.

missingBlkCov = decisioninfo(covData,'slvnvdemo_cv_small_controller/Sine1')
missingBlkCov =

     []

Извлеките информацию о покрытии условия

Покрытие условия указывает, были ли логические входные параметры к Булевым выражениям оценены к обеим истине и лжи. В Simulink условиями являются входные параметры к логическим операциям.

conditioninfo команда для извлечения информации о покрытии условия очень похожа на decisioninfo команда. Это обычно возвращает информацию об объекте и всех его потомках, но может взять третий аргумент, который указывает, должны ли потомки быть проигнорированы. Это может также возвратить второй выходной параметр, содержащий описания каждого условия.

cov = conditioninfo(covData,'slvnvdemo_cv_small_controller/Gain/Logic')
[cov, desc] = conditioninfo(covData,'slvnvdemo_cv_small_controller/Gain/Logic');
desc.condition(1)
desc.condition(2)
cov =

     2     4


ans = 

  struct with fields:

            isFiltered: 0
           isJustified: 0
       filterRationale: ''
                  text: 'port1'
              trueCnts: 59
             falseCnts: 0
     trueOutcomeFilter: [1x1 struct]
    falseOutcomeFilter: [1x1 struct]
        trueExecutedIn: []
       falseExecutedIn: []


ans = 

  struct with fields:

            isFiltered: 0
           isJustified: 0
       filterRationale: ''
                  text: 'port2'
              trueCnts: 0
             falseCnts: 59
     trueOutcomeFilter: [1x1 struct]
    falseOutcomeFilter: [1x1 struct]
        trueExecutedIn: []
       falseExecutedIn: []

Извлеките Модифицированную информацию об Условии/Decision Coverage

Модифицированному Условию/Decision Coverage (MCDC) удовлетворяют для условия в Булевом выражении, если существует две оценки выражения, представляя пару независимости, которые иллюстрируют, что значение условия независимо влияет на результат целого выражения. То есть для этих оценок, переключая значение условия заставил бы результат выражения переключаться также.

В этом примере логический блок AND анализируется для MCDC, и эта информация может быть извлечена с помощью mcdcinfo команда. Эта команда использует тот же синтаксис в качестве conditioninfo и decisioninfo команды.

[cov, desc] = mcdcinfo(covData,'slvnvdemo_cv_small_controller/Gain/Logic')
desc.condition(1)
desc.condition(2)
cov =

     0     2


desc = 

  struct with fields:

                 text: 'Output'
            condition: [1x2 struct]
           isFiltered: 0
      filterRationale: ''
    justifiedCoverage: 0


ans = 

  struct with fields:

               text: 'port1'
           achieved: 0
           trueRslt: '(TT)'
          falseRslt: '(FT)'
         isFiltered: 0
        isJustified: 0
    filterRationale: ''
     trueExecutedIn: []
    falseExecutedIn: []


ans = 

  struct with fields:

               text: 'port2'
           achieved: 0
           trueRslt: '(TT)'
          falseRslt: 'TF'
         isFiltered: 0
        isJustified: 0
    filterRationale: ''
     trueExecutedIn: []
    falseExecutedIn: []

Извлеките информацию о покрытии интерполяционных таблиц

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

Второй выходной аргумент вызывает tableinfo возвратить выполнение значит все интервалы интерполяции. Если таблица имеет выходные значения M на n, количества выполнения возвращены в M+1-by-N+1 матрица.

Третий выходной аргумент вызывает tableinfo возвратить количества, где вход был точно равен точке останова. Это возвращено в массиве ячеек векторов, один для каждой размерности в таблице.

[cov,execCnts,brkEq] = tableinfo(covData, 'slvnvdemo_cv_small_controller/Gain/Gain Table')
cov =

    23   121


execCnts =

     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     2    12    14    10     2     0     0     0
     0     0     4    12     0     0     0    12     0     0     0
     0     0    22     0     0     0     0     0    12     0     0
     0     0    21     0     0     0     0     0    59     0     0
     0     0    21     0     0     0     0     0    29     0     0
     0     0     7    28     0     0     0    28     6     0     0
     0     0     0     4    22    18    23     5     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0


brkEq =

  1x2 cell array

    {10x1 double}    {10x1 double}

Извлеките информацию о диапазоне сигнала

Метрика диапазона сигнала записывает наименьшее и самое большое значение блока Simulink объекты данных Stateflow и выходные параметры. sigrangeinfo команда возвращает два возвращаемых аргумента для минимальных и максимальных значений, соответственно.

sigrangeinfo команда работает только на листовые блоки, которые выполняют расчет; в противном случае команда возвращает пустые аргументы.

[sigMin, sigMax] = sigrangeinfo(covData,'slvnvdemo_cv_small_controller/Gain/Gain Table')  % Leaf
[sigMin, sigMax] = sigrangeinfo(covData,'slvnvdemo_cv_small_controller/Gain')             % Nonleaf
sigMin =

    3.3656


sigMax =

    7.6120


sigMin =

     []


sigMax =

     []