Testen – Botentwicklung

In diesem Artikel schauen wir uns das Thema Test bei der Einführung eines Bots näher an. Bei einer Entwicklung eines Bots finden grundsätzlich Unit-Tests, Integrationstests, Funktionstests und final der User Acceptance-Test (UAT) statt. Parallel wird auch regelmäßig ein Lasttest (load test) durchgeführt, welcher produktionsnahen Last simuliert. In diesem Artikel wird der Funktionstest bei Bot-Entwicklung näher angeschaut. Weitere Artikel zu den anderen Testarten werden folgen.

Funktionstest

In diesem Test stehen die Anforderungsdokumente im Vordergrund. Funktionen werden auf Ihre richtige und korrekte technische Umsetzung hin getestet. Anhand von Anforderungsdokumenten sollten ausreichend Testfälle vorliegen. Die Testfälle sollten nicht nur den „happy path“, sondern sollten auch Fälle mit Fehlern/Exceptions einschließen.

6 Schritte beim Funktionstest:

  • Wichtige Funktionen der Software sind zu identifizieren und somit zu priorisieren
  • Testdaten sind gemäß Konzept anzulegen
  • Input und erwartetes Output müssen im Rahmen der Testfälle definiert werden
  • Ausführen von Testfällen
  • Vergleich des Outputs und der erwarteten Ergebnisse
  • Fehler dokumentieren / bug oder defect erfassen

Automatisches Testen mit Microsoft Bot Framework

Der klassische Entwicklungsprozess startet auf Visual Code oder Visual Studio. Dann wird „gedebuggt“. Auf botframework-emulator kann der Code simuliert und getestet werden. Oft werden Entwicklertests auf diesem Wege durchgeführt. Bei kleineren Projekten kann man dieses Verfahren auch nutzen. Doch bei größeren Vorhaben ist dieses Verfahren nicht effizient und effektiv, da ein ausführlicher Test notwendig ist. Denn Fehler in der Produktion, abhängig von der Branche, kann einen signifikanten Reputationsschaden zur Folge haben. Um die Testphase gut auszunutzen, sind automatische Testverfahren mit entsprechender Dokumentation nützlich. Die Entwicklung von Testfällen ist ein enormer aber nur ein Einmalaufwand. Die Vorteile von dieser Testautomatisierung sind allerdings:

  • Testdurchführung kann beliebig oft durchgeführt werden
  • Testumgebung kann ausgelastet werden
  • Wiederholungsmöglichkeit der Testergebnisse
  • Schnelles Feedback für die Entwickler
  • Revisionssichere Dokumentation
  • Kosten und Zeitersparnis
  • Größere Datenmengen können effizient getestet werden

 

Welche Lösungen gibt es dabei? Wie testet man idealerweise einen Dialog?

Wie führt man einen funktionalen Test durch? Ein Weg ist mit Hilfe des Kanals „Direct Line“. Nach der Erstellung eines Bots auf https://dev.botframework.com/bots, haben Sie die Möglichkeit den Kanal „Direct Line“ zu aktivieren. Anschließend sollten Sie den Bot selber hosten. Mit Hilfe von „Direct Line“ senden Sie Nachrichten direkt an den gehosteten Bot. Dieser erfasst die Antwort und prüft die Richtigkeit der Nachricht an Hand der definierten Testfälle, die in dem Code hinterlegt sind. Anbei ein Beispielcode wie so ein Testfall im Code als ein Task aussehen kann (ein Thread wäre zu ‚teuer‘ auf C#).  In dem Beispiel oben wird die Texteingabe im Feld „Action“ simuliert. Die generierte Antwort mit dem „Expected Reply verglichen“, welche das Testergebnis bestimmt. Diese Testfälle in C# zu schreiben ist einfach. Für mehr Informationen sehen Sie sich den folgenden Code auf github an (Azure – Funktionale Tests; Die Klasse TestRunner ist der Kern zur Ausführung der Testfälle).

Was sagen die anderen zu der Idee?