Forum: Mikrocontroller und Digitale Elektronik Test von Algorithmen


von A. Z. (donvido)


Lesenswert?

Moin zusammen,

ich darf mich bei uns in der Firma seit neuestem mit Softwaretest 
auseinandersetzen und habe eigentlich nur wenig Ahnung davon.
Meine Frage lautet:
Wie teste ich komplexe Algorithmen wie einen Regler.
Klar, ich könnte den Regler Open Loop betrachen und muss bei gleichen 
Eingängen und Parametrierung die gleichen Ergebnisse erhalten. Aber 
müssete ich dann nicht auch für sämtliche Parameter das gesamte Spektrum 
des erlaubten Wertebereichs durchfahren ums sicherzustellen, dass nicht 
irgendwo ein parameterabhängiger Fehler existiert? Wie macht man sowas 
normalerweise?

Könnt ihr außerdem gute Literatur zu dem Thema empfehlen?

VIelen Dank schonmal.

von MaWin (Gast)


Lesenswert?

A. Z. schrieb:
> Wie teste ich komplexe Algorithmen wie einen Regler

Automatisiert.

Man erstellt Testfälle mit erwarteten Ergebnissen und lässt die 
regelmassig laufen.
Schlägt einer fehl, bekommen die Entwickler, die seit dem letzten Erfolg 
was eingecheckt haben, eine eMail.

Wie die Testfälle auszusehen haben ? Am besten sollte das der Entwickler 
wissen: Für jedes IF braucht er einen Testfall für den IF-Zweig und 
einen für den ELSE Zweig. Bzw einen für Exception und einen für 
Normaldurchlauf. Und bei Arithmetik einen für Erfolg und einen für 
Bereichsüberschreitung.

Aber meist ergeben sich die Testfälle durch gemeldete Bugs. Einfach ist 
der Test interner Funktionen. Schwieriger bei graphischen Oberflächen 
'richtig gezeichnet' und Multithreading.

Wer automatisiert testet, ist davor gefeit, denselben Bug 2 x 
auszuliefern und daher bereit für ISO9001/14001.

von A. Z. (donvido)


Lesenswert?

MaWin schrieb:
> Man erstellt Testfälle mit erwarteten Ergebnissen und lässt die
> regelmassig laufen.

Ja okay, das war mir soweit auch schon klar.
Aber ein einfacher PID Regler hat in der Regel keine If-Verzweigung.
Jetzt wäre es ja eine Möglichkeit diesen auf Überschwinger, Regelgüte, 
Einschwingzeit, etc. zu testen. Das erfordert aber ein Modell, das 
ausreichend genau ist um das gewünschte Verhalten zu simulieren.
Die Alternative ist dann, wie oben schon genannnt, der Open Loop Test.
Aber wenn ich jetzt z.B. eine Abhängigkeit von der Eingangsgröße habe, 
dann muss ich doch mindestens den gesamten Erlaubten Bereich durchtesten 
oder nicht?

von MaWin (Gast)


Lesenswert?

Auch ein PID Regler ist deterministisch.
Aber ich gehe davon aus, dass er parametrisierbar ist.
Also müsste man je ein paar Testfälle für unterschiedliche 
Parametersätze mit Sollwert/Istwert rechnen lassen und schauen ob die 
Ergebnisse plausibel (ich würde das per Hand machen, aber wer es aus 
einem Moddll ableiten kann, auch gut, nur testet sich dann der 
Algorithmus gegen einen Algorithmus, womöglich denselben, quasi selbst) 
sind.
Dann Überläufe provozieren und das Verhalten testen.

von Michael Gugelhupf (Gast)


Lesenswert?

Klingt nach Blackbox-Tests, also du schaust in die Software nicht rein, 
sondern betrachtest sie als eine Kiste unbekannten Inhalts die Ein- und 
Ausgänge hat. Daher spielt, formal gesehen, das Abklappern aller 
Verzweigungen (IFs) keine Bedeutung. Das wäre ein Whitebox-Test.

Was getestet werden muss hängt stark von den Anforderungen ab. Daher zu 
erst einmal die Anforderungen besorgen (Lastenheft o.ä., und am 
Pflichtenheft o.ä. kommst du wahrscheinlich auch nicht vorbei). Mit dem 
Programmierer reden hilft auch immer, da in vielen Bastelbuden 
Anforderungen ohne Dokumentation geändert werden und die Programmierer 
häufig am besten darüber bescheid wissen.

In den Anforderungen suchst du nach typischen Betriebsparametern, dazu 
nach Eckpunkten der Bereiche in denen die Software funktionieren muss, 
auch Anforderungen zu definiertem Fehlerverhalten, usw. Das alles wird 
in Tests gegossen. In den Anforderungen können auch Hinweise auf Normen 
oder Sicherheitsvorschriften stehen. Auch aus denen können (bei 
sicherheitsrelevanten Dingen meistens müssen) sich Tests ergeben. 
Allgemein nicht nur Positivtests (legale Eingangswerte, 
Betriebszustände, ...), sondern auch Negativtests (illegale 
Eingangswerte, illegale Betriebszustände ...) definieren.

Den ganzen Wertebereich aller Eingangswerte durchzukurbeln ist selten 
sinnvoll. Bei Dingen mit "Gedächtnis" (z.B. nicht zeitinvariant) ist das 
fast unmöglich.

Ach, ja, wie schon jemand schrieb: Tests == automatische Tests.

von Dunno.. (Gast)


Lesenswert?

MaWin schrieb:
> nur testet sich dann der Algorithmus gegen einen Algorithmus, womöglich
> denselben, quasi selbst

Wenn ich den gleichen Algorithmus von verschiedenen Leuten unabhängig 
programmiert habe, kann ich einfach zu den gleichen eingabewerten auf 
gleiche Ausgabewerte testen.

Imho keine ganz schlechte Option für sowas. Ist halt Aufwand.

von Martin S. (strubi)


Lesenswert?

Indem du alles in die Simulation steckst und mit Daten fuetterst.
Stichwort 'Model in the loop'.
Bis auf irgend eine Ebene musst du typischerweise selbst modellieren, 
der Teich ist beliebig tief, je nach Sicherheitsanforderungen bzw. was 
alles mitmodelliert werden soll (Software/CPU/Hardware). Kann an mal mit 
matlab anfangen.
Ich hab das Spiel mit einem PID bis auf die Knochen (komplette 
Verifikation des Gesamtsystems auf HDL-Ebene) durch und hatte mit 
Python/Jupyter Notebook autotests am meisten Freude.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.