¿Cómo puedo probar una aplicación que depende de un hardware específico?

8

He escrito una aplicación de Android. La aplicación requiere una conexión Bluetooth a una pieza de hardware muy específica, actualmente un prototipo. La única forma en que puedo probar la aplicación en este momento es conduciendo cientos de millas para ver si funciona. Si termino con un ANR, puede ser muy vergonzoso frente a mi cliente. El tipo de conexión y la mecánica de esta aplicación están muy ajustados a este hardware. No se me permite traer una computadora portátil, rootear mi teléfono o conectarme a ningún otro dispositivo en las instalaciones.

¿Hay alguna forma de probar esta aplicación en casa o pasar por las actividades para garantizar que no tenga otro ANR en la segunda actividad mientras el cliente me mira horrorizado?

Debo señalar que no soy un programador experimentado y esta es una idea nueva con la que estoy ayudando a alguien, ya que la contratación de personal no está en la actualidad, por lo que indudablemente me faltan algunos de los conceptos muy básicos para desarrollar esto.

RossC
fuente
2
¿La interfaz es demasiado compleja para burlarse de ella? Debería ser posible burlarse de al menos la funcionalidad básica del dispositivo.
MrSmith42
@ MrSmith42 No había considerado esa posibilidad, ¿puedo simular enviar y recibir datos a través de Bluetooth? Actualmente no puedo pasar mi primera actividad, ya que no hay un dispositivo emparejado ni una conexión serial Bluetooth abierta.
RossC
Para dar más detalles, necesito el AVD (o teléfono físico) para conectarme a través de una conexión Bluetooth falsa y luego enviar los datos relevantes desde mi teléfono. Sé que la parte de recepción de datos funciona bien, así que ni siquiera necesito nada a cambio. Solo necesito (solo como ejemplo) presionar 'A' y mi teléfono para enviar el flujo de bytes 'A' al hardware. Lo que sucede después de eso depende del hardware. No puedo probar esto como dije, ya que no puedo hacer una conexión. Conduje ayer, conectado al hardware, abrí mi primera actividad presioné el primer botón y la pantalla en negro, absolutamente enfermo.
RossC
1
¿Qué es el ANR? ¿Supongo que no se refiere a Alpha Natural Resources o Adult Nursing Relationship (que es lo que se le ocurrió a Google)? ¿O un AVD para el caso?
Marjan Venema
@MarjanVenema Lo siento, debería haber aclarado. ANR es una aplicación que no responde o se cierra forzosamente por otro nombre. Es cuando su aplicación se bloquea por completo y lo regresa a la pantalla de inicio. Se ve mal delante de un cliente. AVD es un dispositivo virtual Android que puede ejecutar para probar su aplicación en algunos dispositivos virtuales diferentes. Es una parte fundamental del proceso de prueba de Android ... hasta que surja esta situación (no poder simular el hardware al que se conectará el dispositivo a través de BlueTooth). Espero que eso aclare.
RossC

Respuestas:

11

Como sugirió @ MrSmith42, debe hacer lo mejor que pueda para burlarse de la interfaz. No necesita una conexión Bluetooth real para burlarse de ella. Llamar a una interfaz. Esa interfaz, en depuración, envía lo que esperarías para una entrada dada. Cuando no está en depuración, realiza el trabajo real de enviar y recibir los datos. Asegúrese de que lo que envía a la interfaz y cómo maneja su salida funciona. Espolvorea un poco generoso de manejo de errores, administra los errores que puedes administrar y registra el resto, y tienes algo que puedes probar directamente en el cliente.

La única posibilidad de error en ese punto radica en la diferencia entre cómo espera que maneje el dispositivo y cómo se comporta realmente, y en mi experiencia, el hardware nunca es completamente confiable. Así que asegúrese de tener un mecanismo general de manejo de errores para algo que no espera que al menos arroje algún tipo de registro.

Neil
fuente
1
Su consejo es excelente, desafortunadamente la codificación real de esto está más allá de mi conjunto de habilidades. Tendré que entregar esto a un desarrollador a tiempo completo. Muchas gracias por su respuesta, lo marcaré como el aceptado, ya que es la mejor manera de hacerlo. Simplemente no tengo ni idea de dónde se podría comenzar a escribir una interfaz simulada, y me ha quedado claro que estoy muy por encima de mi cabeza aquí. Gracias a los dos. Solo para su información, la interfaz es solo una conexión Bluetooth serie, solo enviaré cadenas (como bytes) a través de la conexión.
RossC
1
Solo quería agregar una última cosa, si alguien más se encuentra con esta pregunta y tiene más conocimiento que yo sobre estas cosas, hay algunos enlaces excelentes para simular interfaces, etc. aquí: stackoverflow.com/questions/3337505/…
RossC
@RossC Bueno, yo digo "interfaz", pero la interfaz es cómo la define. En producción, la interfaz en sí misma pasa datos a través de bluetooth, pero eso no significa que su interfaz deba funcionar precisamente de la misma manera. Me refería más a las líneas de los comandos que desea enviar al dispositivo y qué tipo de salida puede esperar recibir en caso de error / éxito. Esa clase de cosas.
Neil
1
+1: "Interfaz" puede parecer que su código debería haber sido limpio y simple, pero en este caso lo que quiere es en realidad una "capa de abstracción de hardware" en la que coloque todo tipo de hacks, soluciones alternativas o simplemente desagradables código necesario para que todos los dispositivos funcionen. Su trabajo es mantener las aguas residuales lejos del baño limpio. No esperes código limpio en esta capa.
rwong
@rwong Absolutamente. Una interfaz limpia que un programa puede usar para hablar con el hardware es el sello distintivo de un controlador bien escrito. El resto del programa no debería tener que conocer los detalles abstraídos.
Neil
6

Creo que este es un problema de gestión de proyectos, no tanto un problema de desarrollo de software.

Debe tener una o dos semanas con acceso al dispositivo (en las instalaciones de su cliente o en su oficina) para evaluar el comportamiento básico del dispositivo y ver cómo interactúa con su software. Luego, puede burlarse de la interfaz y desarrollar la funcionalidad en casa y nuevamente una semana de pruebas de integración.

Cuando interactúa con el hardware, la necesidad y el valor de las pruebas de integración no pueden subestimarse. Si las pruebas de integración no son posibles, su proyecto fallará. La programación a ciegas hacia un hardware que no puede probar no funciona.

Tiene que discutir este problema con su cliente.

Simón
fuente
1
Gracias por tus comentarios Simon. Creo que es una conversación inevitable. Tiene que haber algún compromiso o el resultado final podría ser potencialmente peor que inútil. Quiero agotar las vías disponibles para mí y poder demostrar que he hecho mi investigación. También sugeriré nuevamente, que me den una computadora portátil que aprueben y luego puedo ejecutar la aplicación con el ADK completo a mi disposición cuando estoy probando la integración. ¡Lo aprecio!
RossC