В этом примере показано, как Simulink ® Design Verifier™ может расширить тестовые примеры с помощью дополнительных временных шагов для эффективного создания полных тестовых наборов.
Пример начинается с модели, содержащей характеристики временной задержки, которые затрудняют генерацию теста. Создание модели тестового кабеля по умолчанию и разработка одного теста вручную устраняют критическое препятствие для эффективной генерации теста. Simulink Design Verifier использует в качестве входных данных записанные значения из модели кабельных трасс и эффективно расширяет этот тест для создания полного набора тестов.
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 - путь к блоку модели, второй вход - индекс группы (групп) сигналов в модели кабельных трасс. При вызовеsldvlogsignals, моделируется родительская модель, содержащая блок «Модель».
Родительская модель не ограничивается моделями кабелей Simulink Design Verifier. Кроме того, можно регистрировать данные из модели моделирования с замкнутым контуром, которая использует блок модели для включения контроллера, чтобы тестовые примеры контроллера более реалистично отражали непрерывное поведение во времени, ожидаемое в системе с замкнутым контуром.
[~, 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);
sldvruntest функция проверяет, что новый набор тестов достигает полного охвата модели. cvhtml создает отчет о покрытии, который указывает на 100%. Покрытие по решению достигается с помощью сгенерированных тестовых векторов.
[~, 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');