Tool zum Generieren aller Kombinationen eines Parameterraums (zum Testen)

Angenommen, ich habe eine App geschrieben, die wie folgt aufgerufen werden kann:

my_magic_app --foo=yes --bar=5003 --baz=best_baz_ever

Nehmen wir nun an, ich möchte es testen, indem der Balkenbereich von einer Zahl zur anderen reicht, foo entweder ja oder nein ist und baz entweder alle Zeichenfolgen bis zu einer bestimmten Länge oder Zeichenfolgen aus einem bestimmten Wörterbuch sind, das ich in einer Datei habe. Außerdem möchte ich nicht alle Kombinationen, sondern nur unter einer bestimmten Bedingung (z. B. bar kann nicht über 5000 sein, wenn foo negativ ist).

Ich könnte ein Skript schreiben, um diese Generierung durchzuführen, die Bedingung anzuwenden usw. - aber ich habe mich gefragt, ob es so etwas schon gibt.

Anforderungen:

  • Für Unix-ähnliche Betriebssysteme
  • Freie Lizenz
  • Gratis
  • Es ist mir egal, ob es sich um ein Skript oder eine Binärdatei handelt
  • Nicht-arkane Sprachen bevorzugt (z. B. bash, python, perl)
Ich habe das immer mit Ad-hoc-Scripting gemacht, also ist es eine interessante Frage für mich. Ein paar kurze Anmerkungen: 1) Seien Sie vorsichtig mit der Größe des Testbereichs – es ist überraschend einfach, eine unkontrollierbare Anzahl von Tests zu erhalten; 2) im Allgemeinen werden Sie feststellen, dass es besser ist, Bereiche selbst anzugeben (foo in yes no); 3) Erwartete Ergebnisse sind schwer zu erzielen, insbesondere unter Bedingungen wie der, die Sie angeben (Sie möchten nicht von einem Problem auf zwei übergehen).
1. Ja, ich weiß. Schmerzhafter Punkt 3. Ich habe Code zum Generieren erwarteter Ergebnisse in meinem Fall (und manchmal gibt es keine erwarteten Ergebnisse, außer dass sie nicht abstürzen, oder die Ergebnisse sind immer gleich), aber ja, im Allgemeinen ist dies ein Problem.
Dies kann mit einem Listenverständnis erfolgen.
@dramzy: Ich suche nach vorhandener Software, nicht nach einem Ansatz zur Implementierung dieser Funktionalität ...

Antworten (2)

Die Category-Partition -Methode beschreibt diese Art der Constraint-basierten Testgenerierung. TSLGenerator ist ein Dienstprogramm, das unter bestimmten Einschränkungen Tests für Sie generieren kann. Die Ausgabe erfolgt in Form einer Testspezifikation; Sie sind einfach zu lesen, wenn Sie sie auf Ihre eigene Art und Weise in Unit-Test-Stubs oder Befehle umwandeln möchten.

Methode und Software werden in diesem Modul aus einem GATech Graduiertenkolleg beschrieben.

Sie könnten eine Kombination aus All-Pair-Tests und Boundary-Tests in Betracht ziehen. Das Testen aller Paare ist ein Verfahren zum Reduzieren der Anzahl von Testvektoren auf diejenigen, die alle Kombinationspaare ausüben. Es kann die Anzahl der Testfälle stark reduzieren, während die Testabdeckung nicht nennenswert reduziert wird. Natürlich müssen Sie Ihre Testanforderungen erfüllen, aber dies ist wirklich eine großartige Methode, wenn Sie sie verwenden können. Beim Testen von Zahlenbereichen ist es meist nur wirklich interessant, die Grenzen zu prüfen. Wenn eine Eingabe beispielsweise 0-5000 sein kann, dann sind die interessanten Testfälle -1, 0, 1, 4999, 5000 und 5001.

Was ich in der Vergangenheit zum Testen getan habe, war ein Skript zusammenzustellen, das alle Paare für Parameter verwendet, die unterschiedliche Auswahlmöglichkeiten haben, und Grenztests für numerische Parameter.

Ich glaube nicht, dass Sie es vermeiden werden, eine Art Skript zu schreiben, aber Sie können sicherlich Tools verwenden, die andere Leute entwickelt haben. James Bach, ein „berühmter“ Softwaretester, hat ein All-Pairs-Tool geschrieben, das Sie verwenden könnten.

Auch wenn dieser Vorschlag für die Art und Weise, wie ich Tests durchführe (oder auch nicht), relevant sein kann (oder auch nicht), ist es immer noch nicht das, wonach ich gefragt habe ... Ich muss den gesamten Bereich testen. Ein Gitter, das es teilweise bedeckt, könnte relevant sein, aber nicht die Extrema. Trotzdem +1 für die Mühe.
Der Fragesteller hat klar gesagt, dass er ALLE Kombinationen testen muss. Kein Tool kann automatisch erraten, welche Kombination es nicht wert ist, ausprobiert zu werden, insbesondere ohne die Interna des getesteten Programms zu kennen. Das von Ihnen vorgeschlagene Tool erstellt "Tests, die jeden Wert jeder Variablen mindestens einmal mit jedem Wert jeder anderen Variablen paaren", was nicht in Ordnung ist.
Nach meiner Erfahrung als Softwaretester finde ich, dass alle Paare ein nützliches Werkzeug sind, um einen hohen Abdeckungsgrad bereitzustellen und gleichzeitig die Anzahl der Testfälle zu reduzieren. Die Technik ist in der Welt der Softwaretests wohlbekannt und ich habe gehört, dass sie auf Konferenzen und in Büchern erwähnt wurde. Die meisten Tester, mit denen ich gearbeitet habe, wissen jedoch nichts davon, weil sie in die Rolle geworfen wurden. Ich habe es als Vorschlag gemacht, weil es in vielen Fällen eine praktikable Alternative ist, die vielleicht nicht in Betracht gezogen wurde.
Nochmals - fair genug, Ihre Erfahrung ist vollkommen gültig.
Die Reduzierung der Anzahl der Testfälle erfolgt normalerweise unter der Erwartung, dass die Softwareentwickler den Code nur einmal implementieren. Ich habe zu oft beobachtet, dass Code kopiert/eingefügt wurde, was zu Fehlern führte, die ich nicht erwartet hatte, weil ich das bereits getestet hatte. Seitdem teste ich gerne mehr Kombinationen als normalerweise nötig. (Ich arbeite in der Qualitätssicherung und stimme dem ISTQB in diesem Fall nicht zu.) Dies gilt für Black-Box-Tests