¿Necesito una Progressive Web App?

¿Necesito una Progressive Web App?

Progressive web apps (o aplicaciones web progresivas), es un término que se da a una nueva generación de aplicaciones que incrementan su funcionalidad, conforme las capacidades del dispositivo en el que se ejecutan, incrementan, de ahí la palabra progresiva. La siguiente parte del nombre web, hace referencia a que se construyen utilizando estándares de desarrollo web, algunos ya conocidos como HTML, CSS y javaScript; y una nueva generación de APIs de javaScript. La parte final app es porque las Progressive Web Apps se comportan como aplicaciones web nativas, pero usan tecnologías web.
 
¿Qué hace de una aplicación web, una Progressive Web App?
En términos muy simplistas, son páginas web que se comportan como aplicaciones nativas. Es una oración muy simple, pero también muy profunda. Las apps nativas (iOs, Android por ejemplo), históricamente han tenido una serie de ventajas sobre las páginas web, ¿como cuáles? Almacenamiento local, ejecutarse offline, notificaciones push, performance, acceso a hardware, acceso al homescreen del dispositivo, entre otros.
 
Las aplicaciones web progresivas están a medio camino entre las dos anteriores: son básicamente páginas web, pero mediante el uso de Service Workers y otras tecnologías se comportan más como aplicaciones normales que como aplicaciones web.
Mediante los Service Workers y otras tecnologías las aplicaciones web progresivas pueden seguir ejecutándose en segundo plano sin tener que vivir dentro del navegador. En el móvil es posible instalarlas como una aplicación más y también en Windows mediante la mediación de Google Chrome y Mozilla Firefox. Windows 10 va a añadir soporte para aplicaciones web progresivas en la tienda de Microsoft en la próxima gran actualización.
 
Principales ventajas
Una PWA es como una web responsive pero:

  • Tiene interfaz de aplicación nativa.
  • Funciona independientemente de la conexión a internet.
  • Envía notificaciones push.
  • Se actualiza automáticamente.
  • Es instalable.

Una PWA es como una aplicación móvil pero:

  • Puede encontrarse a través de cualquier buscador.
  • Se puede compartir mediante una URL.
  • Se distribuye vía web (evitando el lío de las tiendas de aplicaciones).

Algunas desventajas
¿Cuáles son sus desventajas respecto a una aplicación móvil nativa?
Tienen un rendimiento limitado y consumen mayor batería ya que el código nativo (Swift, Objective C o Java) es más rápido que el código web (ya que éste es interpretado en lugar de compilado).
 
Una PWA no puede acceder a todas las funcionalidades específicas de dispositivo como comunicación entre aplicaciones, acceso a contactos o funcionalidades avanzadas de la cámara.
 
Conclusiones
Las aplicaciones web progresivas son una evolución natural de las aplicaciones web que difuminan la barrera entre la web y las aplicaciones, pudiendo realizar tareas que generalmente solo las aplicaciones nativas podían llevar a cabo. Algunos ejemplos son las notificaciones, el funcionamiento sin conexión a Internet o la posibilidad de probar una versión más ligera antes de bajarte una aplicación nativa de verdad.

Beneficios de las Pruebas Automatizadas

Beneficios de las Pruebas Automatizadas

El proceso de Testing & QA es clave para la elaboración de un software de calidad, no solo por que garantiza el lanzar al mercado un aplicativo eficiente que cumpla con las expectativas del usuario, sino porque permite la mejora continua en los procesos productivos, aumentando las tasas de adopción aún más.

Entre la fase de pruebas, encontramos una gran variedad de disciplinas que, según las necesidades de su negocio y/o del desarrollo, ofrecen una serie de ventajas y desventajas a tomar en cuenta. En el caso particular de las Pruebas Automatizadas, encontramos que estas están ganando terreno entre las empresas de desarrollo de software, sin embargo, existen varios temas a considerar antes de aventurarse en realizar este productivo pero calificado proceso.

¿Qué es el testing automatizado?
La automatización de pruebas software hace referencia al diseño, desarrollo y ejecución scripts a fin de que puedan realizarse esas pruebas sin intervención humana. La principal razón por la cual las empresas están decantándose por el testing automatizado tiene que ver con la optimización de los tiempos de desarrollo y la detección de errores en puntos de este proceso de manera que estos errores sean más sencillos de solucionar, permitiéndonos desarrollar con mayor seguridad.

