Этот пример показывает, как Simulink® Design Verifier™ может расширить тесты с дополнительными временными шагами, чтобы эффективно сгенерировать полные тестовые наборы.
Пример запускается с модели, содержащей характеристики с временной задержкой, которые делают оспаривание генерации тестов. Путем создания модели тестовой обвязки по умолчанию и вручную авторской разработки одного теста, удалено критическое препятствие эффективной генерации тестов. Simulink Design Verifier принимает как вход регистрируемые значения от модели тестовой обвязки и эффективно расширяет этот тест, чтобы создать полный тестовый набор.
Модель sldvdemo_sbr_extend_design
включает Stateflow® Chart 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));
sldvmakeharness
функции Simulink Design Verifier создает модель тестовой обвязки с блоком, который генерирует входные значения к тестовой модели, включенной посредством блока модели - ссылки.
Можно изменить тестовые данные в модели тестовой обвязки путем ручного редактирования значений данных с помощью пользовательского интерфейса 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. Выберите существующие тесты Extend и задайте файл 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% 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');