Этот пример показывает, как Simulink ® Design Verifier™ может нацелить свой анализ на одну подсистему в рамках непрерывной симуляции замкнутой системы и сгенерировать тесты для недостающего покрытия в этой подсистеме.
Пример начинается с измерения покрытия подсистемы в модели симуляции с обратной связью. Simulink Design Verifier находит новые тесты, которые достигают недостающего покрытия подсистемы.
The sldvdemo_autotrans
модель является моделью симуляции с обратной связью. Подсистема ShiftLogic
является диаграммой Stateflow ® и представляет часть контроллера этой модели. Тесты, разработанные в блоке Signal Builder ManeuversGUI
управляйте симуляцией замкнутой системы. Можно использовать cvtest
и cvsim
функции для измерения покрытия модели, достигнутого для этой подсистемы в модели симуляции с обратной связью. В этом примере установка входов для cvtest
как путь к подсистеме, а не к имени модели приводит к измерению покрытия только для подсистемы. Кроме того, второй вход для cvsim
задает временной интервал для симуляции модели и определяется из временной области значений текущей панели в блоке ManeuversGUI
.
The cvhtml
функция создает отчет, который указывает, что 87% Decision, 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. Можно использовать существующие данные о покрытии, задав путь данных о покрытии в параметре Файл данных о покрытии и задав значение Игнорировать цели, удовлетворенные в существующем параметре данных о покрытии on
на панели «Генерация тестов» параметров конфигурации Simulink Design Verifier.
В этом примере первый вход в sldvrun
задает анализируемую подсистему. Инструкция Simulink Design Verifier анализировать подсистему выгодна, когда часть модели контроллера должна быть протестирована отдельно или когда вы хотите разделить анализ большой модели на меньшие, управляемые части.
Как видно из отчета, Simulink Design Verifier находит только тесты для целей покрытия, которые не охвачены существующим файлом покрытия. Заметьте, что 4 цели покрытия в подсистеме ShiftLogic
доказаны неудовлетворительными. Это ожидается, потому что логика внутри диаграммы Stateflow ShiftLogic
использует временные события, и поскольку этот график обновляется в каждый шаг расчета, использование временных условий должно быть удовлетворительным. Также обратите внимание, что мертвый код в подсистеме всегда будет мертвым кодом в модели, содержащей эту подсистему.
Чтобы сгенерировать модель тестовой обвязки, Simulink Design Verifier извлекает содержимое подсистемы ShiftLogic
в компонент Test Unit, подаваемый блоком 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');