Используя существующие данные о покрытии во время анализа подсистемы

В этом примере показано, как Simulink® Design Verifier™ может предназначаться для своего анализа к одной подсистеме в течение непрерывного времени симуляция с обратной связью и сгенерировать тесты для недостающего покрытия в той подсистеме.

Пример запускается путем измерения покрытия подсистемы в имитационной модели с обратной связью. Simulink Design Verifier находит новые тесты, которые достигают недостающего покрытия подсистемы.

Измерьте покрытие подсистемы

sldvdemo_autotrans модель является имитационной моделью с обратной связью. Подсистема ShiftLogic график Stateflow® и представляет часть контроллера этой модели. Тесты спроектировали в блоке Signal Builder ManeuversGUI управляйте симуляцией с обратной связью. Можно использовать cvtest и cvsim функции, чтобы измерить покрытие модели, достигнутое для этой подсистемы в имитационной модели с обратной связью. В этом примере, задавая вход к cvtest когда путь к подсистеме, а не к имени модели приводит к измерению покрытия для подсистемы только. Кроме того, второй вход к cvsim задает временной интервал, чтобы симулировать модель, и это выведено из области значений времени текущей панели в блоке ManeuversGUI.

cvhtml функция представляет отчет, который указывает, что 87%-е Решение, 67%-е Условие и 33%-е покрытие MCDC достигаются путем симуляции теста, созданного в блоке ManeuversGUI.

open_system('sldvdemo_autotrans');
open_system('sldvdemo_autotrans/ManeuversGUI');

test = cvtest('sldvdemo_autotrans/ShiftLogic');
test.settings.decision = 1;
test.settings.condition = 1;
test.settings.mcdc = 1;

signalBuilderBlock = sldvdemo_signalbuilder_block('sldvdemo_autotrans');
signalBuilderTime = signalbuilder(signalBuilderBlock);
simulationStopTime = signalBuilderTime{1,1}(end);

existingCovData = cvsim(test,[0 simulationStopTime]);
cvhtml('Existing Coverage', existingCovData);

Найдите тесты для недостающего покрытия

Чтобы использовать существующие данные о покрытии во время генерации тестов, сохраните существующие данные о покрытии к .cvt файлу данных покрытия. Можно использовать существующие данные о покрытии путем определения информационного канала покрытия в параметре файла данных Покрытия и целях установки Ignore, которым удовлетворяют в существующем параметре данных о покрытии к on в панели Генерации тестов параметров конфигурации Simulink Design Verifier.

В этом примере, первом входе к sldvrun задает подсистему, чтобы анализировать. Инструктирование Simulink Design Verifier анализировать подсистему выгодно, когда часть контроллера модели должна быть протестирована отдельно или, когда это необходимо, разделить анализ большой модели в меньшие, управляемые части.

Как вы видите в отчете, Simulink Design Verifier только находит тесты для целей покрытия, которые не покрыты существующим файлом покрытия. Заметьте что 4 цели покрытия в подсистеме ShiftLogic как доказывают, невыполнимы. Это ожидается потому что логика в диаграмме Stateflow ShiftLogic использует временные события и начиная с этого графика обновления в каждом шаге расчета, использование временных условий должно быть удовлетворительным. Также обратите внимание, что, мертвый код в подсистеме всегда будет мертвым кодом в модели, содержащей ту подсистему.

Чтобы сгенерировать модель тестовой обвязки, Simulink Design Verifier извлекает содержимое подсистемы ShiftLogic на Тестовый Модульный компонент, питаемый блоком Signal Builder, содержащим сгенерированные тесты.

cvsave('existingcov',existingCovData);

opts = sldvoptions;
opts.IgnoreCovSatisfied = 'on';
opts.CoverageDataFile = 'existingcov.cvt';
opts.ModelCoverageObjectives = 'MCDC';
opts.SaveHarnessModel = 'on';
opts.SaveReport = 'on';

[status, fileNames] = sldvrun('sldvdemo_autotrans/ShiftLogic',opts,true);
[~, harnessModel] = fileparts(fileNames.HarnessModel);
open_system(harnessModel);

Очистка

Чтобы завершить демонстрацию, закройте все модели и удалите сохраненный файл данных покрытия.

close_system('sldvdemo_autotrans');
close_system(fileNames.ExtractedModel,0);
close_system(fileNames.HarnessModel,0);
delete('existingcov.cvt');