El ejemplo más común es la automatización de pruebas de GUI (Interfaz Gráfica de Usuario) donde a través de una herramienta o framework se reproducen los pasos de un caso de prueba y se verifica si el resultado de esos pasos es el esperado. Pero la automatización de pruebas no se limita a este tipo de pruebas o al menos, no debería hacerlo.

Principales beneficios
Las empresas software, por la naturaleza de su negocio necesitan ser ágiles, esto significa poder sacar al mercado productos o mejoras de sus productos de forma rápida, sin que la calidad se vea sacrificada. Para alcanzar este objetivo, el uso de metodologías ágiles y automatización de ciertos procesos suelen ser estrategias clave.

El uso de metodologías ágiles se basa en la comprobación continua del código para poder integrar poco a poco al código ya existente, las nuevas funcionalidades o mejoras, actualizando y verificando a diario para obtener un resultado mucho más fiable y en el menor tiempo posible. Esto implica que en cada ciclo de desarrollo se ejecuten los mismos casos de prueba con la finalidad de asegurar que las modificaciones que se hicieron en el código no generen defectos.

La automatización se encarga de agilizar cualquier proceso reduciendo el tiempo en el que se prueba el producto. Automatizar las pruebas más básicas y repetitivas que no requieran intervención humana, sirve para que los testers puedan dedicar más tiempo a probar las áreas críticas de la aplicación y/o hacer pruebas más complejas (casos borde, usabilidad, etc) donde se requiere combinar acciones o verificar desde un punto de vista lógico.

Principales ventajas

  • Fiabilidad: Se elimina el error humano. El script tendrá pasos precisos que serán ejecutados siempre de la misma manera. Ejecutar la misma tarea repetitivamente puede volverse tedioso y después de cierto tiempo el tester puede no prestar la misma atención a los detalles de dicha prueba y omitir algún tipo de error. Al ejecutarse repetidamente como parte del desarrollo permite a los desarrolladores comprobar que sus modificaciones no introdujeron errores en partes críticas de la aplicación.
  • Rapidez: Por ser una prueba de naturaleza automática, será ejecutada mucho más rápido que si la ejecutara un tester. Claro que esto dependerá mucho de la infraestructura con la que se cuente y el nivel de integración de las pruebas. No es lo mismo que las pruebas automáticas se lancen de forma automática cada vez que se deploya la aplicación y corran en un ambiente dedicado, a que, como ocurre en muchos casos, deba iniciarlas manualmente un tester, en su computadora, para que corran en un ambiente compartido (como QA o UAT) donde alguien puede cambiar un dato y la prueba podría fallar. Ni hablar que en este caso también se está utilizando el tiempo del tester que por lo general, si son pruebas de UI, no va a poder utilizar su computadora hasta que las pruebas terminen y eso puede llevar tiempo.
  • Mayor cobertura de pruebas: permite dedicar recursos a probar la aplicación en profundidad.

Algunas desventajas

  • La creación de scripts automatizados es un proceso costoso que requiere un gran nivel de habilidades técnicas.
  • No se pueden automatizar una aplicación al 100%: Por lo general, las aplicaciones siempre van a tener alguna funcionalidad que requiera la interacción del usuario, por ejemplo, hacer click en un link que se envío en un mail de confirmación (este caso podría llegar a automatizarse en algunos casos), o comparar que una imagen sea exactamente igual a la esperada (cada browser la mostrará levemente diferente) o un login que solicita seleccionar imágenes para comprobar que no se trata de un robot, se requieren de intervención del tester y no puede ser automatizado. También dependerá del CI/CD (prácticas de continuous integration y continuous delivery) con la que se cuente.
  • Siempre hay que tener en cuenta cual es el coste y cuál es el beneficio: para evaluar si las pruebas se van a realizar de forma manual o automatizada, teniendo en cuenta el conocimiento de la herramienta a utilizar, lenguajes de programación, tiempos y demás.

Conclusión:
La Automatización de Pruebas debe darse a través de un proceso bien planificado para que sea efectiva desde el punto de vista de costo y debe ser usada para que brinde beneficios reales, siendo realistas sobre los recursos y perfiles que se necesitan involucrar para su implementación. Automatizar no es barato, no es rápido y no es sencillo. Mal implementada, esta estrategia puede convertirse en una pérdida de tiempo, esfuerzo y dinero.