Die Anwendungsentwicklung von Pepper kann grundsätzlich in einer visuellen Programmierumgebung namens Choregraphe mit einer Schnittstelle im Stil der Verbindung von "Boxen" durchgeführt werden, und es ist relativ einfach, Anwendungen zu entwickeln. Entwickler können die erforderlichen Boxen aus der "Boxbibliothek" auswählen und verbinden, um das Verhalten der Anwendung zu definieren ("Verhalten").
Obwohl die Standard-Box-Bibliotheken ein angemessenes Verhalten erzielen können, stellen diese Box-Bibliotheken Boxen nicht unbedingt umfassend bereit, und Sie müssen die Box-Implementierung (Python-Skript usw.) anpassen. Die Realität ist, dass es einige Fälle gibt, in denen Sie müssen. Für diese Teile frage ich mich, ob es realistisch ist, Box-Bibliotheken auf Community-Basis zu entwickeln.
Dann denke ich, dass ich eine Box-Bibliothek erstellen werde, aber natürlich möchte ich keinen Fehler in der Box haben und in der späteren Phase Probleme haben. Ich kann jedoch offiziell nichts finden, was ein Box-Test-Framework zu sein scheint ... Mit diesem Gefühl versuche ich, einen Prototyp zu erstellen, während ich darüber nachdenke, wie ich Peppers Box-Bibliothek testen und die Qualität verbessern kann, damit das Memo.
Wenn man sich Tests in anderen Programmiersprachen wie Python ansieht, scheint es, dass die Eingabe-, Ausgabe- und Parameterformate von Boxen durch Python- "Klassen" ersetzt werden können, wie sie sind.
In Python beschreibt ein Testfall beispielsweise, ob sich (eine Instanz von) der zu testenden Klasse wie beabsichtigt verhält. Schreiben Sie in diesem Testfall den Code, der den Wert tatsächlich in die zu testende Instanz eingibt, und prüfen Sie, ob der Ausgabewert mit dem erwarteten Wert übereinstimmt. In Choregraphe erscheint es naheliegend, ein Testverhalten auf die gleiche Weise vorzubereiten und die zu testende Box und die Box zur Überprüfung des Ergebnisses zu verbinden. Im Fall eines Wait-Box-Tests muss die Wait-Box beispielsweise n Sekunden nach Erhalt der Eingabe ausgeben und sollte nicht vor n Sekunden ausgegeben werden.
Offensichtlich muss der Test an genau derselben Box in der Boxbibliothek durchgeführt werden. Das Testen mit einer anderen Version der Box aus der Boxbibliothek garantiert nicht, dass die Box in der Boxbibliothek gültig ist.
Wie ich in Peppers Dateiexploration (Projektdatei) ein wenig geschrieben habe, wird das Feld, das aus der Boxbibliothek in das Verhalten gezogen und dort abgelegt wurde, während des Verhaltens kopiert. Es scheint, dass es in der Form des Seins angeordnet ist. Selbst wenn Sie in diesem Fall ein Testverhalten erstellen, unterscheidet sich die zu testende Box möglicherweise von der in der Boxbibliothek und kann ihre Rolle als Test möglicherweise nicht vollständig erfüllen. Ich werde kommen.
Um die Identität der Box-Implementierung wie folgt beizubehalten, scheint es notwendig zu sein, die Beziehung zwischen der Box im Verhalten und der Box-Bibliothek der Drag & Drop-Quelle irgendwie identifizieren zu können. Wenn ich mir das Format der Verhaltensdefinitionsdatei anschaue, kann ich keine Informationen finden, die die Box eindeutig identifizieren können ... Beispiel: Im neuesten Dokument: Verbesserte Aktualisierungsboxen in Choregraphe 2.0.5,
Here is the list of boxes you should cut/replace:
Oder (eine Nuance, die von Hand ersetzt werden kann?),
Now these boxes call an ALMotion method, so they will be updated automatically by new releases.
Es gibt auch eine Beschreibung wie (Sie wird automatisch aktualisiert (ohne die Box zu ersetzen), da es sich um eine Änderung in der API-Implementierung handelt). Wenn sich also die Box in der Box-Bibliothek ändert, wird die Verhaltensseite automatisch geändert. Ich habe das Gefühl, dass es keinen offiziellen Mechanismus gibt, um dem zu folgen.
Deshalb werde ich die folgenden zwei Dinge betrachten.
Lassen Sie uns zunächst überlegen, wie die Identität der Box erhalten (kopiert) werden kann.
Ich habe einen Prototyp eines automatischen Ersatzwerkzeugs erstellt. Der Code ist unten.
https://github.com/yacchin1205/choregraphe-box-util
Ich habe es nur unter Linux getestet, aber es sollte installiert werden, indem es ordnungsgemäß geklont und "pip install -r require.txt; python setup.py install" ausgeführt wird. vielleicht. Der Code ist in Python geschrieben. Es war mein erstes Mal, dass ich ein unabhängiges Tool in Python geschrieben habe, also habe ich viel gelernt ...
Darüber hinaus wird lxml für die XML-Verarbeitung verwendet. Dies liegt daran, dass die XML-Datei der Box den CDATA-Abschnitt verwendet und der Python-Standard ElementTree den CDATA-Abschnitt nicht gut ausgegeben hat ...
Wie zu verwenden
$ replace-boxes -l (Pfad der Boxbibliothek(Es werden nur Verzeichnisse unterstützt)) (Von dem Projekt.Pfad zur PML-Datei)
Zum Beispiel bezüglich des Verhaltens im angegebenen Projekt
Auf diese Weise besteht die Idee darin, die Identität der Boxen im Verhalten und der Boxen in der Boxbibliothek beizubehalten. Es ist ein Tool, das ich immer noch als Test verwende. Sichern Sie also Ihr Projekt, bevor Sie es ausprobieren. Wenn Sie nur sehen möchten, wie die Konvertierung aussieht, können Sie die Option "--dry-run -v" hinzufügen.
Nachfolgend finden Sie Details zu unseren Aktivitäten ...
Zunächst muss die Entsprechung zwischen der Boxbibliothek und der Verhaltensseite jeder Box abgeglichen werden. Dieses Mal prüfen wir, ob die folgenden Elemente übereinstimmen.
Der Name der Box ist umständlich zu verarbeiten. Boxnamen haben keinen Namespace wie "Say" oder "Basic Awareness", daher können mehrere Boxbibliotheken mit demselben Namen dupliziert werden. Wenn mehrere Felder im selben Ablauf platziert werden, werden Nummern zugewiesen, die die Kopie angeben, z. B. "Say (1)" und "Say (2)", was noch komplizierter ist.
Für den Boxnamenabgleich wird der Abgleich in einem Format wie "Boxname (n)" durchgeführt, dies allein löst jedoch nicht den Boxnamenkonflikt, der von verschiedenen Boxbibliotheken bereitgestellt wird.
Daher versuche ich, indem ich der Erklärung des Feldes die folgende annotationsähnliche Sache hinzufüge, um festzustellen, ob sie auch übereinstimmt.
@source https://github.com/yacchin1205/choregraphe-box-util
Wenn ich mir den Wert dieser "@ source" anschaue, versuche ich festzustellen, ob sie aus derselben Box-Bibliothek stammt. Wenn Sie dieses Urteil aufheben möchten, können Sie die Option "--ignore-tags" hinzufügen.
Beim Ersetzen werden grundsätzlich die Boxen in der übereinstimmenden Boxbibliothek in das Verhalten kopiert. Dies ersetzt das Box-Skript, die Beschreibung usw. Die Ausnahme ist der Wert von Parameter, der den Wert in dem Feld erbt, das ersetzt wird.
Darüber hinaus sind Plugin-Felder, in denen Textfelder in Choregraphe angezeigt werden, wie z. B. Textbearbeitung, nicht für die Konvertierung vorgesehen (dieses Plugin scheint das Skript selbst in das Feld neu zu schreiben, sodass es eine gute Ersatzmethode darstellt. Ich kann nicht denken an ...) Das Ersetzen wird auch nicht unterstützt, wenn Ressourcen (z. B. Audiodateien) an die Box gebunden sind.
Das ist der Grund, warum wir, obwohl es begrenzt ist, die Identität der Box zwischen dem Verhalten und der Boxbibliothek beibehalten können. Erstellen wir also ein Testverhalten.
Es ist schwer, es plötzlich umfassend zu machen. Von den Box-Bibliotheken, die ich mit Ich habe HTML5 TEST mit Pepper ausprobiert erstellt habe, lautet das Thema "URL-Box anzeigen". Ich entschied mich für ein einfaches Testverhalten.
https://github.com/yacchin1205/pepper-web-boxes
Testverhalten finden Sie unter tests / test-show-url
.
Der Test für den Erfolg von Show URL sieht so aus.
Es besteht ungefähr aus den folgenden zwei Flüssen.
Der Punkt ist 2. Das Feld Warten unter der URL anzeigen teilt dem Protokoll mit, dass es sich um einen Fehler handelt, wenn die onSuccess-Ausgabe nicht innerhalb von 10 Sekunden nach dem Start ausgelöst wird (wenn in der onInput-Eingabe des Assert Bang nichts eingegeben wird). Es ist für die Ausgabe ausgelegt. Wenn die onFailure-Ausgabe in das Feld Fehler eingegeben wird, wird sie außerdem als sofortige Fehlerbehandlung in das Protokoll ausgegeben.
Führen Sie einfach dieses Verhalten aus, um festzustellen, ob sich das Feld URL anzeigen mit einer Fehlermeldung wie beabsichtigt verhält.
Umgekehrt gibt der Test auch an, dass das Ausführen von Show URL nach Disable WiFi zu einem Fehler führt.
Führen Sie hier nach dem Ausführen von Disable WiFi Show URL aus und bestätigen Sie, dass die onFailure-Ausgabe vom Feld Assert Bang ausgeführt wird. Wenn onSuccess unbeabsichtigt ausgegeben wird, zeigt das Feld Fehler eindeutig an, dass es sich um einen Fehler handelt. Auf diese Weise kann überprüft werden, ob die Verarbeitung in einer Situation, in der die Box nicht funktioniert, wie beabsichtigt ist.
Die Show URL-Felder in diesen Tests werden während des Verhaltens als separate Felder beschrieben, aber der obige Befehl replace-boxs
kann verwendet werden, um die Identität mit der Box-Bibliothek aufrechtzuerhalten. Wenn Sie im Feld URL anzeigen einen Fehler machen, können Sie das Feld im Testverhalten neu schreiben und erneut testen.
In diesem Sinne habe ich ein Tool geschrieben, um die Identität der Box zu erhalten, und ein Testverhalten, um festzustellen, ob sich die Box wie erwartet verhält.
Persönlich mag ich die Abteilung von Choregraphe sehr, daher denke ich, dass ich von Zeit zu Zeit solche Hilfsmittel entwickeln kann.
Ich würde auch gerne ein Tool zur Dokumentgenerierung für Box-Bibliotheken sehen ... Ich frage mich, ob die an Choregraphe angehängte Box-Bibliothek keine Dokumente enthält.