Wie kann ich eine Anwendung testen, die von bestimmter Hardware abhängt?

8

Ich habe eine Android-Anwendung geschrieben. Die Anwendung erfordert eine Bluetooth-Verbindung zu einer bestimmten Hardware, die derzeit ein Prototyp ist. Die einzige Möglichkeit, die App derzeit zu testen, besteht darin, Hunderte von Kilometern zu fahren, um zu sehen, ob sie funktioniert. Wenn ich mit einer ANR ende, kann es vor meinem Kunden sehr peinlich sein. Der Verbindungstyp und die Mechanik dieser App sind sehr eng auf diese Hardware zugeschnitten. Es ist mir nicht gestattet, einen Laptop mitzubringen, mein Telefon zu rooten oder eine Verbindung zu einem anderen Gerät auf dem Gelände herzustellen.

Gibt es eine Möglichkeit, diese Anwendung zu Hause zu testen oder die Aktivitäten zu durchlaufen, um sicherzustellen, dass ich bei der zweiten Aktivität keine weitere ANR habe, während der Kunde mich entsetzt ansieht?

Ich sollte darauf hinweisen, dass ich kein erfahrener Programmierer bin, und dies ist eine neue Idee, bei der ich jemandem helfe, da die Einstellung von Mitarbeitern derzeit nicht in Frage kommt. Daher fehlen mir zweifellos einige der grundlegenden Konzepte, um dies zu entwickeln.

RossC
quelle
2
Ist die Schnittstelle zu komplex, um sie zu verspotten? Es sollte möglich sein, zumindest die Grundfunktionen des Geräts zu verspotten.
MrSmith42
@ MrSmith42 Ich hatte diese Möglichkeit nicht in Betracht gezogen. Kann ich das Senden und Empfangen von Daten über Bluetooth verspotten? Derzeit komme ich nicht an meiner ersten Aktivität vorbei, da kein gekoppeltes Gerät und keine offene serielle Bluetooth-Verbindung vorhanden ist.
RossC
Zur Ausarbeitung benötige ich die AVD (oder das physische Telefon), um eine Verbindung über eine gefälschte Bluetooth-Verbindung herzustellen und dann die relevanten Daten von meinem Telefon aus zu senden. Ich weiß, dass der empfangende Datenteil gut funktioniert, daher brauche ich nicht einmal etwas zurück. Ich muss nur (nur als Beispiel) 'A' und mein Telefon drücken, um den Bytestream 'A' an die Hardware zu senden. Was danach passiert, hängt von der Hardware ab. Ich kann dies nicht wie gesagt testen, da ich keine Verbindung herstellen kann. Ich bin gestern rübergefahren, mit Hardware verbunden, habe meine erste Aktivität geöffnet, den ersten Knopf gedrückt und den schwarzen Bildschirm, absolut krank.
RossC
1
Was ist ANR? Ich gehe davon aus, dass Sie nicht Alpha Natural Resources oder Adult Nursing Relationship meinen (was hat sich Google ausgedacht)? Oder eine AVD?
Marjan Venema
@MarjanVenema Sorry, hätte klarstellen sollen. ANR ist eine Anwendung, die nicht reagiert oder das Schließen eines anderen Namens erzwingt. In diesem Fall stürzt Ihre Anwendung vollständig ab und Sie kehren zum Startbildschirm zurück. Vor einem Kunden sieht es schlecht aus. AVD ist ein virtuelles Android-Gerät, mit dem Sie Ihre Anwendung auf verschiedenen virtuellen Geräten testen können. Dies ist ein grundlegender Teil des Android-Testprozesses ... bis diese Situation eintritt (die Hardware, mit der das Gerät über BlueTooth verbunden wird, kann nicht verspottet werden). Ich hoffe das klärt sich.
RossC

Antworten:

11

Wie von @ MrSmith42 vorgeschlagen, sollten Sie das Beste tun, um die Benutzeroberfläche zu verspotten. Sie benötigen keine Bluetooth-Verbindung, um sich darüber lustig zu machen. Rufen Sie eine Schnittstelle auf. Diese Schnittstelle sendet beim Debuggen das, was Sie für eine bestimmte Eingabe erwarten würden. Wenn es nicht im Debugging ist, führt es die eigentliche Arbeit des Sendens und Empfangens der Daten aus. Sie stellen sicher, dass das, was Sie an die Schnittstelle senden und wie Sie mit der Ausgabe umgehen, funktioniert. Streuen Sie ein großzügiges Stück Fehlerbehandlung, verwalten Sie Fehler, die Sie verwalten und protokollieren können, und Sie haben selbst etwas, das Sie direkt beim Client testen können.

