В этом примере показано, как 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');