Modell basiertes Testen bzw. MDA fürs Testen
-
Hallo, ich wollte mal ein paar Meinungen zum Thema Modell basiertes Testen hören.
MbT ist sehr nah mit der MDA verwandt, und daher ist MDA wohl auch ein Thema für diesen Thread.Dies soll jedoch keine allgemeine Disskussion über MbT, MDA oder UML sein.
Sondern mir geht es um eine konkrete Anwendung dieser Techniken an einem Beispiel.
Wie schon erwähnt, geht es vorrangig um das Testen eines Modells, und weniger um modellgetriebene Softwareentwicklung.Aber zunächst einmal mein Beispiel:
Getestet werden soll eine Art Verzweigungsstruktur, welche sich z.b. mit Hilfe eines Status/Aktivitätsdiagrams festhalten ließe.
Es ließe sich aber auch als if-else Verzweigung darstellen://aktion/test if(antwort="ja") { //aktion/test if(antwort="1") //aktion/test else if(antwort="2") //aktion/test else //aktion/test } else { //aktion/test if(antwort="ja") //aktion/test else if(antwort="?") //aktion/test }Das Beispiel ist absichtlich abstrakt gehalten, die Modelle sind grob gesagt Bäume mit einem Anfangsknoten, und jeder weitere Knoten hat 1-n Verzweigungen. Und genau diese Modelle sollen nun getested werden, auf alle Verzweigungen. Bisher wird dort sehrviel Händisch in den Testfällen gearbeitet, welches aber natürlich sehr arbeitsaufwendig ist. Und da unsere Modelle mit der Zeit immer komplexer werden, müssen wir nun einen anderen Ansatz für das Testen suchen, da es händisch nicht mehr leistbar/bezahlbar ist.
Hier kommt jetzt MbT bzw. MDA ins Spiel. Da wir ja durch die vorliegenden Verzweigungen ein Modell besitzen, gegen das man das Testsystem testen kann, ist unser Gedanke, mittels der MbT aus diesen Modellen unsere Testfälle zu generieren.
Ich suche nun Anregungen/Kritik zu unserem (geplanten) Vorgehen sowie interessieren mich die Vor- und Nachteile von Modell basiertem Testen.
phlox
-
Ein paar Ideen dazu
- Alle Prüfgrössen zusammen bilden ein Alphabet.
- Ale Worte die sich mit diesem Alphabet bilden lassen und deren Länge kleiner ist als die maximale Anzahl von Tests über einem Wort bilden die Prüfsemantik.
- Die Erzeugung der Semantik durch Permutation kann maschinell erfolgen
- Die Worte lassen sich auf Bäume abbilden un dso zusammen mit den Ergebnissen z.B. in XML speichern und auswerten.Allerdings irritiert mich die Verzweigung nach "antwort" so wie Du sie zeigst; wird "antwort" in den Blöcken manipuliert? Sonst dürften einige Zweige redundant sein.
Grüsse
*this
P.S.: Irgendwas hatten die "ENT"-Autoren wohl gegen Vulkanierinnen.
Erst stirbt die Mutter, dann will ihr Kerl die Scheidung, dann stirbt das Kind und am Sonntag ist auch noch Trip fällig...
Haben Sie Mittel gegen vulkanische Depressionen an Bord, Herr Dr. ?
-
Gast++ schrieb:
Ein paar Ideen dazu
- Alle Prüfgrössen zusammen bilden ein Alphabet.
- Ale Worte die sich mit diesem Alphabet bilden lassen und deren Länge kleiner ist als die maximale Anzahl von Tests über einem Wort bilden die Prüfsemantik.
- Die Erzeugung der Semantik durch Permutation kann maschinell erfolgen
- Die Worte lassen sich auf Bäume abbilden un dso zusammen mit den Ergebnissen z.B. in XML speichern und auswerten.Allerdings irritiert mich die Verzweigung nach "antwort" so wie Du sie zeigst; wird "antwort" in den Blöcken manipuliert? Sonst dürften einige Zweige redundant sein.
Es lassen sich natürlich bestimmte Verzweigungstest gruppieren/klassifizieren, dennoch verstehe ich nicht ganz was du mit Alphabet meinst

Es wird der Baum ansich getestet, ob sein Inhalt mit dem des Modells übereinstimmt. Somit ist z.b. jeder mögliche Weg durch den Baum ein Test.
Die Generierung der Tests soll automatisiert werden, das siehst du richtig.
Nur weiss ich jetzt nicht, was du mit Worten auf Bäumen willst :p
antwort ist nur ein Platzhalter, wie gesagt enthält der Baum verschiedene Stati, je nach Status wird entschieden in welche Verzweigung gesprungen wird. (ja/nein Verzweigungen z.b.)
Und ich würde diesen Thread gerne frei von Vulkaniern halten... :p
-
phlox81 schrieb:
Es lassen sich natürlich bestimmte Verzweigungstest gruppieren/klassifizieren, dennoch verstehe ich nicht ganz was du mit Alphabet meinst

