Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

Qué son las pruebas de software

Nota de campusMVP: En este vídeo, Jorge Turrado (autor del post y de nuestro curso de testing de software) nos hace una introducción al testing de aplicaciones que complementa muy bien lo expuesto en este artículo.

Vivimos en un mundo muy ajetreado y más, si como yo, trabajas en el sector del software. Hay que poder conseguir la funcionalidad que espera el cliente lo más rápido posible cumpliendo además sus expectativas de funcionamiento. A medida que pasan los meses en un proyecto, la base de código no para de crecer y las cosas se empiezan a complicar para asegurar que todo funciona como debería después de hacer cambios en grandes bloques del sistema.

Sumergidos en esa vorágine, son muchas las situaciones en las que se hace tan solo una revisión exploratoria, que no es más que supervisar manualmente que todo sigue en su sitio, pero... Cuando la aplicación es grande ¿se puede cubrir el 100% de las situaciones de manera manual? ¿Es esto rentable en términos de coste?

La verdad es que ambas preguntas se pueden responder a la vez, no.

Imagen ornamental, un insecto en una rama representando un bug de Software, por David Clode, CC0

Aunque existen casos en los que una revisión manual pueda ser indispensable, como pueden ser ciertas comprobaciones sobre una interfaz gráfica (aunque también hay métodos para no necesitar intervención manual), la comprobación de la mayor parte del software es perfectamente automatizable, de modo que podamos comprobar con regularidad que todo funciona bien.

Si cada vez que vas a desplegar un proyecto a producción, todo tu equipo reza para que nada falle, lo que necesitas son pruebas de software.

Las pruebas de software son un conjunto de procesos con los que se pretende probar un sistema o aplicación en diferentes momentos para comprobar su correcto funcionamiento. Este tipo de pruebas abarca cualquier estadio del desarrollo del sistema, desde su creación hasta su puesta en producción. Lo interesante de las pruebas es que se puedan ejecutar de manera automática, para determinar en cualquier momento si tenemos una aplicación estable o si, por el contrario, un cambio en una parte ha afectado a otras partes sin que nos demos cuenta.

Tipos de pruebas de software

Imagina que estás desarrollando una aplicación web. Durante su proceso de creación utilizarías las pruebas unitarias y de integración para comprobar que todo funciona de la manera esperada internamente. Una vez que la web va cobrando forma, utilizarías las pruebas funcionales para poder comprobar que los requisitos de funcionamiento se están cumpliendo.

Llegados a este punto tenemos una web que cumple con el funcionamiento que se espera pero... ¿soportará el número de usuarios esperado?

Para resolver esa pregunta, recurrimos a las pruebas de carga y de estrés para poder asegurar que la web va a ser capaz de dar respuesta al número de usuarios esperado. De este modo es posible detectar problemas que, simplemente con el código, no se pueden ver con facilidad, y ayuda a encontrar los puntos calientes de nuestro sistema donde deberíamos mejorar.

En estos momentos ya tenemos una web que funciona y es capaz de dar soporte al número de usuarios que queremos. ¿Es usable la web? Por muy buen trabajo que se haya hecho, si la web no es usable no vamos a llegar a los usuarios de la misma. Para poder detectar esto, es el momento de hacer pruebas de usabilidad. Con ellas vamos a poder detectar problemas sobre la propia experiencia de usuario.

Todas estas pruebas, en los diferentes momentos del ciclo de vida de la aplicación, son pruebas de software que permiten asegurar la calidad del producto que estamos desarrollando. Pero aún podríamos comprobar más cosas: la interfaz gráfica, pruebas de extremo a extremo (End To End o E2E)...

¿Es rentable hacer pruebas de software?

Es evidente que crear pruebas es un trabajo extra, independientemente del momento del ciclo de vida del proyecto en el que nos encontremos. En primer lugar, hay que crear los tests y mantenerlos. A medida que el software crece y evoluciona, se producen cambios que obligan a modificar las pruebas, y eso es otro coste adicional, ya que una prueba que no funciona bien es totalmente inútil....

Pues bien, la respuesta es un rotundo... depende (eso no te lo esperabas eh 😆).

Depende principalmente de qué tipo de prueba de software estemos hablando y de cuál sea el alcance del sistema.

Si nuestra aplicación es muy básica y vamos a tener 3 o 4 usuarios, hacer pruebas de carga o estrés seguramente no tenga ningún sentido. En cambio, ¿te imaginas que una web como por ejemplo Facebook o Twitter no las tengan? ¡Podría ser catastrófico! Un cambio en un punto clave del sistema que haga que una petición tarde un 20% más en responderse, y de repente errores de servidor saturado a miles de personas... Pero, incluso para esa aplicación básica, sería interesante que tuviese alguna prueba de integración que comprobará que sus puntos clave están funcionando en todo momento.

Las pruebas de software deben ser acordes al producto que se está desarrollando, pero rara es la vez (por no decir nunca) donde no sean útiles.

Hoy en día existen herramientas y frameworks para automatizar la gran mayoría de las pruebas de software en sus diferentes niveles, de modo que se ejecuten automáticamente, de manera periódica o con los cambios. Gracias a esto, es posible reducir al mínimo los errores cuando se realizan cambios durante el ciclo de vida de un software.

Vale, son útiles en proyectos grandes y grandes equipos como Facebook o Twitter, pero, ¿si trabajamos solos en proyectos pequeños no carecen un poco de sentido? La realidad es que, por muy buenos que seamos, las personas nos equivocamos y no tenemos una memoria perfecta. Así que, incluso para trabajar una sola persona en proyectos pequeños, es interesante añadir pruebas que aseguren el funcionamiento. Al cabo de unas pocas semanas, ¿eres capaz de recordar el 100% de código que has desarrollado y la utilidad de cada línea o método? Lo que puede parecer un cambio menor que no va a afectar en nada al sistema, puede tener un alcance imprevisto al modificarlo.

En resumen

Como conclusión de todo lo anterior podríamos sacar las siguientes enseñanzas:

  • Las pruebas de software son un conjunto de técnicas que nos permiten asegurar la calidad del producto que estamos desarrollando en sus diferentes etapas del ciclo de vida.
  • Aunque tienen un coste de desarrollo y mantenimiento extra, son especialmente útiles para facilitar la calidad del software a medio y largo plazo.
  • El tipo y cantidad de pruebas tiene que ser acorde al producto que estamos desarrollando: no es lo mismo un producto grande que una aplicación web para anotar tareas.
  • Todo software debería tener algún tipo de prueba para asegurar su calidad independientemente del tamaño del mismo o del número de personas involucradas en su desarrollo.
Jorge Turrado Jorge lleva en el mundo de la programación desde los tiempos de .Net Framework 3.0. Es experto en la plataforma .NET, en Kubernetes y en técnicas de integración continua entre otras cosas. Actualmente trabaja como Staff SRE en la empresa SCRM Lidl International Hub. Microsoft lo ha reconocido como MVP en tecnologías de desarrollo, es CNCF Ambassador y maintainer oficial de KEDA, el autoescalador de Kubernetes basado en eventos. Puedes seguirlo en Twitter: @JorgeTurrado o en su blog FixedBuffer Ver todos los posts de Jorge Turrado
Archivado en: Herramientas

Boletín campusMVP.es

Solo cosas útiles. Una vez al mes.

🚀 Únete a miles de desarrolladores

DATE DE ALTA

x No me interesa | x Ya soy suscriptor

La mejor formación online para desarrolladores como tú

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.