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

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

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

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

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

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

Генерация данных о покрытии и отчета HTML

Симулируйте модель с cvsim команда. Эта команда собирает данные о покрытии как побочный эффект и возвращает эту информацию в объекте cvdata. Объект cvdata является объектом MATLAB®, который ссылается на внутренние данные, хранимые в инструменте покрытия и структурах данных модели, которые производят те данные.

testObj = cvtest('slvnvdemo_cv_small_controller');
testObj.settings.decision = 1;
testObj.settings.condition = 1;
testObj.settings.mcdc = 1;
testObj.settings.tableExec = 1;
testObj.settings.sigrange = 1;
data = cvsim(testObj)
data = ... cvdata
                 id: 1621
               type: TEST_DATA
               test: cvtest object
             rootID: 1623
           checksum: [1x1 struct]
          modelinfo: [1x1 struct]
          startTime: 01-Jul-2018 00:20:16
           stopTime: 01-Jul-2018 00:20:16
  intervalStartTime: 0
   intervalStopTime: 0
simulationStartTime: 0
 simulationStopTime: 10
            metrics: [1x1 struct]
             filter: 
            simMode: Normal

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

cvhtml('tempfile.html',data);

Извлечение информации о Decision Coverage

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

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

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

     4     6


percent =

   66.6667

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

[blkCov, description] = decisioninfo(data,'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: [1×2 struct]


decision1 =

    'U > LL'


out_1a =

    'false'


count_1a =

     0


out_1b =

    'true'


count_1b =

     6

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

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

     1     2


description = 

  struct with fields:

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

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

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

     []

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

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

   34.0012


blkCov =

     3     4

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

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

     []

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

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

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

cov = conditioninfo(data,'slvnvdemo_cv_small_controller/Gain/Logic')
[cov, desc] = conditioninfo(data,'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: [1×1 struct]
    falseOutcomeFilter: [1×1 struct]


ans = 

  struct with fields:

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

Извлечение Модифицированной информации об Условии/Decision Coverage

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

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

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

     0     2


desc = 

  struct with fields:

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


ans = 

  struct with fields:

               text: 'port1'
           achieved: 0
           trueRslt: '(TT)'
          falseRslt: '(FT)'
         isFiltered: 0
    filterRationale: ''


ans = 

  struct with fields:

               text: 'port2'
           achieved: 0
           trueRslt: '(TT)'
          falseRslt: 'TF'
         isFiltered: 0
    filterRationale: ''

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

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

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

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

[cov,execCnts,brkEq] = tableinfo(data, '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 =

  1×2 cell array

    {10×1 double}    {10×1 double}

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

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

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

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

    3.3656


sigMax =

    7.6120


sigMin =

     []


sigMax =

     []

Конец путем закрытия модели.

close_system('slvnvdemo_cv_small_controller',0);