exponenta event banner

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

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

Пример модели

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

Используйте следующие команды для открытия модели slvnvdemo _ cv _ small _ controller и ее подсистемы Gain.

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] 

Извлечь информацию о покрытии принятия решения

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

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

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

     4     6


percent =

   66.6667

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

[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 для виртуальной подсистемы Gain, и возвращаемое значение описания пустое.

[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

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

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: []

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

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

В этом примере логический блок И анализируется для 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 на-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 =

     []