Достигните недостающего покрытия в имитационной модели с обратной связью

Если у вас есть подсистема или график Stateflow®, который не достигает 100%-го покрытия, и вы не хотите преобразовывать подсистему или график к блоку Model, следовать этому примеру, чтобы достигнуть полного охвата.

Пример использует модели контроллеров с обратной связью. Контроллер с обратной связью передает инструкции управляемой системе и получает информацию от среды, когда команды управления выполняются. Контроллер может адаптировать и изменить его инструкции, когда это получает эту информацию.

Модель sldvdemo_autotrans является имитационной моделью с обратной связью. Диаграмма Stateflow ShiftLogic представляет часть контроллера этой модели. Тесты, разработанные в блоке Signal Builder ManeuversGUI, управляют симуляцией с обратной связью.

Данные о покрытии записи для модели

Моделировать модель, записывая условие, решение и покрытие MCDC для контроллера ShiftLogic:

  1. Откройте модель в качестве примера:

    sldvdemo_autotrans
  2. В Редакторе Simulink® выберите Analysis> Coverage> Settings.

  3. На Coverage разделяют на области в диалоговом окне Configuration Parameters. установите следующие опции:

    • Выберите Enable coverage analysis.

    • Выберите Subsystem и нажмите Select Subsystem.

    • В диалоговом окне Subsystem Selection выберите ShiftLogic и нажмите OK.

  4. Под Coverage metrics выберите Modified Condition Decision Coverage (MCDC).

  5. Очистите Other metrics, если они выбраны.

  6. В Coverage> панель Results диалогового окна Configuration Parameters, набор следующие опции:

    • В поле cvdata object name введите covdata_original_controller, чтобы задать уникальное имя для переменной рабочей области данных о покрытии.

    • Выберите Generate report automatically after analysis.

  7. Нажмите OK.

  8. Запустите симуляцию модели sldvdemo_autotrans, чтобы записать данные о покрытии.

    После симуляции открывается отчет покрытия. Отчет указывает, что следующее покрытие достигается для диаграммы Stateflow ShiftLogic:

    • Решение: 87% (27/31)

    • Условие: 67% (8/12)

    • MCDC: 33% (2/6) условия инвертировали результат

    Симуляция сохраняет данные о покрытии в переменной covdata_original_controller рабочей области MATLAB®, объект cvtest, который содержит данные о покрытии.

  9. Сохраните данные о покрытии в файле на пути MATLAB:

    cvsave('existingcov',covdata_original_controller);

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

Чтобы найти недостающее покрытие для графика ShiftLogic, запустите анализ подсистемы того блока. Используйте этот метод, чтобы сфокусировать ваш анализ на отдельной части модели.

Чтобы достигнуть 100%-го покрытия для контроллера ShiftLogic, запустите анализ генерации тестов, который использует существующие данные о покрытии.

  1. Щелкните правой кнопкой по блоку ShiftLogic и выберите Design Verifier> Options.

  2. В диалоговом окне Configuration Parameters, под деревом Select, выбирают узел Design Verifier. Под Analysis options в поле Mode выберите Test generation.

  3. Под узлом Design Verifier выберите Test Generation. Под Existing coverage data выберите Ignore objectives satisfied in existing coverage data.

  4. В поле Coverage data file введите имя файла, содержащего данные о покрытии, которые вы записали во время симуляции:

    existingcov.cvt
  5. Нажмите Apply, чтобы сохранить эти настройки.

  6. Под деревом Select нажмите Design Verifier.

  7. На основной панели Design Verifier нажмите Generate Tests.

    Анализ извлекает диаграмму Stateflow в новую модель под названием ShiftLogic0. Анализ анализирует новую модель, игнорируя цели покрытия, ранее удовлетворенные и записанные в файле existingcov.cvt.

  8. Когда анализ генерации тестов будет завершен в логарифмическом окне 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).

Похожие темы