Pruebas de software


Diagrama que ilustra cómo, en las pruebas basadas en multitudes (crowdsourced testing), donde la evaluación recae en un gran número de colaboradores mediante un esquema abierto y participativo (crowdsourcing).

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.

Historia

El concepto de pruebas de software ha evolucionado paralelamente al desarrollo de la informática, pasando de ser una actividad correctiva a una preventiva.

Era de la depuración (1950s)

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.

Terminología fundamental

Es crucial distinguir entre tres conceptos a menudo confundidos en la industria, definidos por el estándar IEEE 610:

Caso de prueba

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:

Principios de las pruebas

Según el International Software Testing Qualifications Board (ISTQB), existen siete principios fundamentales que guían las pruebas de software:

Verificación y validación (V&V)

Estos dos términos, aunque relacionados, tienen objetivos distintos según el modelo de capacidad de madurez (CMMI):

Proceso de desarrollo de software

Los enfoques de desarrollo condicionan el momento y la forma en que se realizan las pruebas:

Estrategias de prueba

Las pruebas pueden clasificarse según si requieren la ejecución del código o no, y según el nivel de conocimiento del funcionamiento interno del sistema.

Estáticas vs. Dinámicas

Caja blanca vs. Caja negra

Pruebas contra especificación (ESRE)

Las Especificaciones de Requerimientos de Software (ESRE) describen de forma completa lo que el sistema debe hacer, sin detallar el cómo. Sirven de base para que los probadores (incluidos los probadores beta) validen si el software se comporta conforme a los requisitos funcionales y no funcionales definidos. A partir de las ESRE se pueden derivar casos de prueba detallados.

Tipos de pruebas por su ejecución

Clasificación de las pruebas según lo que verifican

Pruebas funcionales

Evalúan funciones específicas del software basadas en los requisitos funcionales. Entre los tipos más comunes se incluyen:

Niveles de prueba

Los niveles de prueba definen el alcance de la prueba dentro del ciclo de desarrollo:

  • Pruebas unitarias (Unit Testing): verifican el funcionamiento de las partes más pequeñas de código (funciones, métodos o clases) de forma aislada. Generalmente son escritas por los desarrolladores.
  • Pruebas de integración: verifican la interacción entre diferentes módulos o componentes que ya han sido probados unitariamente. Buscan errores en las interfaces y flujo de datos.
  • Pruebas de sistema: evalúan el sistema completo e integrado para verificar que cumple con los requisitos especificados. Se realizan en un entorno lo más parecido posible al de producción.
  • Pruebas de aceptación (UAT): realizadas a menudo por el cliente o usuarios finales para validar si el sistema está listo para su despliegue operativo. Incluyen pruebas Alfa y Beta.

Pruebas no funcionales

Verifican requisitos de calidad tales como disponibilidad, usabilidad, seguridad o rendimiento.[cita requerida]

Herramientas y automatización

La industria utiliza una amplia variedad de herramientas para apoyar el proceso de pruebas. La automatización de pruebas consiste en el uso de software especial para controlar la ejecución de pruebas y comparar los resultados reales con los esperados.

Las herramientas se clasifican generalmente en:


Véase también

Referencias

  1. 1 2 Myers, Glenford J. (2004). The Art of Software Testing (2.ª edición). John Wiley & Sons. ISBN 978-0471469124.
  2. 1 2 Pressman, Roger S. (2014). Software Engineering: A Practitioner's Approach (8.ª edición). McGraw-Hill. ISBN 978-0078022128.
  3. ↑ Gelperin, David; Hetzel, Bill (1988). «The Growth of Software Testing». Communications of the ACM 31 (6): 687-695.
  4. ↑ «IEEE Standard Glossary of Software Engineering Terminology». IEEE Std 610.12-1990 (IEEE). 1990.
  5. ↑ «Certified Tester Foundation Level Syllabus v4.0». International Software Testing Qualifications Board (ISTQB). 2023. Consultado el 11 de mayo de 2025.
  6. ↑ Sommerville, Ian (2015). Software Engineering (10.ª edición). Pearson. ISBN 978-0133943030.
  7. ↑ Barrientos, Pablo Andrés (25 de abril de 2014). Enfoque para pruebas de unidad basado en la generación aleatoria de objetos. p. 101. Consultado el 28 de abril de 2014.

Bibliografía

Enlaces externos