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.
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.
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?
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.