© Enkel/Shutterstock.com
Testautomatisierung von Sprachassistenten mit Java und Cucumber

Hallo Siri, teste meine Alexa!


Haben Sie sich schon mal gefragt, wie das Testen von Sprachassistenten aussehen könnte? Die erste Möglichkeit ist wohl, auf eine Reihe von Testpersonen zurückzugreifen und verschiedenste Spracheingaben mit den Ausgaben zu vergleichen, manuell versteht sich. In diesem Artikel möchte ich jedoch einen Weg zum Testen von Sprachassistenten mit Hilfe von Java und Cucumber aufzeigen.

Obwohl die oben erwähnte Vorstellung, auf eine Reihe von Testpersonen zurückzugreifen, in Anbetracht der unzähligen Kombinationen schwer fällt, ist es sicherlich eine Möglichkeit. Aus praktischer Sicht sollte hier aber auf einen Automatismus zurückgegriffen werden, nicht nur um Kosten und Zeit zu sparen, sondern auch, um die Mitarbeitermotivation hochzuhalten. Diese Problemstellung eignet sich außerdem sehr gut, um verhaltensgesteuert zu testen, daher liegt auch der Einsatz von BDD (Behaviour-driven Development) nahe.

Vor einiger Zeit begann ich, für ein Projekt meinen eigenen Sprachassistenten zu entwickeln. Während der Konzeptionsphase und der Überlegung, wie die Architektur auszusehen hatte, stellte sich die Frage nach einer sinnvollen Testmöglichkeit. Testpersonen, die den ganzen Tag nichts anderes taten, als mit dem Assistenten zu reden, waren aufgrund des Budgets keine Option.

In diesem Artikel werde ich eine Möglichkeit der Testautomatisierung von Sprachassistenten mit Javas Text to Speech Engine (kurz: TTS) vorstellen. Hinzu kommen der Einsatz von Sphinx4 als Speech-to-Text-Technologie und Cucumber. Für die Verwaltung der notwendigen Libraries wird Maven verwendet.

Cucumber

Cucumber ist ein Framework, um Testszenarien in natürlicher Sprache zu beschreiben. Somit können auch Nichtentwickler den Sachverhalt einfach verstehen. Die Cucumber-Syntax erfolgt in Form von given, when, then (Abb. 1).

moll_testautomatisierung_1.tif_fmt1.jpgAbb. 1: Beispiel: Testen eines Log-in-Prozesses

Jeder Schritt zeigt sichtbar auf, welcher Sachverhalt durchgeführt wird. Mit then folgt schließlich die Erfolgsbedingung und Prüfung. Entwickler müssen jetzt nur noch den zugehörigen Code mit den passenden Funktionen füllen (Abb. 2).

Cucumber ist ein vielseitig einsetzbares BDD Framework, das deutlich mehr bietet als das hier kurz Aufgezeigte. Für unser Vorhaben reicht dieser knappe Abriss jedoch aus.

moll_testautomatisierung_2.tif_fmt1.jpgAbb. 2: Beispiel: Zugehörige Java-Funktionen befüllen

TTS – Text to Speech Engine

Es gibt zahlreiche Engines, die sich für die Aussprache von Texten eignen. TTS ist jedoch kostenlos und wird lokal ausgeführt, ohne Kommunikation mit Drittanbietern. Das Thema Datenschutz ist hier ein wichtiger Faktor, schließlich sollen unsere Testdaten nicht weitergegeben werden. Um TTS für unser Projekt zu verwenden, legen wir ein Maven-Projekt an und fügen die in Listing 1 gezeigten Dependencies ein.

Listing 1: Maven Dependencies für TTS

<dependency> <groupId>de.dfki.mary</groupId> <artifactId>marytts-runtime</artifactId> <version>5.2</version> </dependency> <dependency> <groupId>de.dfki.mary</groupId> <artifactId>marytts-common</artifactId> <version>5.2</version> </dependency>

Anschließend wird noch eine angenehme Stimme, passend zu unserer Projektsprache, benötigt. Für die meisten Sprachen existieren zugehörige Stimmen mit passendem Dialekt. Es ist empfehlenswert für deutsche Sprachausgaben die deutschen Stimmen zu verwenden, andernfalls könnte die Aussprache der Ergebnisse sehr eigenartig klingen und vom Sprachassistenten unter Umständen nicht erkannt werden (Listing 2).

Listing 2: Einbindung einer deutschen Frauenstimme

<!-- Female Voice --> <dependency> <groupId>de.dfki.mary</groupId> <artifactId>voice-bits1-hsmm</artifactId> <version>5.2</version> </dependency>

Achtung: Die Dependencies liegen nicht in Maven Cent...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang