Pruebas de software
Las pruebas constituyen el conjunto de actividades encaminadas a verificar y validar que un sistema de información cumple los requisitos especificados y funciona correctamente. En el contexto de la Administración española, la metodología de referencia es MÉTRICA Versión 3, que estructura las pruebas a lo largo del ciclo de vida (procesos de Construcción del Sistema de Información —CSI— e Implantación y Aceptación del Sistema —IAS—). Junto a ella conviven numerosas herramientas de software libre para automatizar los distintos niveles y tipos de prueba.
Tipos de pruebas en MÉTRICA V3
MÉTRICA V3 distingue varios tipos de prueba, cada uno con un objetivo diferenciado:
-
Pruebas unitarias: verifican el comportamiento de cada componente o módulo de forma aislada.
-
Pruebas de integración: su finalidad es verificar que los distintos componentes o subsistemas interactúan correctamente a través de sus interfaces, tanto internas como externas, comprobando que cubren la funcionalidad establecida y se ajustan a los requisitos especificados. En términos de propósito, evalúan la capacidad del software para trabajar de manera efectiva con otros componentes y sistemas.
-
Pruebas del sistema: comprueban el sistema completo integrado frente a los requisitos.
-
Pruebas de implantación: validan el funcionamiento en el entorno de operación real.
-
Pruebas de aceptación: permiten al usuario validar que el software cumple con los requisitos establecidos en la Especificación de Requisitos de Pruebas, desde el punto de vista de su funcionalidad y rendimiento.
-
Pruebas de regresión: comprueban que los cambios sobre un componente de un sistema de información no introducen un comportamiento no deseado o errores adicionales en otros componentes no modificados (eliminación del "efecto onda"). Estas pruebas sí pueden automatizarse —afirmar que no es posible automatizarlas es incorrecto—; de hecho, la automatización es lo que las hace viables al repetirse tras cada cambio.
-
Pruebas de rendimiento: consisten en determinar que los tiempos de respuesta están dentro de los intervalos establecidos en las especificaciones del sistema.
-
Pruebas de carga: evalúan la capacidad del software para manejar grandes volúmenes de datos y usuarios concurrentes.
Documentos y planificación de las pruebas en MÉTRICA V3
MÉTRICA V3 formaliza la actividad de pruebas mediante varios productos:
-
Plan de Pruebas: su propósito es establecer la estrategia y los objetivos de las pruebas. Recoge las actividades de prueba a realizar según una planificación y se inicia en fases tempranas del desarrollo.
-
Especificación del Plan de Pruebas: detalla el plan e incluye, entre sus tareas, la Definición del Alcance de las Pruebas, la Definición de Requisitos del Entorno de Pruebas y la Definición de las Pruebas de Aceptación del Sistema.
-
Especificación de Requisitos de Pruebas: sirve como guía para la realización de las pruebas y permite verificar que el sistema de información cumple las necesidades establecidas por el usuario, con las debidas garantías de calidad. Es la referencia contra la que se validan las pruebas de aceptación.
-
Informe de Pruebas (o Evaluación del Resultado de las Pruebas): su propósito es documentar los resultados de las pruebas realizadas.
Verificación y validación del sistema
Las pruebas son el medio principal de dos actividades que conviene no confundir: la verificación y la validación. La norma ISO 9000:2015 (vocabulario de los sistemas de gestión de la calidad) las define así:
-
Verificación (3.8.12): «confirmación, mediante la aportación de evidencia objetiva de que se han cumplido los requisitos especificados». La evidencia puede ser el resultado de una inspección o de otras formas de determinación, como realizar cálculos alternativos o revisar los documentos.
-
Validación (3.8.13): «confirmación, mediante la aportación de evidencia objetiva, de que se han cumplido los requisitos para una utilización o aplicación específica prevista». Su evidencia es el resultado de un ensayo u otra forma de determinación, y las condiciones de utilización pueden ser reales o simuladas.
La diferencia está en contra qué se comprueba: la verificación confronta el producto con los requisitos especificados (¿se ha construido conforme a lo especificado?) y la validación con el uso previsto (¿sirve para aquello para lo que se pidió?). Por eso, en MÉTRICA V3, las pruebas unitarias, de integración y del sistema son sobre todo actividades de verificación, mientras que las pruebas de aceptación, en las que el usuario comprueba el sistema frente a sus necesidades, son la validación por excelencia.
Técnicas de prueba: caja blanca y caja negra
MÉTRICA V3 distingue dos enfoques para diseñar los casos de prueba:
-
Enfoque estructural o de caja blanca: «se verifica la estructura interna del componente con independencia de la funcionalidad establecida para el mismo», por lo que no se comprueba la corrección de los resultados. Ejemplos: ejecutar todas las instrucciones del programa, localizar código no usado o comprobar los caminos lógicos del programa.
-
Enfoque funcional o de caja negra: se comprueba el correcto funcionamiento analizando las entradas y salidas y verificando que el resultado es el esperado, sin preocuparse por la estructura interna.
En las pruebas unitarias el enfoque adoptado está orientado claramente a los casos de caja blanca, complementados con caja negra, porque el tamaño del componente permite examinar toda su lógica. Los casos de prueba deben contemplar tanto las condiciones válidas y esperadas como las inválidas e inesperadas.
Mantenimiento de sistemas de información
En MÉTRICA V3 el proceso de Mantenimiento de Sistemas de Información (MSI) tiene como objetivo «la obtención de una nueva versión de un sistema de información» a partir de las peticiones de mantenimiento de los usuarios, motivadas por un problema detectado o por la necesidad de una mejora. Se describen cuatro tipos de mantenimiento:
-
Correctivo: los cambios precisos para corregir errores del producto software.
-
Evolutivo: las incorporaciones, modificaciones y eliminaciones necesarias para cubrir la expansión o cambio en las necesidades del usuario.
-
Adaptativo: las modificaciones que afectan a los entornos en los que el sistema opera (configuración del hardware, software de base, gestores de base de datos, comunicaciones…).
-
Perfectivo: las acciones para mejorar la calidad interna del sistema: reestructuración del código, definición más clara del sistema y optimización del rendimiento y la eficiencia.
Solo el correctivo y el evolutivo entran en el ámbito de MÉTRICA V3: el adaptativo y el perfectivo quedan fuera porque requieren actividades y perfiles distintos de los del proceso de desarrollo. Cada modificación da lugar a una nueva versión del sistema, que se controla con la gestión de la configuración y las herramientas de control de versiones, y las pruebas de regresión comprueban que el cambio no ha introducido errores en lo que no se tocó.
Fuentes de este apartado
-
ISO 9000:2015, Sistemas de gestión de la calidad — Fundamentos y vocabulario (traducción oficial), entradas 3.8.12 y 3.8.13: https://www.iso.org/obp/ui/es/#iso:std:iso:9000:ed-4:v1:es
-
MÉTRICA v3, Técnicas — Pruebas unitarias (enfoques de caja blanca y caja negra): https://manuel.cillero.es/doc/metodologia/metrica-3/tecnicas/pruebas/unitarias/
-
MÉTRICA v3, Proceso de Mantenimiento de Sistemas de Información (MSI): https://manuel.cillero.es/doc/metodologia/metrica-3/procesos-principales/msi/
Herramientas de automatización y pruebas
Pruebas unitarias — JUnit
JUnit es el conjunto de bibliotecas para pruebas unitarias de aplicaciones Java. Forma parte de la familia xUnit y permite definir casos de prueba, aserciones y su ejecución automatizada, integrándose habitualmente en los entornos de compilación e integración continua.
Pruebas funcionales web y móviles — Selenium y Appium
Selenium es un entorno (framework) de pruebas de software para aplicaciones basadas en la web, específicamente diseñado para la automatización de pruebas funcionales sobre aplicaciones web. Sus pruebas pueden ejecutarse en Windows, Linux y OSX (macOS), y admite múltiples lenguajes (Java, C#, Python, Ruby, JavaScript, etc.) comunicándose con los navegadores mediante el protocolo WebDriver.
Appium es una herramienta de automatización de código abierto para ejecutar scripts y probar aplicaciones nativas, aplicaciones web y aplicaciones híbridas sobre Android o iOS utilizando un WebDriver. Extiende el modelo de Selenium al ámbito móvil.
Pruebas de carga, estrés y rendimiento
Apache JMeter es una aplicación Java de código abierto para pruebas de carga y estrés, que permite simular escenarios de concurrencia de usuarios sobre servidores, redes u objetos. Puede realizar pruebas de rendimiento y pruebas unitarias. Se define con claridad como una herramienta de pruebas unitarias para conexiones de bases de datos con JDBC, FTP, LDAP, servicios web, JMS, HTTP y conexiones TCP genéricas. Soporta, entre otros, los protocolos HTTP/HTTPS, SOAP/REST, FTP, JDBC, LDAP, JMS, SMTP/POP3/IMAP y TCP; es decir, se puede utilizar con todos ellos. En cambio, NO es una funcionalidad de JMeter capturar tramas de red (esa función corresponde a analizadores como Wireshark).
Gatling es una herramienta de prueba de carga de código libre que se integra con soluciones existentes y ofrece integración con herramientas de CI/CD. Está construida sobre Scala, Akka y Netty; su marco distribuido permite la computación totalmente asíncrona, modelando los usuarios virtuales como mensajes ligeros en lugar de hilos, lo que le permite simular grandes cargas con pocos recursos.
Tsung es una herramienta de software libre que se especializa en pruebas de carga y estrés para aplicaciones basadas en protocolos de base de datos (además de HTTP, WebDAV, LDAP, XMPP, MQTT, etc.), destacando por su capacidad de generar cargas distribuidas de alta concurrencia.
Producto que NO es de pruebas — OneTrust
Conviene distinguir las herramientas de prueba de otros productos. OneTrust NO es un producto orientado a las pruebas de software: es una plataforma de gestión de privacidad, cumplimiento normativo y gobierno de datos (GRC), ajena al ámbito del testing.
Resumen comparativo de herramientas
| Herramienta | Ámbito | Característica clave |
|---|
| JUnit | Pruebas unitarias | Bibliotecas para Java (xUnit) |
| Selenium | Pruebas funcionales web | Windows, Linux y OSX; WebDriver |
| Appium | Pruebas móviles | Android/iOS, apps nativas/web/híbridas, WebDriver |
| Apache JMeter | Carga, estrés y rendimiento | Java; múltiples protocolos (JDBC, FTP, LDAP, JMS, HTTP, TCP...) |
| Gatling | Carga | Integración CI/CD; marco distribuido totalmente asíncrono |
| Tsung | Carga y estrés | Especializada en protocolos de base de datos |
Fuentes
-
MÉTRICA Versión 3 — Ministerio (portal de Administración Electrónica / preparatic): https://www.preparatic.org/material/20100918/Metrica_v3.pdf
-
MÉTRICA v3, Técnicas de Pruebas (Integración y Regresión) — manuel.cillero.es: https://manuel.cillero.es/doc/metodologia/metrica-3/tecnicas/pruebas/
-
Apache JMeter — sitio oficial (protocolos soportados): https://jmeter.apache.org/
-
Apache JMeter — Wikipedia (lista de protocolos): https://en.wikipedia.org/wiki/Apache_JMeter
-
Gatling — documentación oficial (arquitectura asíncrona, CI/CD): https://docs.gatling.io/
-
Gatling — repositorio oficial: https://github.com/gatling/gatling
-
Appium — sitio oficial (automatización móvil vía WebDriver): https://appium.github.io/appium.io/index.html
-
JUnit — sitio oficial: https://junit.org/
-
Tsung — documentación oficial: http://tsung.erlang-projects.org/
TDD: desarrollo guiado por pruebas
El desarrollo guiado por pruebas (TDD, Test-Driven Development) es una técnica que guía el desarrollo escribiendo primero las pruebas. La desarrolló Kent Beck a finales de los años noventa como parte de Extreme Programming (XP).
El ciclo rojo-verde-refactorizar
TDD repite un ciclo corto de tres pasos, que se resume como rojo – verde – refactorizar (Red – Green – Refactor):
-
Rojo: se escribe una prueba para la siguiente funcionalidad que se quiere añadir. Como el código aún no existe, la prueba falla.
-
Verde: se escribe el código funcional imprescindible hasta que la prueba pasa.
-
Refactorizar: se reestructura el código, el nuevo y el anterior, para que quede bien organizado, manteniendo las pruebas en verde.
Saltarse la fase de refactorización es la forma más habitual de hacer mal TDD: el código pasa las pruebas, pero se va degradando.
TDD produce como efecto una batería de pruebas automatizadas que acompaña al código desde el principio y que se ejecuta en cada integración, por lo que encaja con la integración continua.
Fuentes de TDD