Unit-Tests/continuous integration mit Simulink/Stateflow
Wie kann ich die durchführen von unit-Tests in Simulink, oder vorzugsweise, Stateflow?
Ich bin ein fan von agilen software-Methoden wie test driven development. Ich bin verantwortlich für die Entwicklung von sicherheitskritischer Steuerungssoftware und wir sind mit Matlab/Simulink/Stateflow für die Entwicklung von it. Dieses toolset wird gewählt, da die Verbindung mit Anlage (hardware) Modelle. (model-in-the-loop, hardware-in-the-loop)
Ich habe einige links auf Stackoverflow: Unit-Test-framework für MATLAB: xunit, slunit und doctest.
- Hat jemand Erfahrung mit diesen oder anderen unit test frameworks?
- Wie verbinden dies mit continuous integration Systemen (z.B. Hudson)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Craig erwähnt, gibt es in der Tat einen Rahmen, in MATLAB eingeführt R2013a. Darüber hinaus ist dieses framework Hinzugefügt TAPPlugin in R2014a die Ausgänge der Test Etwas-Protokoll. Mit diesem Protokoll können Sie Ihre CI-build mit einem TAPPlugin (zB. Jenkins , TeamCity), so dass das CI-system kann fehlschlagen, die bauen, wenn die tests fehlschlagen.
Ihrem CI erstellen kann, die Aussehen wie ein shell-Befehl starten Sie MATLAB, und führen Sie alle Ihre tests:
Dann die runAllMyTests schafft die suite zu laufen und läuft es mit der tap-output wird in eine Datei umgeleitet. Sie müssen tweak Besonderheiten hier, aber vielleicht können Sie loslegen:
EDIT: habe ich dieses Thema als erste zwei Beiträge der neue Entwickler-orientierten blog startete in diesem Jahr
Unit-testing, Simulink, ist nicht so einfach, leider. Mathworks haben die SystemTest. Alternativ können Sie die roll-your-eigenen Simulink-Test-framework, das ist der Ansatz, den wir befolgt haben, und ist nicht allzu schwierig, aber Sie müssen möglicherweise integrierte test-Gurtzeuge programmgesteuert.
Um die Integration mit CI, müssen Sie erstellen eine Funktion/Skript, führt alle tests, dann können Sie die Kommandozeilen-Parameter für MATLAB.exe ein Skript ausgeführt wird, auf start-up. Ich bin mir nicht sicher, hat jemand eine gute Möglichkeit, die Integration des test-Berichte mit der CI-software, wenn. Schauen Sie sich nur die Anzahl der Kommentare in Unit-Test-framework für MATLAB.
Mit 2015a Matlab stellt eine neue Produkt-name "Simulink-Test". Vielleicht werde Vereinfachung dieses Durcheinander.
http://www.mathworks.com/products/simulink-test/features.html#manage-test-plans-and-test-execution
Wenn Ihr system Komplex ist, sollten Sie zerlegen es mit Modell Referenz und testen Sie jeden von diesen unabhängig.
Eine andere Lösung (mehr "old school"), um Ihre wichtigsten Bausteine in einer Bibliothek und zum erstellen von kleinen Modellen.
Testen diese untermodelle und vor allem diejenigen mit einem Zustandsautomaten (Stateflow), das beste ist, zu erstellen zeitliche Testfälle
mit der
Signal builder
block. Sie haben eine leistungsfähige Funktionsignalbuilder
interagieren mit diesem block und load-test-Fällen. Meine Methode ist für jeden Fall jedes untermodell eine Eingabedatei und eine Ausgabedatei. Die Ausgänge des Modells sind die "richtige" Ausgabe und der von den Blöcken. Das Modell ist ausgeführt mitsim
(keine externe Eingänge) und 2 Ausgänge sind im Vergleich zu einem script angezeigt, welches signal unterschiedlich ist (und Wann).Könnten Sie ein existierendes system, aber ich benutze lieber meine eigene auf jeden Fall (oder einige von Ihnen).
Habe ich keine öffentlichen code, aber das ist die Art, wie ich verwenden. Ich glaube nicht, verwenden Sie ein CIS, also kann ich nicht beantworten, den zweiten Teil Ihrer Frage.
Matlab (seit 2013b) hat eine eingebaute Unterstützung für xUnit, in der form der Unit-Test-Framework.
Ich habe nicht verwendet, aber seit es möglich ist, führen Sie simulink von Matlab mit
sim()
dann das framework kann verwendet werden, um zu testen, Ihre simulink-Modelle. Sie Bibliotheken und möglicherweise Modelle müssen einen wrapper, um es auszuführen, wie die anderen Beantworter haben darauf hingewiesen.Gibt es viele Beispiele auf der Mathworks-Website, die leider nicht von Ihnen führen Sie simulink-Modelle. Ich würde-code-Beispiel für Sie, aber ich habe nicht ML2013b 🙁
In Ordnung zu initiieren Ihres tests aus a CI (ich verwende Jenkins), dann können Sie rufen Sie matlab zum ausführen .m-Datei, läuft Ihr test-suite, in diesem Beispiel cmd-Skript aufrufen
Run_Tests.m
aus Matlab:Beachten Sie, dass, wenn ein
startup.m exists in the directory that you call Matlab from, then it'll be executed automatically before
Run_Tests.m`.R2016b stellt die integration zwischen Simulink Test und MATLAB-Unit-Testing-framework. Tests erstellt, die mit Simulink-Test mit Test-Manager (*.mldatx) erkannt und ausgeführt werden können, die nativ mit der MATLAB-Unit-Test-Runner und so können Sie generieren JUnit-style XML-test-Ergebnisse oder TIPPEN Sie auf test-Ergebnisse erleichtern die Kontinuierliche integration von workflows.
Sehen diese Referenz für weitere Informationen: https://www.mathworks.com/help/sltest/ug/run-test-files-using-matlab-unit-test.html?s_tid=gn_loc_drop
Die Dokumentation zeigt ein Beispiel der Herstellung TIPPEN Sie die Ergebnisse mit matlab.unittest.plugins.TAPPlugin aber Sie können XMLPlugin (https://www.mathworks.com/help/matlab/ref/matlab.unittest.plugins.xmlplugin-class.html) statt, die ebenso leicht.
Dies sollte eine bessere integration innerhalb der MATLAB-Umgebung auch ohne CI im Bild mit der Fähigkeit, MATLAB-und Simulink-Tests zusammen, die in der gleichen test-suite und haben Sie laufen nahtlos zusammen. Wenn Sie zum Beispiel ein Verzeichnis MYDIR mit den beiden nativen MATLAB unit-tests und Simulink-Tests, die Sie tun können, etwas so einfaches wie die folgt ausgeführt beide Arten von tests in one shot:
Ich denke, Sie sind auf der Suche nach so etwas wie EZTEST. Es ist beabsichtigt, für Ihre speziellen Zweck: Test-driven development für Simulink-und Stateflow-auf unit-Ebene. Für sicherheitskritische software, gibt es auch ein Safety Manual mitgeliefert, die beschreibt, was unter Bezug auf die ISO 26262.
Bearbeiten: ich bin ein Entwickler dieser software, so meine Meinung, kann voreingenommen sein. Aber ich bin nicht involviert in das marketing oder den Verkauf des Produkts. Ich bin nur dieses posting, weil ich weiß, dass es wenig bis keine unit test frameworks gibt, treffen die Fragesteller die Bedürfnisse (wie die Antworten vermuten könnte).
Testen von Einheiten mit SIL-und PIL wird ebenfalls unterstützt. Leider bin ich nicht vertraut mit Hudson, daher kann ich keine Adresse, an die dieser Teil der Frage.
Ich habe gesehen, verschiedene Lösungen für das problem der unit-testing, Simulink-Modelle. Simulink Verification & Validation , die hat keine Unterstützung für xUnit-Konzepte des test-runners und test-Suiten, die zum Zeitpunkt der Untersuchung, TPT überladen ist mit Funktionen, die nicht einfach zu bedienen und sehr hart in Bezug auf die änderbarkeit und Wartbarkeit.
Außerdem habe ich gesehen, kundenspezifische Lösungen mit Hilfe von Matlab-Skripten und Excel-Tabellen, die waren leicht, aber auch schwer im Sinne von Verständlichkeit und Wartbarkeit. Ich würde noch nicht empfehlen, den Einsatz eines dieser Ansätze, zumindest nicht für unit-Tests.
Am Ende landeten wir mit Hilfe eines C-unit-testing-framework (CUnit) testen des generierten Codes. Während dieser hat definitiv den Nachteil, dass Sie haben, code zu erzeugen, vor der Prüfung, es hat auch eine Menge Vorteile, wie einfache integration in CI-Systemen, hohe Flexibilität schreiben unit-tests, schnelle Ausführung von unit-tests und nicht zuletzt refactoring-Funktionen in Bezug auf die Umstellung von Simulink zu einem anderen Modell-basierten Umgebung oder von hand geschriebenen code. Vor allem der Letzte Punkt sollte nicht unterschätzt werden, da habe ich viele gesehen, Simulink-Modelle, die sollte worden hand geschriebene Module in den ersten Platz. Heute, würde ich empfehlen GoogleTest statt CUnit.