Если у вас есть подсистема или график Stateflow®, который не достигает 100%-го покрытия, и вы не хотите преобразовывать подсистему или график к блоку Model, следовать этому примеру, чтобы достигнуть полного охвата.
Пример использует модели контроллеров с обратной связью. Контроллер с обратной связью передает инструкции управляемой системе и получает информацию от среды, когда команды управления выполняются. Контроллер может адаптировать и изменить его инструкции, когда это получает эту информацию.
Модель sldvdemo_autotrans
является имитационной моделью с обратной связью. Диаграмма Stateflow ShiftLogic представляет часть контроллера этой модели. Тесты, разработанные в блоке Signal Builder ManeuversGUI, управляют симуляцией с обратной связью.
Моделировать модель, записывая условие, решение и покрытие MCDC для контроллера ShiftLogic:
Откройте модель в качестве примера:
sldvdemo_autotrans
В Редакторе Simulink® выберите Analysis> 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)
.