Las pruebas de software (en inglés, software testing) son las investigaciones empíricas y técnicas realizadas para proporcionar información objetiva e independiente sobre la calidad del producto a la parte interesada o stakeholder. Es una actividad del proceso de ingeniería de software que consiste en la ejecución de un programa o aplicación con el propósito de encontrar fallos (bugs), errores o defectos, asegurando que el producto de software cumple con los requisitos especificados y funciona según lo previsto.
Las pruebas son una parte integral del aseguramiento de la calidad del software (SQA). Aunque tradicionalmente se asociaban a la etapa final del desarrollo, las metodologías modernas como DevOps y Agile promueven el enfoque Shift-left, que integra las pruebas desde las fases iniciales de diseño y codificación.
El concepto de pruebas de software ha evolucionado paralelamente al desarrollo de la informática, pasando de ser una actividad correctiva a una preventiva.
En los inicios, no existía una distinción formal entre probar (testing) y depurar (debugging). Las pruebas eran realizadas ad hoc por los propios programadores para corregir errores evidentes.
Era de la demostración (1957-1978)
Charles Baker distinguió formalmente entre depuración y pruebas. El objetivo principal era demostrar que el software cumplía con los requisitos establecidos, un enfoque positivo o constructivo.
Era de la destrucción (1979-1982)
Glenford Myers, en su obra clásica The Art of Software Testing, introdujo un cambio de paradigma vital al definir la prueba como "el proceso de ejecutar un programa con la intención de encontrar errores". Esto estableció una mentalidad "destructiva" necesaria para desafiar al software y encontrar fallos ocultos.
Era de la evaluación y prevención (1983-presente)
Con la aparición de estándares como el IEEE 829 (actualmente ISO/IEC/IEEE 29119), las pruebas se formalizaron como una disciplina que abarca todo el ciclo de vida. El enfoque actual busca no solo detectar errores, sino prevenir su inclusión desde el análisis de requisitos.
Es crucial distinguir entre tres conceptos a menudo confundidos en la industria, definidos por el estándar IEEE 610:
Error (Error): acción humana equivocada que produce un resultado incorrecto (ej. un programador interpreta mal un requisito).
Defecto (Fault/Bug): el resultado del error en el código; es la anomalía lógica en el software.
Fallo (Failure): la manifestación física o funcional del defecto cuando el software es ejecutado. Un defecto puede existir sin causar un fallo si esa línea de código nunca se ejecuta.
Un caso de prueba (test case) es un conjunto de condiciones bajo las cuales un probador determinará si una aplicación satisface los requisitos. Debe incluir:
Precondiciones (estado del sistema antes de la prueba).
Según el International Software Testing Qualifications Board (ISTQB), existen siete principios fundamentales que guían las pruebas de software:
Las pruebas demuestran la presencia de defectos: las pruebas pueden demostrar que hay errores, pero no pueden probar que no los hay.