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

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

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

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

dashboardCCProjectStart

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

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

metric_engine = metric.Engine();

Чтобы задать метрики, которые вы хотите собрать, создайте массив, который перечисляет метрические идентификаторы. В данном примере соберите результаты для метрик TestCasesPerRequirementDistribution и TestCaseStatus. Для списка метрик и их идентификаторов, см., что Модель Тестирует Метрики.

metric_IDs = {'TestCasesPerRequirementDistribution','TestCaseStatus'};

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

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

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

execute(metric_engine, metric_IDs, 'ArtifactScope', component)

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

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

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

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

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

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

Чтобы экспортировать данные в электронную таблицу, создайте массив ячеек traceabilityData это хранит границы интервала и количества. Затем экспортируйте данные при помощи writetable.

traceabilityData = {'Test Cases per Requirement', 'Number of Requirements'};

for n = 1:length(results_TestCasesPerReqDist(1).Value.BinCounts)
   
   traceabilityData{n+1, 1} = results_TestCasesPerReqDist(1).Value.BinEdges(n);
   traceabilityData{n+1, 2} = results_TestCasesPerReqDist(1).Value.BinCounts(n);

end

filename = 'TestCasesPerRequirementDist.xlsx';
distTable = table(traceabilityData);
writetable(distTable, filename);

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

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

  • 1 — Пройден

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

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

Отобразите имя и состояние каждого теста. Затем сохраните имя и состояние в массиве ячеек и экспортируйте данные в электронную таблицу.

testStatusData = {'Test Case', 'Status'};

for n=1:length(results_TestStatus)

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

   testStatusData{n+1,1} = results_TestStatus(n).Artifacts(1).Name;
   testStatusData{n+1,2} = results_TestStatus(n).Value;

end

filename = 'TestCaseStatus.xlsx';
distTable = table(testStatusData);
writetable(distTable, filename);
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.

Путем выполнения скрипта, который собирает эти метрики, можно автоматически контролировать состояние тестирования проекта. Используйте результаты контролировать прогресс к тестированию полноты или обнаружить в нисходящем направлении тестирующие удары, когда вы внесете изменения в артефакты в проекте. Далее исследовать результаты в Модели, Тестирующей Инструментальную панель, в командной строке, типе modelTestingDashboard.

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

|

Похожие темы