Сбор метрик покрытия кода с Simulink ® Coverage™

Этот пример показывает, как собрать метрики покрытия кода во время симуляции цикл (SIL) или цикл (PIL) с Coverage™ Simulink ®.

Вы используете инструмент покрытия кода и отчет о покрытии кода, чтобы просмотреть записанное покрытие кода для SIL симуляции.

В этом примере вы измеряете покрытие модели во время симуляции в режиме normal mode, повторяете ту же симуляцию в режиме SIL и сравниваете записанные метрики из обоих симуляций.

Сравните результаты покрытия модели и покрытия кода с помощью гиперссылок в отчетах о покрытии модели и покрытии кода.

Для получения дополнительных примеров измерения SIL и PIL симуляций, смотрите Test Сгенерированный код с SIL и PIL Simulations (Embedded Coder).

Начальный Setup

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

model = 'rtwdemo_sil_topmodel';
close_system(model,0)
open_system(model)

Удалите все существующие папки сборки.

buildFolder = RTW.getBuildDir(model);
if isfolder(buildFolder.BuildDirectory)
    rmdir(buildFolder.BuildDirectory,'s');
end

Сконфигурируйте модель для набора покрытия.

set_param(model, 'CovEnable', 'on')
clear covCumulativeData

Настройте входные данные.

T = 0.1; % sample time
[ticks_to_count, reset, counter_mode, count_enable, ...
    counter_mode_values_run1, counter_mode_values_run2, ...
    count_enable_values_run1, count_enable_values_run2] = ...
    rtwdemo_sil_topmodel_data(T);

Запуск первой симуляции в режиме Normal Mode

После завершения симуляции откроется отчет о покрытии модели. Для перехода от блоков в модели к соответствующим разделам отчета о покрытии используйте окно отображения покрытия.

counter_mode.signals.values = counter_mode_values_run1;
count_enable.signals.values = count_enable_values_run1;
set_param(model, 'SimulationMode', 'normal');

Используйте Данные моделирования Inspector, чтобы просмотреть и сравнить результаты симуляции.

Simulink.sdi.view;
Simulink.sdi.clear;

Запустите симуляцию.

simout_normal_run1 = sim(model, 'ReturnWorkspaceOutputs', 'on');

Запечатлите результаты.

Simulink.sdi.createRun('Run 1 (normal mode)', 'namevalue',...
                       {'simout_normal_run1'}, {simout_normal_run1});

Запуск второй симуляции в режиме Normal Mode

Для первой симуляции отчет показывает, что модель достигла покрытия менее 100% MCDC. Запустите вторую симуляцию с различными входными сигналами, чтобы увеличить уровень покрытия MCDC до 100%. Отчет о покрытии модели сконфигурирован, чтобы показать совокупное покрытие в обоих запусках симуляции.

counter_mode.signals.values = counter_mode_values_run2;
count_enable.signals.values = count_enable_values_run2;
set_param(model, 'SimulationMode', 'normal');

simout_normal_run2 = sim(model, 'ReturnWorkspaceOutputs', 'on');

Simulink.sdi.createRun('Run 2 (normal mode)', 'namevalue',...
                       {'simout_normal_run2'}, {simout_normal_run2});            

Сконфигурируйте модель для измерения покрытия кода

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

coverageSettings = get_param(model, 'CodeCoverageSettings');
coverageSettings.CoverageTool = 'Simulink Coverage';
set_param(model, 'CodeCoverageSettings', coverageSettings);

Запуск первой симуляции в режиме SIL

Можно использовать те же входные сигналы в SIL симуляции, которые вы использовали во время первого запуска симуляции в режиме normal mode.

Запустите первую симуляцию в режиме SIL.

counter_mode.signals.values = counter_mode_values_run1;
count_enable.signals.values = count_enable_values_run1;
set_param(model, 'SimulationMode', 'software-in-the-loop');
set_param(model, 'CodeExecutionProfiling', 'off');
set_param(model, 'CodeProfilingInstrumentation', 'off');
simout_sil_run1 = sim(model, 'ReturnWorkspaceOutputs', 'on');
### Starting build procedure for: rtwdemo_sil_topmodel
### Successful completion of build procedure for: rtwdemo_sil_topmodel

Build Summary

Top model targets built:

Model                 Action                       Rebuild Reason                                    
=====================================================================================================
rtwdemo_sil_topmodel  Code generated and compiled  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 21.297s
### Preparing to start SIL simulation ...
Building with 'gcc'.
MEX completed successfully.
### Updating code generation report with SIL files ...
### Starting SIL simulation for component: rtwdemo_sil_topmodel
### Stopping SIL simulation for component: rtwdemo_sil_topmodel
Simulink.sdi.createRun('Run 1 (SIL mode)', 'namevalue',...
                       {'simout_sil_run1'}, {simout_sil_run1});

Когда симуляция завершится, просмотрите результаты покрытия кода на модели с помощью подсветки покрытия. Чтобы увидеть сводные данные покрытия кода SIL для элемента модели, поместите курсор на элемент модели.

Результаты покрытия кода можно также просмотреть в отчете о покрытии кода HTML. В сводном разделе показано, что все функции были вызваны, но запуск SIL симуляции не достиг полного покрытия для покрытия принятия решения, условия или MCDC.

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

Запустите вторую симуляцию в режиме SIL

Используйте те же входные сигналы в SIL симуляции, что и во втором запуске симуляции в режиме normal mode.

counter_mode.signals.values = counter_mode_values_run2;
count_enable.signals.values = count_enable_values_run2;
set_param(model, 'SimulationMode', 'software-in-the-loop');
set_param(model, 'CodeExecutionProfiling', 'off');
set_param(model, 'CodeProfilingInstrumentation', 'off');
simout_sil_run2 = sim(model, 'ReturnWorkspaceOutputs', 'on');
### Starting build procedure for: rtwdemo_sil_topmodel
### Generated code for 'rtwdemo_sil_topmodel' is up to date because no structural, parameter or code replacement library changes were found.
### Successful completion of build procedure for: rtwdemo_sil_topmodel

Build Summary

Top model targets built:

Model                 Action         Rebuild Reason                           
==============================================================================
rtwdemo_sil_topmodel  Code compiled  Compilation artifacts were out of date.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 2.5138s
### Preparing to start SIL simulation ...
### Starting SIL simulation for component: rtwdemo_sil_topmodel
### Stopping SIL simulation for component: rtwdemo_sil_topmodel
Simulink.sdi.createRun('Run 2 (SIL mode)', 'namevalue',...
                       {'simout_sil_run2'}, {simout_sil_run2});

Подсветка покрытия кода показывает, что сгенерированный код из модели достиг полного покрытия.

Сравнение метрик из симуляций Normal и SIL

После каждого запуска автоматически открывается Данные моделирования Inspector, который позволяет просматривать и анализировать результаты. Чтобы подтвердить идентичность зарегистрированных сигналов для запусков SIL и режима normal mode, проверьте информацию на панелях «Сравнение» и «Проверка».

Для просмотра документации необходимо авторизоваться на сайте