Alphabet Sigma = {"ja","1","2","?",...}
Semantik P'(Sigma) = { "ja", "1", "2", "?", "ja ja", "ja 1", "ja 2", "ja ?", "1 ja",...}
phlox81 schrieb:
Es wird der Baum an sich getestet,
Das "an sich" hat man schon Kant als unhaltbar vorgeworfen; wichtig ist nicht was er ist, sondern wie er wirkt.
Das soll jetzt nicht zur Philosophie (schon gar nicht der vulkanischen *SCNR*) führen sondern hat ganz konkrete Bedeutung, nämlichphlox81 schrieb:
was du mit Worten auf Bäumen willst :p

dadurch kann man das Problem formalisieren, unabhängig davon was die Worte konkret repräsentieren.
Grüsse
*this
-
Gast++ schrieb:
phlox81 schrieb:
Es lassen sich natürlich bestimmte Verzweigungstest gruppieren/klassifizieren, dennoch verstehe ich nicht ganz was du mit Alphabet meinst

Alphabet Sigma = {"ja","1","2","?",...}
Semantik P'(Sigma) = { "ja", "1", "2", "?", "ja ja", "ja 1", "ja 2", "ja ?", "1 ja",...}
Gut, Alphabet = Klassifizierung, Semantik P' = Gruppierung, allerdings gehts mir weniger um die Problemlösung, als um die Vorgehensweise.
Die Codeerstellung ist dann sowieso auf die einzelnen Entscheidungsblöcke+Verzweigungen angewiesen.
-
phlox81 schrieb:
Vorgehensweise.Die Codeerstellung ist dann sowieso auf die einzelnen Entscheidungsblöcke+Verzweigungen angewiesen.
Dann schreibst Du eine Funktion die alle Worte der Semantik einmal durch den "Dispatcher" (lass uns das komplette if-else-Konstrukt mal so nennen) schickt un die Rückgabe und ggf. Exceptions zusammen mit dem übergebenen "Wort" in einen (XML)Baum logged.
-
Gast++ schrieb:
phlox81 schrieb:
Vorgehensweise.Die Codeerstellung ist dann sowieso auf die einzelnen Entscheidungsblöcke+Verzweigungen angewiesen.
Dann schreibst Du eine Funktion die alle Worte der Semantik einmal durch den "Dispatcher" (lass uns das komplette if-else-Konstrukt mal so nennen) schickt un die Rückgabe und ggf. Exceptions zusammen mit dem übergebenen "Wort" in einen (XML)Baum logged.
Es soll aus dem Modell Testcode generiert werden, z.b. ein einzelner durchlauf durch eine Baumroute.
Ein (stark vereinfachtes) Beispiel:function testcase1(testobject to) { to.Send("ja"); check(to.Recv());//auf mögliche antwort testen. // und in die nächste verzweigung springen: to.Send("1"); check(to.Recv());//auf mögliche antwort testen. // ende des generierten testfalls }Aber ich glaube wir reden irgendwie aneinander vorbei.
Mir geht es auch mehr um den Ansatz des MbT bzw. MDA, und ob diese sich für das Konkrete Beispiel eignet.
-
phlox81 schrieb:
Aber ich glaube wir reden irgendwie aneinander vorbei.
Meinst Du? Das glaube ich eigentlich nicht:
- Du hast das Modell in irgendeiner Form vorliegen; z.B. als (UML) XMI
- Du bildest das Modell auf Code ab, also generierst Code.
- Jetzt bildest Du das Modell nochmals ab, und zwar auf das beschriebene Alphabet und nutzt eine Funktion, die dynamisch mit dem Resultat dieser Abbildung operiert um das Generat zu testen.Das ist doch konzeptionell völlig konsistent mit MDA/MBT.
Damit sowas geht macht man doch MDA.phlox81 schrieb:
Mir geht es auch mehr um den Ansatz des MbT bzw. MDA, und ob diese sich für das Konkrete Beispiel eignet.
Dto.!
Grüsse
*this
-
Gast++ schrieb:
phlox81 schrieb:
Aber ich glaube wir reden irgendwie aneinander vorbei.
Meinst Du? Das glaube ich eigentlich nicht:
- Du hast das Modell in irgendeiner Form vorliegen; z.B. als (UML) XMI
- Du bildest das Modell auf Code ab, also generierst Code.- Jetzt bildest Du das Modell nochmals ab, und zwar auf das beschriebene Alphabet und nutzt eine Funktion, die dynamisch mit dem Resultat dieser Abbildung operiert um das Generat zu testen.
jo. Das Modell wird aus einem Format (MOF/UML/XMI) geladen, und mit hilfe von vorgefertigten Mustern/Klassifizierungen/Gruppierungen
in Testfälle übersetzt, welche dann los gelöst von diesem Prozess den eigentlichen Test fahren.
-
-
Prof84 schrieb:
http://www.sigs-datacom.de/sd/publications/pub_article_show.htm?&AID=2061&Table=sd_article
Kommt dazu noch ne These... ?

-
Prof84 schrieb:
http://www.sigs-datacom.de/sd/publications/pub_article_show.htm?&AID=2061&Table=sd_article
Der Artikel ist nicht mehr öffentlich zugänglich. Und 2.50€ für eine PDF Datei finde ich dann doch was viel

Kannst du denn sonst noch was zu dem Thema beitragen/sagen?