В этом примере показано, как Simulink ® Design Verifier™ может расширить тестовые случаи с помощью дополнительных временных шагов, чтобы эффективно сгенерировать полные наборы тестов.
Пример начинается с модели, содержащей характеристики задержки по времени, которые делают генерацию тестов сложной. Путем создания модели тестовой обвязки по умолчанию и создания одного теста вручную, устраняется критическое препятствие для эффективной генерации тестов. Simulink Design Verifier принимает за вход записанные значения из модели тестовой обвязки и эффективно расширяет этот тест, чтобы создать полный тестовый набор.
The sldvdemo_sbr_extend_design модель включает диаграмму Stateflow ® SBR который использует временную логику, так что для перехода от KEY_OFF требуются очень длинные тесты состояние в KEY_ON состояние. Этот тип характеристики задержки по времени распространен в проектах, где задержка используется для отклонения ложного поведения или для ожидания ответа физической системы или пользователя. В этом проекте удовлетворение временной логики в этом переходе является общим препятствием для проверки любого из состояний и переходов в KEY_ON состояние.
К счастью, этот тип характеристики задержки обычно легко идентифицировать и удовлетворить с вручную созданным тестом.
open_system('sldvdemo_sbr_extend_design'); sf('Open',sldvdemo_ssid_to_sfid('sldvdemo_sbr_extend_design/SBR',11));

Функция Simulink Design Verifier sldvmakeharness создает модель тестовой обвязки с блоком, который генерирует вход значения в экспериментальные модели, включенные в блок модели-ссылки.
Можно изменить тестовые данные в модели тестовой обвязки путем редактирования значений данных вручную с помощью пользовательского интерфейса Signal Builder. Можно также добавить больше тесты, создав новые группы сигналов в блоке. Также можно использовать signalbuilder команда программно выполнить то же самое.
В этом примере вы задаете тест, которая сохраняет систему в KEY_OFF состояние в течение 5 секунд:
[~, harnessModelFilePath] = sldvmakeharness('sldvdemo_sbr_extend_design',[],[],true); [~, harnessModel] = fileparts(harnessModelFilePath); startingTestTime = 0:0.5:5; startingTestData = cell(3, 1); lengthStartingTest = length(startingTestTime); startingTestData{1} = zeros(1,lengthStartingTest); startingTestData{2} = zeros(1,lengthStartingTest); startingTestData{3} = ones(1,lengthStartingTest); signalBuilderBlock = sldvdemo_signalbuilder_block(harnessModel); signalbuilder(signalBuilderBlock,'Append',... startingTestTime, startingTestData,... {'Inputs.Speed','Inputs.SeatBeltFasten','Inputs.KEY'},'Starting Test Case'); signalbuilder(signalBuilderBlock, 'ActiveGroup', 2); open_system(signalBuilderBlock);


В порядок использования начального теста, определенной выше, вы используете sldvlogsignals функция для захвата значений входа в необходимом формате записанных данных.
Первый вход в sldvlogsignals является путем к блоку Model, и второй вход является индексом группы сигналов в модели тестовой обвязки. Когда вы вызываете sldvlogsignalsмоделируется родительская модель, содержащая блок Model.
Родительская модель не ограничена моделями тестовой обвязки Simulink Design Verifier. Кроме того, можно записать данные из модели симуляции с обратной связью, которая использует блок Model для включения контроллера, так что тесты контроллера более реалистично отражают непрерывное поведение времени, ожидаемое в системе с обратной связью.
[~, modelBlock] = find_mdlrefs(harnessModel, false);
loggeddata = sldvlogsignals(modelBlock{1},2);

Прежде чем вы сможете использовать существующие тестовые данные во время генерации тестов, данные должны быть сохранены в MAT-файле. Вы активируете расширение тестового примера в панели Генерация тестов параметров конфигурации Simulink Design Verifier. Выберите Расширить существующие тесты и укажите файл MAT в поле Файл данных.
Сгенерированные тесты либо расширяют один из начальных тестовых примеров одним или несколькими новыми временными шагами, либо будут задавать один или несколько временных шагов, начиная с начальной, или по умолчанию, строения.
save('existingtestcase.mat', 'loggeddata'); opts = sldvoptions; opts.ExtendExistingTests = 'on'; opts.ExistingTestFile = 'existingtestcase.mat'; opts.SaveHarnessModel = 'off'; opts.SaveReport = 'off'; [~, fileNames] = sldvrun('sldvdemo_sbr_extend_design', opts, true);
The sldvruntest Функция проверяет, что новый тестовый набор достигает полного покрытия модели. The cvhtml функция создает отчет о покрытии, который указывает, что 100% Decision Coverage достигается сгенерированными тестовыми векторами.
[~, finalCov] = sldvruntest('sldvdemo_sbr_extend_design', fileNames.DataFile, [], true); cvhtml('Final Coverage', finalCov);

Чтобы завершить демонстрацию, закройте все модели и удалите сохраненный файл записанных данных.
close_system(harnessModel,0); close_system('sldvdemo_sbr_extend_design'); delete('existingtestcase.mat');