Анализ MCDC для каскадных логических блоков

Этот пример иллюстрирует, как Simulink® Coverage™ записывает метрику MCDC для каскада блоков Логического оператора.

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

В Simulink существуют различные способы реализовать Булеву логику, такой как с помощью оператора if в блоке MATLAB function, условного перехода в диаграмме Stateflow или комбинации нескольких блоков Логического оператора, соединенных вместе в каскаде.

Модель slvnvdemo_cv_logic_cascade в качестве примера реализует то же Булево выражение с помощью кода MATLAB в блоке MATLAB function, а также с каскадом блоков Логического оператора.

Используйте следующую команду, чтобы открыть модель slvnvdemo_cv_logic_cascade:

open_system('slvnvdemo_cv_logic_cascade');

Откройте блок MATLAB function, чтобы видеть присоединенную функцию.

open_system('slvnvdemo_cv_logic_cascade/MATLAB Function')

В блоке MATLAB function, если (&& (b | | c)) будет верно, то сигнал Data1 будет выведен; в противном случае сигнал Data2 выводится.

Откройте подсистему 'Логическое Каскадное' использование следующей команды и обратите внимание, что эта подсистема реализует ту же самую логику с помощью блоков Логического оператора и Переключателя.

open_system('slvnvdemo_cv_logic_cascade/Logic Cascade');

Наконец, откройте Signal Builder и обратите внимание, что существует три комбинации, данные для входного a булевской переменной, b, и c. Эти комбинации являются FFF, TFT и TTT.

open_system('slvnvdemo_cv_logic_cascade/Signal Builder');

Закройте Signal Builder.

close_system('slvnvdemo_cv_logic_cascade/Signal Builder', 0);

Сравнение результатов MCDC в отчете покрытия

Моделируйте модель и сгенерируйте Отчет Покрытия.

testObj = cvtest('slvnvdemo_cv_logic_cascade');
testObj.settings.decision = 1;
testObj.settings.condition = 1;
testObj.settings.mcdc = 1;
covdata = cvsim(testObj); % Simulate for coverage
cvhtml('exampleReport.html',covdata); % Generate Coverage Report

Результаты MCDC для блока MATLAB function

В сгенерированном отчете перейдите к деталям для блока MATLAB function.

Результаты MCDC для оператора if в блоке MATLAB function состоят в том, как ожидался бы, давался бы заданные входные параметры.

Результаты MCDC для логического каскада

Затем исследуйте результаты на логический каскад. Вспомните, что эта комбинация блоков реализует ту же логику как код MATLAB в блоке MATLAB function; поэтому, мы ожидали бы, что результатами MCDC будет то же самое, также.

Давайте сначала смотреть на восходящий Or_Block.

Заметьте, что сводные данные MCDC для этого блока имеют ссылку с текстом "see And_Block", относясь к Логическому оператору в корне каскада. Нажмите на эту ссылку, которая будет взята к разделу отчета, показывающего результаты для этого блока.

Блок Logical Operator в корне каскада (в этом случае And_Block) сообщает о результатах MCDC для целого каскада.

Детали для анализа MCDC каскада сначала показывают ссылку, иллюстрирующую, сколько блоков включено в каскад. При нажимании на ссылку "Includes 2 blocks" поднимет модель и подсветит два блока, включенные в каскад (Or_Block и And_Block).

Этот раздел отчета затем показывает Булево выражение, представленное каскадом, в этом случае C1 && (C2 | | C3), где C1, C2 и C3 являются условиями, которые соответствуют трем входным параметрам к каскаду. Для каждого условия таблица иллюстрирует связанный блок и его вход (показанный в круглой скобке), а также результат MCDC. Эти результаты показывают, что входные комбинации, TTx, Fxx и TFT были все осуществлены, но TFF не имеет. Это совпадает с ожиданием, учитывая входные параметры, сгенерированные Signal Builder (TTT, FFF и TFT).

Кроме того, как ожидалось, и Булево выражение и результаты MCDC, показанные для этого каскадного соответствия, что показали для оператора if, реализующего эквивалентную логику в блоке MATLAB function.

Информатор покрытия и образцовая окраска

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

cvmodelview(covdata);

Как был показан в Отчете Покрытия, цели MCDC не зарегистрированы для отдельных блоков Логического оператора в каскаде; скорее цели MCDC зарегистрированы для Булевого выражения, представленного комбинацией блоков в каскаде, и о результатах сообщают относительно итогового блока в каскаде. Выделение модели отражает это, также. Учитывая входные комбинации FFF, TFT и TTT для трех входных параметров a, b, и c, Or_Block получают полный охват, потому что все цели покрытия Условия блока были удовлетворены. Однако, потому что существуют цели MCDC, сопоставленные с этим каскадом, которые не были удовлетворены, And_block (итоговый блок в каскаде) подсвечен в красном.

