Соберите метрики покрытия кода со сторонней программой

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

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

В этом примере вы измеряете покрытие модели во время симуляции режима normal mode и повторяете ту же симуляцию в режиме 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);

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

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

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

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

Для первой симуляции отчет показывает, что достигнутое покрытие меньше 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 и 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

Симуляции режима normal mode производят метрики покрытия для модели. С 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 model: rtwdemo_sil_topmodel
### Successful completion of build procedure for model: rtwdemo_sil_topmodel
### 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
### 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 model: 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 model: rtwdemo_sil_topmodel
### 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

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

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

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

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

В этом примере, вас:

  • Собранные метрики покрытия модели во время симуляции режима normal mode.

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

  • Перемещенный между покрытием кода и отчетами покрытия модели.

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

Похожие темы