Если у вас есть подсистема или график Stateflow®, который не достигает 100%-го покрытия, и вы не хотите преобразовывать подсистему или график с блоком Model, следовать этому примеру, чтобы достигнуть полного охвата.
Пример использует модели контроллеров с обратной связью. Контроллер с обратной связью передает инструкции управляемой системе и получает информацию от среды, когда команды управления выполняются. Контроллер может адаптировать и изменить его инструкции, когда это получает эту информацию.
sldvdemo_autotrans
модель является имитационной моделью с обратной связью. Диаграмма Stateflow ShiftLogic представляет часть контроллера этой модели. Тесты, спроектированные в блоке ManeuversGUI Signal Builder, управляют симуляцией с обратной связью.
Симулировать модель, записывая условие, решение и покрытие MCDC для контроллера ShiftLogic:
Откройте модель в качестве примера:
sldvdemo_autotrans
На вкладке Apps кликните по стреле справа от раздела Apps.
Под Model Verification, Validation, and Test нажмите Coverage Analyzer.
На вкладке Coverage нажмите Settings.
На Coverage разделяют на области в диалоговом окне Configuration Parameters. установите следующие опции:
Выберите Enable coverage analysis.
Выберите Subsystem и нажмите Select Subsystem.
В диалоговом окне Subsystem Selection выберите ShiftLogic
и нажмите OK.
Под Coverage metrics выберите Modified Condition Decision Coverage (MCDC)
.
Очистите Other metrics, если они выбраны.
В Coverage> панель Results диалогового окна Configuration Parameters, набор следующие опции:
В поле cvdata object name введите covdata_original_controller
задавать уникальное имя для переменной рабочей области данных о покрытии.
Выберите Generate report automatically after analysis.
Нажмите OK.
Запустите симуляцию sldvdemo_autotrans
модель, чтобы записать данные о покрытии.
После симуляции открывается отчет покрытия. Отчет указывает, что следующее покрытие достигается для диаграммы Stateflow ShiftLogic:
Решение: 87% (27/31)
Условие: 67% (8/12)
MCDC: 33% (2/6) условия инвертировали результат
Симуляция сохраняет данные о покрытии в переменной covdata_original_controller
рабочей области MATLAB®,
cvtest
объект, который содержит данные о покрытии.
Сохраните данные о покрытии в файле на пути MATLAB:
cvsave('existingcov',covdata_original_controller);
Чтобы найти недостающее покрытие для графика ShiftLogic, запустите анализ подсистемы того блока. Используйте этот метод, чтобы сфокусировать ваш анализ на отдельной части модели.
Чтобы достигнуть 100%-го покрытия для контроллера ShiftLogic, запустите анализ генерации тестов, который использует существующие данные о покрытии.
Щелкните правой кнопкой по блоку ShiftLogic и выберите Design Verifier> Options.
В диалоговом окне Configuration Parameters, под деревом Select, выбирают узел Design Verifier. Под Analysis options в поле Mode выберите Test generation
.
Под узлом Design Verifier выберите Test Generation. Под Existing coverage data выберите Ignore objectives satisfied in existing coverage data.
В поле Coverage data file введите имя файла, содержащего данные о покрытии, которые вы записали в процессе моделирования:
existingcov.cvt
Нажмите Apply, чтобы сохранить эти настройки.
Под деревом Select нажмите Design Verifier.
На основной панели Design Verifier нажмите Generate Tests.
Анализ извлекает диаграмму Stateflow в новую модель под названием ShiftLogic0
. Анализ анализирует новую модель, игнорируя цели покрытия, которым ранее удовлетворяют и записанный в existingcov.cvt
файл.
Когда анализ генерации тестов будет завершен в логарифмическом окне Simulink® Design Verifier™, выберите Simulate tests and produce a model coverage report.
Отчет указывает, что следующее покрытие достигается для графика ShiftLogic в симуляции с тестами, сгенерированными Simulink Design Verifier:
Решение: 84% (26/31)
Условие: 83% (10/12)
MCDC: 67% (4/6) условия инвертировали результат
Отчет Simulink Design Verifier перечисляет шесть тестов для извлеченной модели, которые удовлетворяют целям, не покрытым existingcov.cvt
файл.
Отчет Simulink Design Verifier указывает, что две цели покрытия в диаграмме Stateflow ShiftLogic доказаны невыполнимыми. Неявное событие tick
никогда не false
потому что график ShiftLogic обновляется на каждом временном шаге. Анализ не может удовлетворить условию или покрытию MCDC ни для одного экземпляра временного события after(TWAIT, tick)
.
after(TWAIT, tick)
семантически эквивалентно
Event == tick && temporalCount(tick) >= TWAIT
Если вы перемещаете after(TWAIT, tick)
в условие, как в
[after(TWAIT, tick) && speed < down_th]
Simulink Design Verifier определяет тот tick
всегда true
, таким образом, это только тестирует temporalCount(tick) >= TWAIT
часть after(TWAIT, tick)
. Анализ может найти цели тестирования, которые удовлетворяют условию и покрытию MCDC для after(TWAIT, tick)
.