|
En el capítulo de hoy toca hablar del testing. Un tema muy importante en programación y por lo tanto también en el desarrollo de aplicaciones móviles, que muchas veces se obvia, se omite. No se hace pensando que es una pérdida de tiempo cuando en realidad, como vamos a ver en el episodio de hoy, es todo lo contrario.
¿Qué es el testing?
El testing como su propio nombre indica es el proceso de testear, de probar que algo funciona como debería.
Por ejemplo, imaginemos un fabricante de coches que está instalando un sistema de airbag. Obviamente este sistema se tendrá que probar antes de vender el coche. No pueden coger e instalar ahí un sistema recién creado sin antes probar que eso funcionará. Antes de venderlo tendrán que hacer una serie de pruebas para demostrar, para asegurarse, que ese airbag funciona. Primero harán pruebas en algún tipo de simulador y después con algún coche real. Al fin y al cabo se trata de que el que lo tenga que probar no sea el cliente final. Este proceso de probar que ese airbag realmente funciona tal y como se diseñó es el testing.
Entrando ya de lleno en el mundo del testing en la programación pura, que es lo que realmente nos interesa, ¿cuál sería una definición más concreta del testing en este ámbito?
El testing en programación es comprobar que todo el código que se ha escrito, que se ha desarrollado, funciona. Que hace lo que tiene que hacer.
Si estamos haciendo una aplicación de una app para pedir taxi, tendremos que comprobar que cuando el usuario abre la app, le aparece un mapa con su posición actual y un botón para pedir un taxi, que cuando le da al botón de pedir taxi, va a la siguiente pantalla para elegir la hora, que después va a la pantalla de confirmar, que cuando acaba el viaje le sale el botón de pagar… y así con todas las situaciones.
Tipos de testing
Vale ahora que ya tenemos una idea general de qué es el testing y para qué sirve, vamos a ver qué tipos de testing tenemos.
Hay bastantes tipos de testing en programación, pero si entramos a ver todos y cada uno de ellos nos pondríamos muy técnicos y no creo que fuera muy fácil de seguir ni entretenido, así que aquí lo voy a simplificar mucho y sobretodo enfocado a los tipos de test que serían imprescindibles en una aplicación móvil. Simplemente quiero dejar constancia de que este es un tema muy muy amplio. De hecho hay gente que se dedica únicamente a ello. Es como una rama de especialización dentro de la programación.
1. Unit Testing
Podríamos decir que el Unit Testing es el proceso de escribir código que se dedique a comprobar el código original, el código del proyecto. Sí, sé que esto puede ser difícil de entender, pero es así.
Podríamos pensar en una aplicación como una casa. Si una casa está compuesta de muchos pequeños ladrillos, una aplicación, o cualquier tipo de software, está compuesto de muchos pequeños trozos de código. Pequeñas piezas, que juntas forman lo que vemos.
El Unit Testing lo que viene a probar es que cada ladrillo está bien puesto, que está bien nivelado. Lo que haremos será escribir código extra que se encargará de comprobar que cada ladrillo que ponemos está bien. De esta manera, si alguien coloca un ladrillo mal, si lo modifica en algún momento y lo hace mal, nos enteraremos rápidamente ejecutando estos tests automáticos.
Imaginemos la aplicación que comentábamos antes de los taxis. Un pequeño ladrillo dentro de esa aplicación podría ser el hecho de transformar dos posiciones GPS a una distancia entendible para el usuario. Imaginemos que cuando pides un taxi te da a elegir entre varios taxistas y te los lista por distancia en kilómetros. Bien, seguramente dentro de todo el código de la aplicación, habría una pequeña función que se encargaría de transformar dos posiciones GPS que vendrían en un formato de latitud longitud, a la distancia entre ellas. Por ejemplo, si el conductor esta en la latitud X longitud Y y el usuario en la latitud Z y longitud R, la distancia entre ellos es M kilómetros.
Bien, si tenemos esta función dentro de nuestro código y queremos escribir un Unit Test, lo que haríamos sería escribir un código que diría: si meto esta latitud y esta longitud me tendrías que dar esta distancia, si meto esta latitud y esta longitud me tendrías que dar esta otra distancia, y si te meto esta latitud y esta longitud que no son válidas me tendrías que devolver un error.
Una vez tenemos esto, podemos ejecutar de cierto modo este código para comprobar que todo es cierto y ver que está bien, o cada vez que hagamos un cambio en el código, podemos volver a ejecutar otra vez este test para ver que todo sigue como debería.
2. UI Testing
Si decimos que una casa está compuesta de muchos pequeños ladrillos, podremos decir, subiendo un nivel más, que una casa está compuesta de varias estancias o habitaciones.
En este caso, una aplicación está compuesta de distintas vistas o pantallas. El UI Testing se encarga de comprobar, en un nivel más visual, que todas estas funciones funcionan como deberían.
Por ejemplo, en nuestra aplicación de taxis cuando toquemos el botón de pedir taxi, nos tiene que aparecer una pantalla con toda la lista de conductores. Esta información seguramente vendrá a través del servidor. El UI Testing comprobaría cosas como: ¿qué pasa si el servidor me devuelve una lista de taxistas?, tendría que ver esta lista de taxistas con toda su información, ¿qué pasa si el servidor no me devuelve ningún taxista? tendría que estar viendo una pantalla del estilo, no hay ningún taxista disponible, y ¿qué pasa si el servidor devuelve un error por cualquier motivo? pues que tendríamos que ver el típico mensaje de error del servidor.
La idea es la misma. Escribir código que compruebe lo que tiene que hacer la aplicación. Es lo mismo que el Unit Testing pero con un nivel más de abstracción.
3. Beta Testing
El Beta Testing es subir otro nivel más y normalmente se basa en dar acceso a tu aplicación a ciertas personas a modo de pruebas.
Este es sencillo de entender porque lo hacen muchos software. Sistemas operativos, juegos, aplicaciones, webs… Cualquier software puede implementarlo de una manera u otra.
Vas a sacar una app y antes de que la vea todo el mundo, coges y se la enseñas a unos pocos. Una vez sabes que todo está correcto, que no hay ningún error, que quizás has añadido alguna cosa que se te había pasado por alto en un principio, la lanzas a todo el mundo, teniendo ya en este momento, se supone, que una mejor versión de tu aplicación.
¿Por qué es importante el testing
En un principio puede parecer una tontería por el hecho de decir, ¿para qué vas a comprobar que algo que acabas de hacer funciona? En teoría lo acabas de hacer y lo has probado. Es más, puede parecer una pérdida de tiempo. Todo momento que pierdes escribiendo código o creando un beta testing, es tiempo que puedes ahorrarte y así poder sacar tu aplicación antes.
En cierto modo es así. Puede ser que, si no implementas ningún tipo de testing, acabes antes el desarrollo de la app, pero no siempre es así como vamos a ver a continuación.
1. Permite ahorrar tiempo
El testing permite ahorrar tiempo. Sí, es un poco contradictorio con lo que acabo de decir, pero el testing puede hacerte ganar tiempo. Hay que imaginarse, sobre todo el Unit Testing y el UI Testing, como algo rápido. Como algo que aprietas un botón y obtienes cientos de resultados de tus tests. Pruebas que, si tuvieras que hacer tu a mano, tardarías mucho mucho más en hacerlo.
Cuantas más funciones tenga tu app, más tiempo vas a ganar o más tiempo perderás si vas a hacer las comprobaciones tu mismo manualmente. Claro, siempre tienes la opción de hacer los cambios y no comprobar nada, pero bueno, yo no te la recomendaría mucho.
2. Permite detectar dónde están los errores
Imagina que cambias algo y de repente hay una parte de tu app que no funciona como debería. En este caso, los tests, actuarían como un botón mágico. Un botón mágico que te permitirá saber exactamente qué es lo que está mal. De esta manera puedes ir directamente al punto exacto que está provocando el error.
No solo estás ganando tiempo sino que también evitas cambiar otras partes de tu código pensando que están mal, cuando en realidad están funcionando correctamente.
3. Asegurarse que todo funciona en cualquier móvil
Existen servicios que te permiten automatizar la ejecución de todo los tests en móviles remotos. Hay empresas que tiene muchos, pero muchos dispositivos conectados en un lugar y te permiten de forma automática, como quien dice con un click, lanzar todas estas pruebas en esos dispositivos. De esta manera no tienes que tener los dispositivos en tu casa, ni tienes que instalar y probar la aplicación en cada dispositivo manualmente uno a uno.
Obviamente no podrás probar tu app en todos y cada uno de los dispositivos que existen. Esto es imposible. Pero si consigues probar tu app en 50 o 100 dispositivos, mucho mejor que con solo 3. Estarás reduciendo mucho, mucho las posibilidades de tener un error.
4. Obtener feedback y conexión con los usuarios
Me estoy refiriendo sobre todo el Beta Testing. Es mejor que te reporte un error alguien que sabe que esta probando una versión beta de tu aplicación, que alguien que está probando una versión final que hasta quizás ha pagado por ella. También es mejor que te reporten un error 10 usuarios dentro de tu grupo de 100 beta testers, que 1000 usuarios cuando la lanzas a todo el público.
Además al abrir tu app a gente que no forma parte de tu equipo de desarrollo haces que puedan entrar ideas y opiniones nuevas. Quien sabe si quizás estás incluyendo algo que pensabas que gustaría que al final es todo lo contrario o si quizás alguien te dice algo en lo que no habías caído. Si puedes mejorar tu app a través de estas personas, los usuarios finales las van a disfrutar desde un primer inicio.
También hay otra cosa a tener en cuenta. El acceder a la beta de algo te hace sentir, en cierta manera, parte del proyecto. Es como que estás colaborando en algo. Quizás estos usuarios están más predispuestos, por decirlo de alguna manera, a seguir utilizando tu aplicación en un futuro o quizás hablar de ella a otras personas.
Como siempre sabes que puedes seguir y recomendar este podcast a través de plataformas como iTunes o iVoox. ¡Nos escuchamos el miércoles que viene a las 8 en punto de la mañana!
The post 40. ¿Qué es y para qué sirve el testing en programación? appeared first on Diego Laballós. |