Отладьте Расширенное Модифицированное Условие и Decision Coverage (MCDC) Нож Модели использования

В этом примере показано, как найти, что Simulink Design Verifier (SLDV) сгенерировал цели, связанные с определенным Ножом Модели использования объекта модели. Если цели идентифицированы, Нож Модели подсвечивает срез на шаге, когда цель заметна.

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

  • Simulink Design Verifier

  • Нож модели

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

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

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

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

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

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

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

model = 'sldvdemo_cruise_control';
open_system(model);

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

load('sldvdemo_cruise_control_sldvdata.mat');

3. Выберите объект модели, для которого цель должна быть подсвечена и найти, что это - SID.

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

Шаг 2: Подготовка Ножа Модели

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

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

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

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

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

3. Установите сигнал propogation на нисходящий поток.

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     

follwing детали целей сохранены в tableOfObjectives таблица:

  • ObjectiveNum - Объективный номер.

  • Введите - MCDC/Decision/Condition.

  • Описание - Описание цели, как сгенерировано 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. Продвиньтесь в точку в testcase, где цель заметна.

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

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

Очистка

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

1. Очистите объект ножа.

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

clear slicerObject simIn

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

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