Модульное тестирование / непрерывная интеграция с 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 beforeRun_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 вместо Кунит.