Модульное тестирование / непрерывная интеграция с Simulink/Stateflow
Как я могу выполнить модульное тестирование в Simulink или, предпочтительно, Stateflow?
Я поклонник гибких программных методов, включая разработку с тестовым приводом. Я отвечаю за разработку критического программного обеспечения безопасности, и мы используем Matlab/Simulink/Stateflow для его разработки. Этот набор инструментов выбран из-за связи с заводскими (аппаратными) моделями. (модель-в-петлю, аппаратно-в-петлю)
Я нашел некоторые ссылки на Stackoverflow: модульное тестирование фреймворка для MATLAB: в xUnit, slunit и doctest.
- есть ли у кого-нибудь опыт использования этих или других структур модульного тестирования?
- как связать это с системами непрерывной интеграции (например, Hudson)?
8 ответов
Как упоминал Крейг, действительно существует структура в MATLAB, введенная в R2013a. Кроме того, эта структура добавила TAPPlugin в R2014a, который выводит
модульное тестирование Simulink не является простым, к сожалению. Еда есть SystemTest. Кроме того, вы можете свернуть собственную платформу тестирования Simulink, которая является подходом, которому мы следовали, и не слишком сложна, но вам может потребоваться программно построить тестовые жгуты.
для интеграции с CI вам необходимо создать функцию / скрипт, который выполняет все тесты, затем вы можете использовать параметры командной строки для MATLAB.exe для запуска сценарий при запуске. Я не уверен, что у кого-то есть хороший способ интеграции отчетов об испытаниях с программным обеспечением CI. Просто посмотрите на количество комментариев в модульное тестирование фреймворка для MATLAB.
с 2015a Matlab вводит новое название продукта "Simulink Test". Возможно, это упростит ситуацию.
http://www.mathworks.com/products/simulink-test/features.html#manage-test-plans-and-test-execution
Если ваша система сложна, вы должны разложить ее с помощью Ссылка На Модель и проверьте каждый из них независимо.
другое решение (более "старая школа") - поместить ваши основные блоки в библиотеку и создать небольшие модели.
чтобы протестировать эти подмодели и особенно те, которые имеют машину состояний (Stateflow), лучше всего создать временные тестовые случаи
с Signal builder
заблокировать. У вас есть мощная функция signalbuilder
взаимодействовать с этот блок и нагрузочные тесты. Мой метод-получить для каждого случая каждой подмодели входной файл и выходной файл. Ваши выходы модели - это "правильный" выход и один из блоков. Модель запускается с sim
(без внешних входов) и 2 выхода сравниваются со сценарием, указывающим, какой сигнал отличается (и когда).
вы можете использовать существующую систему, но я предпочитаю использовать свой собственный для запуска каждого случая (или некоторых из них).
у меня нет публичный код для этого, но именно так я использую. Я не использую СНГ, поэтому я не могу ответить на вторую часть вашего вопроса.
Matlab (с 2013b) имеет встроенную поддержку xUnit, в виде Модульное Тестирование Framework.
Я не использовал его, но так как можно запустить simulink из Matlab с sim()
затем эту структуру можно использовать для тестирования моделей simulink. Библиотеки и, возможно, модели будут нуждаться в оболочке для ее выполнения, как отметили другие ответчики.
есть много примеров на сайте Mathworks, к сожалению, не из них работают модели simulink. Я бы код пример для вас, но у меня нет ML2013b : - (
чтобы инициировать ваши тесты из CI (я использую Jenkins), вы можете вызвать matlab для запуска a .M файл, который запускает ваш набор тестов, этот пример сценария cmd вызовет Run_Tests.m
из Matlab:
IF EXIST "C:\Program Files (x86)\MATLAB\R2013b\bin\win32\matlab.exe" (
REM WinXP
"C:\Program Files (x86)\MATLAB\R2013b\bin\win32\matlab.exe" -r "Run_Tests;exit" -logfile matlab.log
) ELSE (
REM Win7
"C:\Program Files\MATLAB\R2013b\bin\win32\matlab.exe" -r "Run_Tests;exit" -logfile matlab.log
)
обратите внимание, что если startup.m exists in the directory that you call Matlab from, then it'll be executed automatically before
Run_Tests.м.`
R2016b вводит интеграцию между Тест Simulink и MATLAB модуль тестирования framework. Тесты, созданные с помощью теста Simulink с помощью Test Manager (*.mldatx) распознаются и могут быть запущены изначально с помощью Matlab Unit Test Runner, и, таким образом, вы можете генерировать результаты теста XML в стиле JUnit или коснитесь результатов теста, облегчая непрерывные рабочие процессы интеграции.
смотрите эту ссылку для получения дополнительной информации: https://www.mathworks.com/help/sltest/ug/run-test-files-using-matlab-unit-test.html?s_tid=gn_loc_drop
в документации показан пример получения результатов TAP с помощью matlab.блок.подключаемый модуль.TAPPlugin, но вы можете использовать XMLPlugin (https://www.mathworks.com/help/matlab/ref/matlab.unittest.plugins.xmlplugin-class.html) вместо этого так же легко.
Это должно открыть лучшую интеграцию только в среде MATLAB даже без CI в картина с возможностью иметь тесты MATLAB и Simulink вместе в одном наборе тестов и иметь их работать вместе без проблем. Например, если у вас есть каталог MYDIR с собственными модульными тестами MATLAB и тестами Simulink, вы можете сделать что-то простое, как показано ниже, чтобы выполнить оба вида тестов за один выстрел:
результаты = runtests(MYDIR)
Я думаю, вы ищете что-то вроде EZTEST. Он предназначен для вашей специальной цели: тестовая разработка для Simulink и Stateflow на уровне блока. Для критического программного обеспечения безопасности, также включено руководство по безопасности, которое описывает, что покрыто относительно ISO 26262.
редактировать: Я разработчик этого программного обеспечения, поэтому мое мнение может быть предвзятым. Но я не занимаюсь маркетингом или продажей продукта. Я просто публикую это, потому что я знаю, что нет никаких рамок модульного теста, отвечающих потребностям спрашивающего (как могут предположить ответы).
блоки испытания используя SIL и PIL также поддержаны. К сожалению, я не знаком с Хадсоном, поэтому не могу ответить на эту часть вопроса.
Я видел различные решения проблемы модульного тестирования моделей Simulink. Проверка И Проверка Simulink который не поддерживал концепции xUnit тестовых бегунов и тестовых наборов во время экзамена, TPT быть перегруженным с функциональностью, не легкой для использования и очень трудной оперируя понятиями переменчивости и ремонтопригодности.
кроме того, я видел пользовательские решения со скриптами Matlab и таблицами Excel, которые были легкими, но также трудно с точки зрения понятности и ремонтопригодности. Я бы все равно не рекомендовал использовать ни один из этих подходов, по крайней мере, для модульного тестирования.
в конце концов, мы закончили с использованием платформы модульного тестирования C (Кунит) тестирование сгенерированного кода. Хотя это определенно имеет недостаток, что вы должны генерировать код перед тестированием, он также имеет много преимуществ, таких как простая интеграция в системы CI,высокая гибкость написания модульные тесты, быстрое исполнение unit-тестов и последнее, но не менее рефакторинг функции С точки зрения переключения с Simulink на другую среду на основе модели или на рукописный код. Особенно последний момент не следует недооценивать, поскольку я видел много моделей Simulink, которые должны были быть написанными вручную модулями в первую очередь. В настоящее время я бы рекомендовал использовать GoogleTest вместо Кунит.