exponenta event banner

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

При установке Simulink ® Coverage™ можно собирать метрики покрытия кода во время моделирования программного обеспечения в цикле (SIL) или процессора в цикле (PIL) - см. раздел Сбор данных покрытия кода (Simulink Coverage Data). В этом примере можно собрать метрики покрытия кода с помощью стороннего инструмента, т.е. BullseyCoverage или LDRA Testbed. Необходимо установить стороннее средство - см. раздел Поддержка средства покрытия кода.

На этом снимке экрана показан отчет о покрытии кода, полученный при выполнении моделирования SIL с включенным инструментом покрытия кода. Аннотации зависят от указанного инструмента покрытия кода.

В этом примере выполняется измерение покрытия модели во время моделирования в обычном режиме и повторяется то же моделирование в режиме SIL для измерения покрытия кода. Используя гиперссылки в отчетах о покрытии модели и покрытии кода, можно сравнить результаты покрытия модели и покрытия кода.

Примеры моделирования SIL и PIL см. в разделе Тестирование сгенерированного кода с моделированием SIL и PIL.

Начальная настройка

Убедитесь, что модель открыта.

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

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

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

Конфигурирование создания отчета о покрытии модели.

set_param(model, 'RecordCoverage','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);

Запуск моделирования в обычном режиме

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

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

Настройка инспектора данных моделирования для интерактивного просмотра и сравнения результатов моделирования.

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});

Запуск второго моделирования в обычном режиме

Для первого моделирования отчет показывает, что достигнутый охват составляет менее 100%. Выполните второе моделирование с различными входными сигналами, которые увеличивают уровень покрытия MC/DC до 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 проверьте доступность сторонних инструментов и настройте модель для сбора метрик покрытия кода. Если стороннее средство недоступно, в модели используется программа Simulink ® Verification and Validation™.

covToolPath = '';
ldraPath = coder.coverage.LDRA.getPath;
bullseyePath = coder.coverage.BullseyeCoverage.getPath;

coverageSettings = get_param(model,'CodeCoverageSettings');
coverageSettings.TopModelCoverage='on';
if ~isempty(ldraPath)
    coverageSettings.CoverageTool='LDRA Testbed';
elseif ~isempty(bullseyePath)
    coverageSettings.CoverageTool='BullseyeCoverage';
else
    coverageSettings.CoverageTool='None';
end
set_param(model,'CodeCoverageSettings',coverageSettings);

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

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

Выполните первое моделирование в режиме 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');
Simulink.sdi.createRun('Run 1 (SIL mode)', 'namevalue',...
                       {'simout_sil_run1'}, {simout_sil_run1});
### 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 44.156s
### Preparing to start SIL simulation ...
Building with 'MinGW64 Compiler (C)'.
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
### Completed code coverage analysis

Выполните второе моделирование в режиме SIL.

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');
Simulink.sdi.createRun('Run 2 (SIL mode)', 'namevalue',...
                       {'simout_sil_run2'}, {simout_sil_run2});
### 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 3.656s
### Preparing to start SIL simulation ...
### Starting SIL simulation for component: rtwdemo_sil_topmodel
### Stopping SIL simulation for component: rtwdemo_sil_topmodel
### Completed code coverage analysis

По завершении моделирования щелкните по ссылке в окне команд, чтобы открыть отчет о покрытии кода и просмотреть результаты совокупного покрытия кода. Ссылка доступна, только если установлен сторонний инструмент.

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

Инспектор данных моделирования открывается автоматически, позволяя выполнять интерактивный просмотр и анализ результатов. Используйте панели Compare and Inspect (Сравнение и проверка) для подтверждения идентичности сигналов SIL и регистрации в нормальном режиме для обоих прогонов.

Заключительные замечания

В этом примере выполняется следующее:

  • Собранные метрики покрытия модели во время моделирования в обычном режиме.

  • Собранные метрики покрытия кода во время моделирования SIL.

  • Выполняется переход между отчетами об покрытии кода и модельных отчетов об покрытии.

  • Перекрестная проверка метрик из обоих отчетов.

Связанные темы