В этом примере показано, как найти сгенерированные Simulink Design Verifier (SLDV) цели, связанные с определенным объектом модели, с помощью Model Slicer. После определения целей Model Slicer подсвечивает срез на шаге, когда цель наблюдаема.
Этот пример использует следующие продукты, чтобы продемонстрировать отладку улучшенного MCDC:
Simulink Design Verifier
Нарезка модели
Усиленный MCDC анализирует обнаруживаемость каждой цели в модели и генерирует не маскирующие тесты для каждой цели. Он координирует эффект нисходящих блоков, чтобы избежать эффектов маскировки. Он также вычисляет места обнаружения для каждой обнаруживаемой цели, где можно наблюдать эффект цели. Эти данные доступны в sldvdemo_cruise_control_sldvdata.mat
файл, сгенерированный анализом. Эти сайты обнаружения могут быть добавлены к критериям эквивалентности обратной проверки.
Этот пример использует следующее строение среза:
Начальная точка задается как объект модели, который будет наблюдаться.
Точка исключения устанавливается как точка обнаружения, сближающаяся с целью, сгенерированной SLDV.
Распространение сигнала устанавливается на нисходящий (прямой срез).
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);
1. Включите FastRestart для модели.
set_param(model,'FastRestart','on');
Включение FastRestart будет моделировать модель и собирать данные моделирования в различные метки времени. Это позволит нам использовать опции Шаг Назад и Шаг Вперед.
2. Создайте и активируйте объект Model Slicer.
slicerObject = slslicer(model); activate(slicerObject);
3. Установите усиление сигнала в нисходящем направлении.
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
Детали фоллинга целей сохранены в tableOfObjectives
таблица:
ObjectiveNum - Целевой номер.
Тип - MCDC/Решение/Условие.
Описание - Описание цели, сгенерированной 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. Шаг к точке в тестовом шкафу, где цель наблюдаема.
for q = 1:atStep slicerObject.stepForward(); end
Теперь можно заметить, что срез подсвечивается.
Выполните следующие действия для очистки модели:
1. Очистить объект среза.
2. Очистите входной объект simulink.
clear slicerObject simIn
3. Сбросьте параметр FastRestart модели.
set_param(model,'FastRestart','off');