exponenta event banner

Отладка расширенного модифицированного условия и покрытия принятия решений (MCDC) с использованием модельного среза

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

В этом примере для демонстрации отладки усовершенствованного 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: Настройка среза модели

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

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

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

2. Создайте и активируйте объект «Срез модели».

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 таблица:

  • ОNum - Номер цели.

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

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

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

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

  • Test CaseId - целое число, представляющее индекс тестового случая или контрпримера, обращающегося к цели.

Шаг 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. Сбросьте параметр StartRestart модели.

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