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

В этом примере показано, как программно оценить состояние и качество основанных на требованиях действий тестирования в проекте. Когда вы разрабатываете программные блоки при помощи Модельно-ориентированного проектирования, вы используете основанное на требованиях тестирование, чтобы проверить ваши модели. Можно оценить состояние тестирования одной модульной модели при помощи метрического API, чтобы собрать метрические данные по трассируемости между требованиями и тестами и на состоянии результатов испытаний. Метрики измеряют характеристики полноты и качество основанного на требованиях тестирования, которые отражают промышленные стандарты, такие как ISO 26262 и DO-178. После сбора метрических результатов можно получить доступ к результатам или экспортировать их в файл. Путем выполнения скрипта, который собирает эти метрики, можно автоматически анализировать состояние тестирования проекта к, например, спроектировать непрерывную систему интегрирования. Используйте результаты контролировать полноту тестирования или обнаружить в нисходящем направлении тестирующие удары, когда вы внесете изменения в артефакты в проекте.

Откройте проект

Откройте проект, который включает файлы тестирования и модели. В командной строке введите dashboardCCProjectStart. Проект содержит модели и требования и тесты для моделей. Некоторые требования имеют ссылки трассируемости на модели и тесты, которые помогают проверить, что функциональность модели удовлетворяет требования.

dashboardCCProjectStart

Соберите метрические результаты

Создайте metric.Engine объект для текущего проекта.

metric_engine = metric.Engine();

Обновите трассировочную информацию для metric_engine отразить любой незаконченный артефакт изменяется и гарантировать, что все результаты испытаний прослежены.

updateArtifacts(metric_engine)

Создайте массив метрических идентификаторов для метрик, которые вы хотите собрать. В данном примере создайте список всех доступных метрических идентификаторов.

metric_Ids = getAvailableMetricIds(metric_engine);
Этот рисунок показывает метрический идентификатор для каждого виджета в инструментальной панели.

Model Testing Dashboard listing the metric identifiers for each widget.

Для списка метрик и их идентификаторов, см., что Модель Тестирует Метрики.

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

Соберите результаты для одного модуля

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

Соберите метрические результаты для db_DriverSwRequest.

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

unit = {fullfile(pwd,'models','db_DriverSwRequest.slx'),'db_DriverSwRequest'};

Выполните механизм и используйте аргумент ArtifactScope задавать модуль, для которого вы хотите собрать результаты. Механизм запускает метрики только на артефактах, которые прослеживают до модели, которую вы задаете. Сбор результатов для этих метрик требует Simulink® Лицензия Test™, лицензия Simulink Requirements™ и лицензия Simulink Coverage™.

execute(metric_engine, metric_Ids, 'ArtifactScope', unit)

Соберите результаты для каждого модуля в проекте

Чтобы собрать результаты для каждого модуля в проекте, выполните механизм без аргумента для ArtifactScope.

execute(metric_engine, metric_Ids)

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

Доступ к результатам

Сгенерируйте файл отчета, который содержит результаты для всех модулей в проекте. В данном примере задайте формат файла HTML и назовите отчет MetricResultsReport.html.

reportLocation = fullfile(pwd, 'MetricResultsReport.html');
generateReport(metric_engine,'Type','html-file','Location',reportLocation);

Откройте отчет HTML от корневой папки проекта. Чтобы открыть оглавление и перейти к результатам для каждого модуля, кликните по значку меню в верхнем левом углу отчета. Для каждого модуля в отчете существует сводная таблица артефакта, которая отображает размер и структуру того модуля.

Artifact Summary table listing the Number of Artifacts for each Artifact Type.

Сохранение метрических результатов в файле отчета позволяет вам получать доступ к результатам, не открывая проект и инструментальную панель. В качестве альтернативы можно открыть инструментальную панель, чтобы видеть результаты и исследовать артефакты.

modelTestingDashboard

Чтобы получить доступ к результатам программно, используйте getMetrics функция. Функция возвращает metric.Result объекты, которые содержат данные о результате для заданного модуля и метрик. В данном примере сохраните результаты для метрик TestCaseStatus и TestCasesPerRequirementDistribution в соответствующих массивах.

results_TestCasesPerReqDist = getMetrics(metric_engine,'TestCasesPerRequirementDistribution');
results_TestStatus = getMetrics(metric_engine, 'TestCaseStatus');

Просмотрите распределение ссылок теста на требование

Метрический TestCasesPerRequirementDistribution возвращает распределение количества тестов, соединенных с каждым функциональным требованием для модуля. Отобразите границы интервала и количество интервалов распределения, которое является полями в Value поле metric.Result объект. Левый край каждого интервала показывает количество ссылок теста, и количество интервала показывает количество требований, которые соединяются с тем количеством тестов. Шестой границей интервала является 18446744073709551615, который является верхним пределом количества тестов на требование, которое показывает, что пятый интервал содержит требования, которые имеют четыре или больше теста.

disp(['Unit:  ', results_TestCasesPerReqDist(1).CollectionScope(1).Name])
disp(['  Tests per Requirement:  ', num2str(results_TestCasesPerReqDist(1).Value.BinEdges)])
disp(['  Requirements:  ', num2str(results_TestCasesPerReqDist(1).Value.BinCounts)])
Unit:  db_DriverSwRequest
  Tests per Requirement:  0   1   2   3  4  18446744073709551615
  Requirements:  12   9   0   0   0

Этот результат показывает это для модуля db_DriverSwRequest существует 12 требований, которые не соединяются с тестами и 9 требованиями, которые соединяются с одним тестом. Каждое требование должно быть соединено по крайней мере с одним тестом, который проверяет, что модель удовлетворяет требование. Распределение также позволяет вам проверять, имеет ли требование намного больше тестов, чем другие требования, которые могут указать, что требование является слишком общим и что необходимо повредить его в большее количество гранулированных требований.

Просмотрите результаты состояния теста

Метрический TestCaseStatus оценивает состояние тестирования каждого теста для модуля и возвращает один из этих числовых результатов:

  • 0 — Не пройдено

  • 1 — Пройден

  • 2 — Отключенный

  • 3 — Непротестированный

Отобразите имя и состояние каждого теста.

for n=1:length(results_TestStatus)

   disp(['Test Case: ', results_TestStatus(n).Artifacts(1).Name])
   disp([' Status: ', num2str(results_TestStatus(n).Value)])

end
Test Case: Set button
 Status: 3
Test Case: Decrement button hold
 Status: 3
Test Case: Cancel button
 Status: 3
Test Case: Resume button
 Status: 3
Test Case: Decrement button short
 Status: 3
Test Case: Increment button short
 Status: 3
Test Case: Enable button
 Status: 3
Test Case: Increment button hold
 Status: 3

В данном примере тесты не были запущены, таким образом, каждый тест возвращает состояние 3.

Смотрите также

| | | | |

Похожие темы