Наведите на And_block для получения дополнительной информации.

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

Командная строка

Можно также получить результаты MCDC для каскада логического блока из командной строки MATLAB с помощью mcdcinfo. Снова, цели MCDC для каскада будут найдены на итоговом блоке в каскаде.

[coverage_casc, description_casc] = mcdcinfo(covdata, 'slvnvdemo_cv_logic_cascade/Logic Cascade/And_Block')
description_casc.condition(1)
description_casc.condition(2)
description_casc.condition(3)
coverage_casc =

     1     3


description_casc = 

  struct with fields:

                 text: 'C1 && (C2 || C3)'
            condition: [1×3 struct]
           isFiltered: 0
      filterRationale: ''
    justifiedCoverage: 0


ans = 

  struct with fields:

               text: 'C1 (And_Block In1)'
           achieved: 1
           trueRslt: 'TFT'
          falseRslt: 'Fxx'
         isFiltered: 0
    filterRationale: ''


ans = 

  struct with fields:

               text: 'C2 (Or_Block In1)'
           achieved: 0
           trueRslt: 'TTx'
          falseRslt: '(TFF)'
         isFiltered: 0
    filterRationale: ''


ans = 

  struct with fields:

               text: 'C3 (Or_Block In2)'
           achieved: 0
           trueRslt: 'TFT'
          falseRslt: '(TFF)'
         isFiltered: 0
    filterRationale: ''

Другие блоки, которые являются членами каскада, не покажут цели MCDC.

[coverage_or, description_or] = mcdcinfo(covdata, 'slvnvdemo_cv_logic_cascade/Logic Cascade/Or_Block')
coverage_or =

     []


description_or =

     []

Замыкание накоротко булевых выражений для MCDC

В модели slvnvdemo_cv_logic_cascade в качестве примера настройки покрытия установлены таким образом, что блоки Логического оператора обработаны как замыкание накоротко.

Из-за этой установки, при анализе каскада блоков Логического оператора, операторы в соответствующем Булевом выражении обработаны как закорачивающий в целях MCDC. Как проиллюстрировано результатами, показанными выше, это означает, что MCDC распознает замыкание накоротко, которое происходит и в и через блоки Логического оператора. По сути, результаты MCDC для каскада тех соответствий блоков Логического оператора из оператора if в блоке MATLAB function, когда последний всегда обрабатывается как замыкание накоротко.

Замыкание накоротко в блоке

Заметьте, что в примере выше, Истина результатом цели MCDC для C2 является TTx, указывая, что, когда C1 и C2 оба верны, C3 несуществен из-за замыкания накоротко в Or_Block.

Замыкание накоротко через несколько блоков

Кроме того, считайте Ложь результатом цели MCDC для C1, Fxx. Этот результат иллюстрирует, как анализ MCDC распознает замыкание накоротко через блоки. Поскольку первый вход к And_Block является ложным, второй вход закорачивается. Впоследствии, в целях MCDC, это короткие схемы Or_Block (и оба из его входных параметров) полностью. Поведение замыкания накоротко MCDC для каскадов логического блока происходит на основе приоритета операций в соответствующем Булевом выражении (независимо от порядка выполнения блоков Логического оператора во время симуляции).

Незамыкание накоротко Булевых выражений

Можно также обработать Булево выражение, представленное каскадом блоков Логического оператора как не закорачивающий во время анализа MCDC, при условии, что определение маскирования MCDC используется. Для этого установите параметр CovLogicBlockShortCircuit на "off" и гарантируйте, что CovMcdcMode установлен в "Masking". Это, на самом деле, настройки по умолчанию для этих параметров при создании новой модели.

Отметьте, если CovLogicBlockShortCircuit будет "off", и CovMcdcMode установлен в "UniqueCause" затем, то блоки Логического оператора в каскаде будут анализироваться индивидуально в целях MCDC, и MCDC для Булевого выражения, представленного каскадом в целом, не будет вычислен.

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

set_param('slvnvdemo_cv_logic_cascade', 'CovLogicBlockShortCircuit', 'off');
set_param('slvnvdemo_cv_logic_cascade', 'CovMcdcMode', 'Masking');
covdata_non_sc = cvsim('slvnvdemo_cv_logic_cascade'); % Simulate for coverage with logic block short-circuiting off
cvhtml('exampleReport_non_sc.html',covdata_non_sc); % Generate Coverage Report

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

close_system('slvnvdemo_cv_logic_cascade',0);
Для просмотра документации необходимо авторизоваться на сайте