Refactorizando Servicios Web y Muchas Pruebas.

Desde la última entrada a la de hoy he estado inmerso en la mejora de las peticiones de datos de la app Android al servidor… y aún queda por mejorar y darle una nueva pensada a todo esto, ya que quiero que sea lo más ligero posible.

Lo que he modificado es la forma de pedir la info actualizada de las Qdadas que un usuario tiene almacenadas en local (en caché, por así decirlo). Antes lo que hacía era enviar una petición por cada Qdada. Esto nunca me llegó a gustar del todo, pero lo había hecho así para ir avanzando en el código e ir viendo y probando como se comportaba el resto de la app. Así que en estos días he estado modificando esto y probando el funcionamiento normal de toda la app.

Ahora lo que se realiza es una única consulta donde la app envía todos los identificadores de Qdadas que quiere actualizar y el servidor le devuelve en un JSON todas la info actual en el servidor acerca de esas Qdadas. Esta consulta puede ser útil para cuando sólo se requiera saber la información actualizada de un grupo de Qdadas, así que por eso lo he implementado.

El proyecto se ha complicado más de lo que intuía xD

El siguiente paso será que a través del Identificador de Usuario (que de momento es el IDFacebook) el servidor nos devuelva la info de todas las Qdadas en las que esté involucrado este. Filtrándolas por fechas (para no enviar las Qdadas ya pasadas, ya que estas no se modificarán más). Esto parece el funcionamiento correcto, pero el anterior está pensado para descarga la info de Qdadas progresivamente, ya que si un usuario tiene un número considerable, el peso de la respuesta de la petición puede ser bastante grande, por lo que habrá que pensar en alguna política de actualización.

Otra opción de actualización, es que sea el servidor el que notifique a los usuarios, a través de notificaciones PUSH, el cambio en la Qdada. Es decir, si algunos de los usuarios involucrados modifica la Qdada (por ahora lo que podrá modificar es su elección sobre esa Qdada), pues que el servidor se encargue de mandar notificaciones PUSH a todos los usuarios que participen en esa Qdada, y así en background la app se encargue de actualizar dicha Qdada. Se puede, incluso, implementar una opción que permite a la app avisar al usuario (si este quiere) de que alguien a modificado su elección en la Qdada. Eso no lo tengo del todo claro, ya que me surgen muchas dudas en lo correspondiente a usuarios que usen del tingo al tango la app, por falta de conexión a internet. De manera que habría también que implementar un sistema eficiente de colas, para que cuando tiene conexión a internet y le llegan 15 notificaciones distintas de la misma Qdada, actuar en consecuencia de manera ligera, y que no le afecte a la experiencia de usuario. ¿Alguien tiene alguna opinión al respecto?… es una de esas funcionalidades que parece obvia, pero que hay que pensarla muy mucho antes de implementarla, ya que sino, cuando se implemente, lo más seguro es que surjan nuevos problemas que hagan que todo el trabajo anterior haya sido en balde.

También he conseguido probar la aplicación en un uso normal. Con una tablet y un smartphone y dos usuarios distintos. Un usuario crea una Qdada e invita a otro usuario. Ese otro usuario recibe la notificación y responde con las fechas en las que mejor le venga. Ese ciclo de uso, funciona correctamente, así que pasito a pasito la app va cogiendo cuerpo :-).

El problemas de probar un uso normal de la app, es el tiempo que se tarda. Se tiene que tener conectado los dos dispositivos por USB para cargar los cambios que se vayan haciendo de la app, y establecer un ciclo completo de uso normal. Además esto va mucho más allá, ya que esto se podría incluso automatizar con Test. Pero existen dependencias como la instalación de la app de Facebook, la sesión iniciada por parte de usuarios distintos en terminales distintos en esta red social. Probar cosas más rocambolescas, como que ocurra algo inesperado durante el transcurso de utilización de la app (que se pierda la conexión, que lleguen otras notificaciones, que el usuario ponga la app en segundo plano, etc.). Por lo que realizar estas pruebas se puede convertir en algo realmente tedioso e insano para el desarrollador.  Además que siempre es bueno que lo pruebe una personas externa al desarrollo y al que no se le explique en detalle su funcionamiento, para ver que sería lo que haría por naturaleza. Como los desarrolladores sabemos como funciona, pues en ocasiones tener el punto de vista de alguien externo, puede ayudarnos a detectar bugs que no se nos hubieran ocurrido, y que seguramente hubieran salido a la luz con la app en fase beta, o incluso en fase de lanzamiento. También es verdad que esto se suele dejar para la fase beta, o alfa incluso, darle una app ya cuasi finalizada a usuarios externos para que trasteen. Pero esto tiene el inconveniente de que cuanto más funcionalidades tenga la app, más bugs van a ocurrir, y hay que intentar que el usuario de pruebas final se encuentre con los menos bugs posibles, para su comodidad. Así que yo soy de la mentalidad de ir probando poco a poco todas las funcionalidades con diferentes usuarios externos (que suelen ser la familia en estas etapas de desarrollo, jeje), y ya cuando esté todo testeado por partes y empaquetado en la app final, pues sacar una beta y darle la app a usuarios de prueba finales para que detecten nuevos fallos. De esta manera, se genera un filtrado de bugs previos, bastante importante, consiguiendo que el usuario probador final (que serán los amigos, jeje) no les cause apatía probar la app, ya que los bugs con los que se encontrarán estarán minimizados.

Como siempre, aquí os dejo con el commit de lo que he hablado: COMMIT

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s