Отладка улучшенного измененного условия и Decision Coverage (MCDC) с помощью Model Slicer

В этом примере показано, как найти сгенерированные Simulink Design Verifier (SLDV) цели, связанные с определенным объектом модели, с помощью Model Slicer. После определения целей Model Slicer подсвечивает срез на шаге, когда цель наблюдаема.

Этот пример использует следующие продукты, чтобы продемонстрировать отладку улучшенного MCDC:

  • Simulink Design Verifier

  • Нарезка модели

Усиленный MCDC анализирует обнаруживаемость каждой цели в модели и генерирует не маскирующие тесты для каждой цели. Он координирует эффект нисходящих блоков, чтобы избежать эффектов маскировки. Он также вычисляет места обнаружения для каждой обнаруживаемой цели, где можно наблюдать эффект цели. Эти данные доступны в sldvdemo_cruise_control_sldvdata.mat файл, сгенерированный анализом. Эти сайты обнаружения могут быть добавлены к критериям эквивалентности обратной проверки.

Этот пример использует следующее строение среза:

  • Начальная точка задается как объект модели, который будет наблюдаться.

  • Точка исключения устанавливается как точка обнаружения, сближающаяся с целью, сгенерированной SLDV.

  • Распространение сигнала устанавливается на нисходящий (прямой срез).

Шаг 1: Подготовьте модель

1. Откройте модель.

model = 'sldvdemo_cruise_control';
open_system(model);

2. Загрузите файл данных, сгенерированный SLDV (sldvData) для генерации тестов с помощью Enhanced MCDC.

load('sldvdemo_cruise_control_sldvdata.mat');

3. Выберите объект модели, для которого необходимо выделить цель, и найдите его SID.

modelObjIdentifier = 'sldvdemo_cruise_control/Controller/Switch3';
modelobjSID = Simulink.ID.getSID(modelObjIdentifier);

Шаг 2: Настройка модели Slicer

1. Включите FastRestart для модели.

set_param(model,'FastRestart','on');

Включение FastRestart будет моделировать модель и собирать данные моделирования в различные метки времени. Это позволит нам использовать опции Шаг Назад и Шаг Вперед.

2. Создайте и активируйте объект Model Slicer.

slicerObject = slslicer(model);
activate(slicerObject);

3. Установите усиление сигнала в нисходящем направлении.

slicerObject.Configuration.SignalPropagation = 'downstream';

Шаг 3: Найти цели, связанные с объектом модели

1. Доступ к sldvData с объектом класса SldvDataExplorer.

sldvObj = Sldv.enhancedMCDC.SldvDataExplorer(sldvData);

2. Найдите все цели, связанные с объектом модели, и детали целей.

[objectives, tableOfObjectives] = sldvObj.getObjectivesForModelObj(modelobjSID);
disp(tableOfObjectives);
    ObjectiveNum       Type                                Description                             Detectability      Status       TestCaseId
    ____________    __________    _____________________________________________________________    _____________    ___________    __________

         1          "Decision"    "logical trigger input false (output is from 3rd input port)"    "Detectable"     "Satisfied"        1     
         2          "Decision"    "logical trigger input true (output is from 1st input port)"     "Detectable"     "Satisfied"        1     

Детали фоллинга целей сохранены в tableOfObjectives таблица:

  • ObjectiveNum - Целевой номер.

  • Тип - MCDC/Решение/Условие.

  • Описание - Описание цели, сгенерированной SLDV.

  • Обнаруживаемость - статус обнаруживаемости цели.

  • Статус - Статус цели.

  • TestCaseId - целое число, которое представляет индекс теста или контрпримера, который адресован цели.

Шаг 4: Выделение целей

В данном примере мы выделим первую цель из таблицы.

1. Получите объект входа симуляции с входом значениями, установленными согласно теста, которая соответствует цели.

[simIn, atStep, ~] = sldvObj.getSimInObjForObjective(objectives(1));

2. Разрешите откат в модели, чтобы можно было шагнуть назад в модели и задать количество шагов отката симуляции равным 1.

simIn = simIn.setModelParameter('EnableRollBack','on');
simIn = simIn.setModelParameter('NumberOfSteps', 1);

3. Применить входной объект simulink к модели.

slicerObject.applySimInToModel(simIn);

4. Найдите все сайты обнаружения для выбранной цели.

objectDetectionSites = sldvObj.getObjectDetectionSites(objectives(1));

5. Добавьте все сайты обнаружения в качестве точек исключения.

for n = 1:length(objectDetectionSites)
    detectionSite = objectDetectionSites(n).modelObj;
    slicerObject.addExclusionPoint(detectionSite);   
end

6. Добавьте объект модели как начальная точка.

slicerObject.addStartingPoint(modelobjSID);

7. Шаг к точке в тестовом шкафу, где цель наблюдаема.

for q = 1:atStep 
    slicerObject.stepForward();
end

Теперь можно заметить, что срез подсвечивается.

Очистка

Выполните следующие действия для очистки модели:

1. Очистить объект среза.

2. Очистите входной объект simulink.

clear slicerObject simIn

3. Сбросьте параметр FastRestart модели.

set_param(model,'FastRestart','off');