Pruebas de software

Tipos de pruebas y programas

Las pruebas de software, como su nombre indica, son pruebas que se realizan a todo o a parte de un programa o aplicación. Este proceso tiene el objetivo de búsqueda de errores. Es decir, se utilizan básicamente para buscar errores ocultos que no salieron a la luz durante el diseño y desarrollo de la aplicación, y al mismo tiempo asegurar la calidad y reducir el mantenimiento. Son pruebas automáticas pero que requieren tiempo para crearlas, pero una vez creadas pueden ser lanzadas tantas veces como queremos de forma totalmente automática. Por tanto, se pueden definir un conjunto de pruebas, las cuales se planifican por adelantado y ejecutar una vez construido el código, o durante su construcción, para comprobar tanto su funcionamiento y sus posibles aciertos o errores de otras etapas, sobre todo la etapa de diseño.

Por otra parte siempre debemos tener en cuenta que las pruebas de software son distintas a las pruebas de calidad y nunca las sustituyen, es decir, se utilizan para validar que el software sea de calidad. No debemos olvidar que cubrir la totalidad de los posibles casos de ejecución de una aplicación es muy complicado, por lo que la prueba o test sólo garantiza que los escenarios probados funcionan correctamente.

Tipos de pruebas y herramientas o utilidades para ejecutarlas

En todas las aplicaciones o software de cualquier ámbito, se pueden realizar una serie de pruebas que se pueden clasificar en distintos niveles de profundidad. A continuación, os muestro los tipos de pruebas ordenadas, desde el más bajo nivel a más alto nivel:

Pruebas de unidad o pruebas unitarias

Las pruebas unitarias de software o pruebas de unidad se encargan de probar el funcionamiento de cada unidad de código que compone el software. Estas unidades mínimas de código son las funciones en programación estructurada, métodos en clases en metodologías orientadas a objetos y otros módulos o archivos de pequeña longitud de código. El porqué de utilizar bloques pequeños de código es que permiten ver como actúan por separado y permiten comprobar su efectivo funcionamiento de forma separada del resto del código de la aplicación.

Vamos a analizar algunas de las herramientas disponibles para realizar pruebas de software a diferentes niveles. Para pruebas unitarias, podemos encontrar:

  • xUnit: nació como un proyecto que pretendía aglutinar las pruebas unitarias en distintos lenguajes, pero poco a poco ha ido viendo reducido su campo de acción. Actualmente, destaca en las pruebas unitarias para lenguaje C#.
  • phpUnit: librería para pruebas unitarias en aplicaciones basadas en PHP. PHPUnit es todo un framework de pruebas, que esta implementado como una instancia de la arquitectura xUnit para marcos de pruebas unitarias. Define métodos de prueba para comprobar el funcionamiento de distintos módulos PHP de nuestra aplicación.
  • JUnit: librería para pruebas unitarias en aplicaciones basadas en lenguaje Java. Tiene una filosofía similar a xUnit. Se distribuye en formato JAR, y se incorpora a los proyectos que lo necesiten.
  • Generadores de mocks, u objetos simulados que nos ayudan a probar ciertas partes del programa sin necesidad de que otras estén ya implementadas. Existen diversas librerías dependiendo del lenguaje de programación utilizado. Por citar un par de ejemplos, podemos hablar de Mockito para Java, o de Moq.Net para C#.

Pruebas de integración

En una etapa más tardía se utilizan otro tipo de pruebas de software, exactamente las pruebas de integración. Estas pruebas comprueban que la combinación de los diferentes elementos unitarios del programa (funciones y/o clases) responde al funcionamiento esperado. En este ámbito, también se puede hablar de pruebas de regresión, cuando se introduce un nuevo elemento o una modificación y se quiere comprobar su integración con lo que ya había anteriormente.

En cuanto a las herramientas disponibles para realizar pruebas de integración, encontramos varias soluciones:

  • Jenkins. Se trata de un servidor de automatización de pruebas open source, escrito en Java. Ofrece mecanismos de integración continua de software: inclusión automática de los nuevos cambios en los módulos y ejecución automática de las pruebas de integración para verificar el funcionamiento de todo el sistema.
  • TravisCI, es otra alternativa que permite realizar pruebas de integración en la nube.
  • CircleCI, nació en 2011 y es menos conocida, pero es una plataforma de pruebas de integración y también permite otro tipo de implementaciones y automatizaciones en los procesos de diseño e inicio de software, es decir nos sirve también como herramienta de planificación de la aplicación en todos los ámbitos desde la idea inicial hasta su potencial económico.

Casi todas estas herramientas incluyen un mecanismo de comunicación con sistemas de control de versiones, como son Git, Mercurial o Subversion, de forma que podemos lanzar automáticamente las pruebas en cuanto subamos los cambios al repositorio en cuestión.

Pruebas de aceptación o validación

En la siguiente etapa se realizan las pruebas de aceptación o validación determinan si se cumplen los requisitos del sistema establecidos en la etapa de análisis, y por lo tanto, si la aplicación cumple con lo que el usuario encomendó en su momento.

Para realizar pruebas de validación, además de que el propio usuario final pruebe la aplicación y determine posibles errores o inconsistencias con los requisitos planteados, podemos emplear algunas herramientas que ayuden a automatizar.

  • Prueba de interfaces gráficas: es un tipo de pruebas muy específico. En este sentido, existen herramientas como Selenium o TestCafe, entre otras, que permiten establecer de forma programática (mediante scripts de texto) una serie de pasos a realizar sobre una aplicación gráfica: dónde colocar el ratón, cuándo hacer clic, cuánto tiempo esperar hasta la siguiente acción, etc. para así simular el comportamiento del usuario frente a la aplicación, y se permite probar distintos caminos y acciones, obteniendo capturas del resultado final que pueden ser contrastadas con las que deberían aparecer.
  • Para validar que la estructura HTML de una aplicación web sea correcta, se pueden emplear validadores HTML como el de W3C o HTML Tidy.
  • Para probar las comunicaciones cliente-servidor en una aplicación web, podemos emplear varias herramientas. Una de ellas es Postman, que sirve tanto para probar aplicaciones basadas en servicios, como para aplicaciones que devuelven contenido HTML. Además, podemos emplear software como Selenium, para interactuar con la interfaz de la aplicación y navegar por ella, comprobando así su navegabilidad y apariencia.

Pruebas de sistema

Las pruebas de sistema son pruebas de software que comprueban que la implantación de la aplicación en su entorno real de producción es acorde a lo previsto, y su comportamiento es el esperado.