Верификация кода С с Simulink Test

Выполните верификацию и анализ покрытия для кода С, используемого в модели.

В этом примере показано, как проверить код С с двумя тестами: интерактивный тест с помощью средств управления HMI и логического теста кода выход в процессе моделирования.

Код С интегрирован в модель с блоком C Caller. Тесты используют менеджера по Тесту, тестовые обвязки, блок Test Sequence, блок Test Assessment и блоки Simulink® Dashboard. Результаты испытаний включают выходные параметры сигнала и покрытие модели. verify операторы оценивают код С в процессе моделирования.

Откройте проект в качестве примера

1. Создайте и откройте рабочую копию файлов Проекта Simulink. Модели и файлы тестовой обвязки находятся в Models папка. Исходные и заголовочные файлы для пользовательского кода С находятся в CCode папка. Тестовый файл находится в Tests папка.

[projectFolder,~]=matlab.internal.project.example.projectDemoSetUp...
    (fullfile(matlabroot,'toolbox','simulinktest','simulinktestdemos',...
    'sltestCCodeIntegration.zip'),[],[]);
proj = simulinkproject(projectFolder);

2. Откройте sltestCruiseControlExample модель.

mdl = 'sltestCruiseControlExample';
open_system(mdl);

Блок C Function Caller интегрирует код С, заданный в RejectDoublePress.c. Код С является служебной функцией, которая обнаруживает когда Coast/Set и Accelerate/Resume входные параметры одновременно установлены в true пользователем и выходными параметрами false для обоих сигналов. В противном случае входные значения передаются выходным параметрам:

void RejectDoublePress(unsigned char CoastSetSwIN, unsigned char AccelResSwIN,
unsigned char *CoastSetSwOUT, unsigned char *AccelResSwOUT)
{
  unsigned char LogicalOperator;
  LogicalOperator = !(CoastSetSwIN && AccelResSwIN);
  *CoastSetSwOUT = (LogicalOperator && CoastSetSwIN);
  *AccelResSwOUT = (LogicalOperator && AccelResSwIN);
}

Интерактивное тестирование со средствами управления HMI

Блок C Caller имеет две тестовых обвязки. Открытый sltestCruiseControlSimpleHarness:

1. Кликните по перспективному значку обвязки в правом нижнем углу C Function Caller блок.

2. Нажмите sltestCruiseControlSimpleHarness мозаика.

sltest.harness.open([mdl, '/C Function Caller'], 'sltestCruiseControlSimpleHarness');

Тестовая обвязка реализует интерактивный тест алгоритма C. Можно управлять Coast/Set и Accelerate/Resume входные параметры с переключателями ползунка. Лампы отображают выходные значения компонента.

3. Запустите симуляцию тестовой обвязки путем нажатия на Play в панели инструментов Simulink.

4. Переключите входные параметры, чтобы попробовать различные входные комбинации. Проверьте ожидаемое поведение, в частности что выходными параметрами является false когда обоими входными параметрами является true.

5. Нажмите кнопку Stop, чтобы закончить симуляцию.

6. Закройте тестовую обвязку.

close_system('sltestCruiseControlSimpleHarness', 0);

Логический тест с тестовым блоком последовательности

Можно использовать блок Test Sequence, чтобы протестировать комбинации входных параметров и проверить ожидаемое поведение. Откройте sltestCruiseControlTestSeqHarness используйте, блок Test Sequence и блок Test Assessment.

sltest.harness.open([mdl, '/C Function Caller'], 'sltestCruiseControlTestSeqHarness');
open_system('sltestCruiseControlTestSeqHarness/Test Sequence');
open_system('sltestCruiseControlTestSeqHarness/Test Assessment');

Блок Test Sequence продвигается через четыре возможных булевых входных комбинации. Блок Test Assessment использует активный шаг блока Test Sequence, чтобы активировать верификации ожидаемых выходных параметров для каждого из соответствующих входных условий. В частности, когда обоими входными параметрами является true, оба выходных параметров проверяются, чтобы быть false.

Запустите логический тест

Запустите тест и просмотрите результаты verify операторы:

1. Откройте менеджера по тесту.

sltest.testmanager.view;

2. Откройте sltestCruiseControlCTests.mldatx тестовый файл. Тестовый файл имеет один тест, который запускает sltestCruiseControlTestSeqHarness тестовая обвязка.

sltest.testmanager.load('sltestCruiseControlCTests.mldatx');

3. Запустите тестовый файл путем нажатия на Play в менеджере по Тесту панель инструментов.

sltest.testmanager.run;

Каждый verify оператор в блоке Test Assessment производит трассировку сигнала в результатах испытаний. Проверьте, что каждый оператор передает для временных шагов, что это активно.

Тест также возвращает покрытие для кода С. В панели Результатов и Артефактов менеджера по Тесту подсветите тест и расширьте раздел Aggregated Coverage Results. Покрытие кода составляет 100% для решения, условия и метрик MCDC. Для получения дополнительной информации смотрите Покрытие для Пользовательского Кода C/C++ в Моделях Simulink (Simulink Coverage).

Очистка

Очистите результаты, закройте открытые окна и близкие модели.

close_system(mdl, 0);
clear mdl;
sltest.testmanager.clear;
sltest.testmanager.clearResults;
close(proj);
sltest.testmanager.close;
Simulink.sdi.close;
Для просмотра документации необходимо авторизоваться на сайте