Die einzige Möglichkeit für Fehler zu diesem Zeitpunkt besteht in dem Unterschied zwischen der erwarteten Handhabung des Geräts und seinem tatsächlichen Verhalten. Nach meiner Erfahrung ist Hardware niemals vollständig zuverlässig. Stellen Sie also sicher, dass Sie einen umfassenden Mechanismus zur Fehlerbehandlung für etwas haben, von dem Sie nicht erwarten, dass es zumindest eine Art Protokoll ausgibt.

Neil
quelle
1
Ihr Rat ist ausgezeichnet, leider geht die tatsächliche Kodierung weit über meine Fähigkeiten hinaus. Ich muss dies einem Vollzeitentwickler übergeben. Vielen Dank für Ihre Antwort. Ich werde sie als akzeptiert markieren, da dies der beste Weg ist. Ich habe einfach absolut keine Ahnung, wo man überhaupt anfangen würde, eine Scheinschnittstelle zu schreiben, und es ist mir klar geworden, dass ich hier über meinem Kopf bin. Danke euch beiden. Nur zu Ihrer Information, die Schnittstelle ist nur eine serielle Bluetooth-Verbindung. Ich werde nur Strings (als Bytes) über die Verbindung senden.
RossC
1
Ich wollte nur noch eine letzte Sache hinzufügen, wenn jemand auf diese Frage stößt und mehr über diese Dinge weiß
RossC
@ RossC Nun, ich sage "Schnittstelle", aber die Schnittstelle ist, wie Sie es definieren. In der Produktion überträgt die Schnittstelle selbst Daten über Bluetooth. Dies bedeutet jedoch nicht, dass Ihre Schnittstelle genau auf die gleiche Weise funktionieren muss. Ich meinte mehr in der Richtung, welche Befehle Sie an das Gerät senden möchten und welche Art von Ausgabe Sie erwarten können, wenn Fehler / Erfolg auftreten. Diese Art von Ding.
Neil
1
+1: "Schnittstelle" mag so klingen, als hätte der Code sauber und einfach sein sollen. In diesem Fall möchten Sie jedoch eine "Hardware-Abstraktionsschicht", in die Sie alle möglichen gerätespezifischen Hacks, Problemumgehungen oder einfach nur böse setzen Code, der erforderlich ist, damit jedes Gerät funktioniert. Seine Aufgabe ist es, das Abwasser vom blitzsauberen Badezimmer fernzuhalten. Erwarten Sie keinen sauberen Code in dieser Ebene.
Rwong
@rwong Auf jeden Fall. Eine saubere Schnittstelle, über die ein Programm mit Hardware kommunizieren kann, ist das Markenzeichen eines gut geschriebenen Treibers. Der Rest des Programms sollte die abstrahierten Details nicht kennen müssen.
Neil
6

Ich denke, dies ist ein Problem des Projektmanagements, nicht so sehr ein Problem der Softwareentwicklung.

Sie sollten ein oder zwei Wochen Zeit haben, um auf das Gerät zuzugreifen (bei Ihrem Kunden oder in Ihrem Büro), um das grundlegende Verhalten des Geräts zu bewerten und festzustellen, wie es mit Ihrer Software interagiert. Anschließend können Sie die Benutzeroberfläche verspotten und die Funktionalität zu Hause und erneut eine Woche lang Integrationstests entwickeln.

Wenn Sie mit Hardware interagieren, sind der Bedarf und der Wert von Integrationstests nicht zu unterschätzen. Wenn Integrationstests nicht möglich sind, schlägt Ihr Projekt fehl. Das blinde Programmieren in Richtung einer Hardware, die Sie nicht testen können, funktioniert nicht.

Sie müssen dieses Problem mit Ihrem Kunden besprechen.

Simon
quelle
1
Danke für dein Feedback Simon. Ich denke, das ist ein unvermeidliches Gespräch. Es muss einen Kompromiss geben, sonst könnte das Endergebnis möglicherweise schlechter als nutzlos sein. Ich möchte die mir zur Verfügung stehenden Möglichkeiten ausschöpfen und zeigen können, dass ich meine Forschungen durchgeführt habe. Ich werde auch noch einmal vorschlagen, dass ich einen Laptop bekomme, den sie genehmigen, und dann kann ich die App mit dem vollständigen ADK ausführen, das mir zur Verfügung steht, wenn ich Integrationstests mache. Ich schätze es!
RossC