特定のハードウェアに依存するアプリケーションをテストするにはどうすればよいですか


8

Androidアプリケーションを作成しました。アプリケーションには、非常に特定のハードウェア(現在はプロトタイプ)へのBluetooth接続が必要です。現在アプリをテストできる唯一の方法は、何百マイルも走行して機能するかどうかを確認することです。最終的にANRが発生した場合、クライアントの前では非常に恥ずかしいことがあります。このアプリの接続タイプとメカニズムは、このハードウェアに合わせて非常に厳密に調整されています。ラップトップを持参したり、電話をルート化したり、敷地内の他のデバイスに接続したりすることは許可されていません。

このアプリケーションを自宅でテストする方法、またはアクティビティをステップ実行して、クライアントが私を怖がらせている間、2番目のアクティビティで別のANRがないことを確認する方法はありますか?

私は経験豊富なプログラマーではないことを指摘しておく必要があります。これは、現在スタッフを雇っていないため、誰かを助けるための新しいアイデアです。間違いなく、これを開発するための非常に基本的な概念の一部が欠けています。


2
インターフェイスは複雑すぎてモック化できませんか?デバイスの少なくとも基本的な機能を模倣することが可能であるべきです。
MrSmith42 2013年

@ MrSmith42その可能性を考慮していませんでしたが、Bluetoothを介してデータの送受信を模擬できますか?現在、ペアリングされたデバイスがなく、Bluetoothシリアル接続が開いていないため、最初のアクティビティを通り抜けることができません。
RossC 2013年

詳しく説明するには、偽のBluetooth接続を介して接続し、私の電話から関連データを送信するためのAVD(または物理的な電話)が必要です。受信データ部分は正常に機能するので、見返りとして何も必要ありません。バイトストリーム「A」をハードウェアに送信するには、(例として)「A」と電話を押すだけです。その後に何が起こるかはハードウェア次第です。接続を確立できないため、私が言ったようにこれをテストすることはできません。私は昨日車を運転し、ハードウェアに接続し、最初のアクティビティを開いて最初のボタンと黒い画面を押しました。
RossC 2013年

1
ANRとは?私はあなたがアルファ天然資源または成人看護関係(これはグーグルが思いついたものです)を意味しないと思いますか?それともAVDですか?
Marjan Venema 2013年

@MarjanVenemaすみません、明確にすべきでした。ANRは、アプリケーションが応答しないか、別の名前で強制終了します。アプリケーションが完全にクラッシュして、ホーム画面に戻るときです。クライアントの前では見た目が悪い。AVDは、いくつかの異なる仮想デバイスでアプリケーションをテストするために実行できるAndroid仮想デバイスです。これは、Androidテストプロセスの基本的な部分です...この状況が発生するまで(デバイスがBlueTooth経由で接続するハードウェアをモックアップできない)。それが明らかになることを願っています。
RossC 2013年

回答:


11

@ MrSmith42が示唆したように、インターフェイスを模擬するために最善を尽くす必要があります。モックするために実際のBluetooth接続は必要ありません。インターフェイスを呼び出します。そのインターフェースは、デバッグで、特定の入力に対して期待するものを送信します。デバッグ中でない場合、データの送受信という実際の作業を実行します。インターフェースに送信するものとその出力の処理方法が機能することを確認してください。寛大なエラー処理を散布し、管理できるエラーを管理し、残りをログに記録すると、クライアントで直接テストできるものが得られます。

その時点でのエラーの唯一の可能性は、デバイスが処理することを期待する方法と実際に動作する方法の違いにあり、私の経験では、ハードウェアが完全に信頼できるとは決して言えません。したがって、少なくともある種のログをダンプすることになると予想されないものに対して、包括的なエラー処理メカニズムを用意してください。


1
あなたのアドバイスは素晴らしいです。残念ながら、実際のコーディングは私のスキルセットをはるかに超えています。これをフルタイムの開発者に渡さなければなりません。回答ありがとうございます。それが最善の方法であるため、私は承認されたものとしてマークします。私はモックインターフェイスをどこから書き始めるのかまったくわからないだけなのですが、ここで頭の中にいることがわかりました。お二人に感謝します。ただFYIインターフェースは単なるシリアルBluetooth接続であり、接続を介して(バイトとして)文字列のみを送信します。
RossC 2013年

1
私は誰にもモックインタフェースなど、ここのためのいくつかの素晴らしいリンクがあります。この問題に遭遇し、これらの事に私よりも知識が豊富であれば、最後の事を追加したい:stackoverflow.com/questions/3337505/...
RossC

@RossCさて、私は「インターフェース」と言いますが、インターフェースはそれを定義する方法です。本番環境では、インターフェース自体がBluetooth経由でデータを渡しますが、それは、インターフェースが同じように正確に機能する必要があることを意味しません。デバイスに送信するコマンドの種類と、失敗/成功した場合に受け取ることができる出力の種類について詳しく説明しました。そういうこと。
ニール

1
+1:「インターフェース」はそのコードがクリーンでシンプルである必要があるように聞こえるかもしれませんが、この場合、必要なのは実際には「ハードウェアアブストラクションレイヤー」であり、あらゆる種類のデバイス固有のハック、回避策、または単に厄介なものを配置しますすべてのデバイスを動作させるために必要なコード。その仕事は、水を汚さないきれいなバスルームから配管の下水を遠ざけることです。この層にクリーンなコードを期待しないでください。
rwong

@rwong絶対に。プログラムがハードウェアと通信するために使用できるクリーンなインターフェイスは、適切に作成されたドライバーの特徴です。プログラムの残りの部分は、抽象化された詳細を知る必要はありません。
Neil

6

これはプロジェクト管理の問題であり、ソフトウェア開発の問題ではありません。

デバイスの基本的な動作を評価し、ソフトウェアとどのように相互作用するかを確認するには、デバイス(クライアントの敷地内またはオフィス)に1〜2週間アクセスできる必要があります。その後、インターフェースをモックして自宅で機能を開発し、再び1週間の統合テストを行うことができます。

ハードウェアとやり取りする場合、統合テストの必要性と価値を過小評価することはできません。統合テストが不可能な場合、プロジェクトは失敗します。テストできないハードウェアに対して盲目的にプログラミングすることはできません。

この問題についてクライアントと話し合う必要があります。


1
フィードバックをありがとうSimon。それは避けられない会話だと思います。妥協が必要です。そうしないと、最終的に結果が役に立たなくなるよりも悪化する可能性があります。私が利用できる手段を使い果たして、自分の研究を終えたことを示したいと思います。私はまた、彼らが承認したラップトップを与えられ、統合テストの際に自由にフルADKでアプリを実行できることを再度提案します。それは有り難いです!
RossC 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.