Определение и расширение существующих тестовых случаев

Этот пример показывает, как 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');