В этом примере показано, как найти, что Simulink Design Verifier (SLDV) сгенерировал цели, связанные с определенным Ножом Модели использования объекта модели. Если цели идентифицированы, Нож Модели подсвечивает срез на шаге, когда цель заметна.
Этот пример использует следующие продукты, чтобы продемонстрировать отладку расширенного MCDC:
Simulink Design Verifier
Нож модели
Улучшенный MCDC анализирует обнаружительную способность каждой цели в модели и генерирует тесты немаскирования для каждой цели. Это координирует эффект нисходящих блоков избежать эффектов маскировки. Это также вычисляет сайты обнаружения для каждой обнаруживаемой цели, где эффект цели может наблюдаться. Эти данные доступны в sldvdemo_cruise_control_sldvdata.mat
файл сгенерирован анализом. Эти сайты обнаружения могут быть добавлены к эквивалентным критериям компенсационного тестирования.
Этот пример использует следующую настройку ножа:
Начальная точка собирается как объект модели наблюдаться.
Точка исключения установлена как точка обнаружения relavent к цели, сгенерированной SLDV.
Распространение сигнала установлено в нисходящий поток (прямой срез).
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);
1. Включите FastRestart для модели.
set_param(model,'FastRestart','on');
Включение FastRestart симулирует модель и соберет данные моделирования в различных метках времени. Это позволит нам использовать, Отступают и Шаг Прямые опции.
2. Создайте и активируйте объект Model Slicer.
slicerObject = slslicer(model); activate(slicerObject);
3. Установите сигнал propogation на нисходящий поток.
slicerObject.Configuration.SignalPropagation = 'downstream';
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 - Целое число, которое представляет индекс теста или контрпримера, который обращается к цели.
В данном примере мы подсветим первую цель из таблицы.
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');