Выполните верификацию и анализ покрытия для кода С, используемого в модели.
В этом примере показано, как проверить код С с двумя тестами: интерактивный тест с помощью средств управления HMI и логического теста кода выход в процессе моделирования.
Код С интегрирован в модель с блоком C Caller. Тесты используют менеджера по Тесту, тестовые обвязки, блок Test Sequence, блок Test Assessment и блоки Simulink® Dashboard. Результаты испытаний включают выходные параметры сигнала и покрытие модели. verify
операторы оценивают код С в процессе моделирования.
1. Создайте и откройте рабочую копию файлов проекта. Модели и файлы тестовой обвязки находятся в 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); }
Блок 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;
Test Assessment | Test Sequence