Las pruebas en el desarrollo de software

Introducción

Actualmente el proceso de pruebas es más que simplemente sentarse y empezar a probar el software desarrollado en base a la experiencia del programador. En la actualidad hablamos de un "Proceso de Pruebas" básico el cual permite la gestión de las pruebas desde su concepción hasta su ejecución.

En éste pequeño artículo analizaremos las fases principales definidas para las pruebas.

Contenido

  • Proceso de pruebas
  • Planeamiento y control
  • Análisis y diseño
  • Implementación y ejecución
  • Evaluación de resultados y reportes
  • Cierre

Proceso de pruebas

Actualmente, las pruebas deben ser manejadas de manera paralela al desarrollo, pero debe estar muy relacionada a las actividades que se realicen.

La ISTBQ (International Software Testing Qualifications Board) es una entidad que trata la estandarización del proceso de pruebas, además de encargarse de la certificación de Profesionales en Pruebas.

El modelo de proceso propuesto abarca las siguientes fases:

  • Proceso de pruebas
  • Planeamiento y control
  • Análisis y diseño
  • Implementación y ejecución
  • Evaluación de resultados y reportes
  • Cierre

Planeamiento y control

La actividad de planeamiento y control define los objetivos, el tiempo y los recursos necesarios para el análisis, diseño, ejecución y evaluación de las pruebas.
También se debe definir las formas en como se va a controlar la correcta ejecución y el cumplimiento de las demás actividades del proceso, es recomendable el uso de estándares.


Uno de los puntos a tratar en la planificación es la identificación del propósito de las pruebas, es decir , ¿Qué se quiere lograr?. Algunos de los propósitos más comunes son:

  • Pruebas de Aceptación y Calificación: estas pruebas son hechas para evaluar que el software cumpla con los criterios de aceptación propuestos por el cliente. Usualmente el cliente, o su representante, realiza un chequeo del sistema para determinar si cumple con los criterios establecidos.
  • Pruebas de Instalación: una vez terminada la revisión de aceptación, el software se prueba en un ambiente que emula al de producción. La finalidad es comprobar que el sistema funcionará correctamente.
  • Pruebas Alfa/Beta: antes de que un software sea liberado al mercado, se suele entregar a un grupo pequeño de usuarios, que representan a los usuarios finales. La finalidad es que se reporten errores antes de la liberación del software en el mercado.
  • Pruebas de Regresión: consiste en repetir las pruebas seleccionadas y realizadas previamente antes de una modificación. El objetivo principal es determinar que los componentes funcionan correctamente después de los cambios realizados.
  • Pruebas de Rendimiento: las pruebas de rendimiento verifican que el software cumpla con los requerimientos de rendimientos establecidos y evalúa su rendimiento.
  • Entre otros.

Análisis y diseño

Una vez definido el/los objetivos, éstos, deben ser analizados y revisados para la definición de los casos de pruebas.

Los objetivos guían las siguientes actividades:

  • Identificar y refinar las condiciones de pruebas por cada objetivo de prueba.
  • Crear casos de prueba para validar que las condiciones de pruebas identificadas se cumplan.
  • Definir y usar un estándar para la documentación.

La selección de la documentación y de la forma como se definirán los casos de prueba dependerá mucho de los expertos. Pero también es recomendable el uso de estándares, por ejemplo el estándar«Software Test Documentation IEEE 829»(IEEE, 2008).

Adicionalmente, se debe definir lo que se va a probar, esto puede incluir desde componentes , módulos hasta el comportamiento completo del sistema:

  • Pruebas de Unidad: verifica la funcionalidad de un componente de manera aislada. Puede tratarse de sub-programas, componentes menos complejos o funciones específicas.
  • Pruebas de Integración: se trata de verificar la correcta iteración de los componentes que conforman el sistema. Dependen mucho de la arquitectura del sistema y las interfaces de comunicación entre componentes.
  • Pruebas del Sistema: consiste en la prueba de las funcionalidad del sistema, en términos de rendimiento, seguridad , hardware, sistema operativo, etc.

Implementación y ejecución

En éstas faces se ve la creación de los ambientes para las pruebas, así como la ejecución de los casos de prueba seleccionados.

Los ambientes deben ser los más parecidos posibles al ambiente dónde se ejecutará el aplicativo en producción. Esto incluye desde hardware, hasta el software con el cual convivirá .

La implementación o preparación puede incluir tareas como:

  • Preparación del ambiente de pruebas: el tipo de ambiente y su despliegue dependerá mucho del propósito de la prueba así como el objeto a probar. La preparación incluye la implantación, configuración del ambiente en términos de servidores.
  • Implantación de las herramientas de prueba: en casos donde las pruebas sean automatizadas, se pude requerir un despliegue adicional de las herramientas a ser usadas.
  • Configuración y despliegue de los componentes a ser sometidos a prueba.

Para la fase de ejecución, podemos encontrar las siguientes actividades:

  • Organizar tiempo y recursos.
  • Ejecución de las pruebas a través de recursos humanos, como herramientas.
  • Registro de los resultados de las pruebas, esto incluye los errores, resultados satisfactorios, etc.
  • Reporte del resultados de las pruebas realizadas.


Es recomendable el uso de métricas en la presentación del reporte de resultados, éstas métricas deben ser acordadas antes de la ejecución de las pruebas.

Evaluación de resultados y reportes

En ésta fase se revisan los resultados de las pruebas, las revisiones incluyen:

  • Pruebas intentadas vs satisfactorias: ayudará a tener una visión de la calidad del sistema hasta el momento. La mayoría de ejecuciones descubrirá defectos en el sistema, conforme el sistema sea más maduro, los defectos encontrados serán menos
  • Descubrir defectos del sistema en base a los defectos individuales: consiste en la revisión de los defectos encontrados a partir de las pruebas para determinar qué partes del sistema pueden verse afectados.
  • Descubrir defectos del sistema en base al historial de defectos: una revisión histórica de los defectos ayuda a verificar la ocurrencia de los mismos a lo largo del proceso de desarrollo. Es recomendable su uso en pruebas de regresión.
  • Descubrir defectos en base a grupo de defectos: la idea es la identificación de los componentes a través de una etiqueta, esto se debe hacer en coordinación con el equipo de desarrollo. Éstas marcas pueden ayudar a identificar defectos entre componentes relacionados.

Cierre

La fase de cierre se da cuando el software es entregado, u otras causas. Dentro de las actividades del cierre tenemos:

  • Determinar que entregables se han entregado y verificar si todos los defectos detectados han sido resueltos.
  • Archivar y finalizar los casos de pruebas automatizados, configuraciones de entornos de prueba, etc.
  • Evaluar el proceso de pruebas en general, detectar lecciones aprendidas.

Referencias

Black, R. and Mitchell, J. L. (2011). Advanced Software Testing - Vol. 3: Guide to the ISTQB Advanced Certification as an Advanced Technical Test Analyst. RockyNook, 1 edition edition.
Bourque, P. and Fairley, R. (2014). Guide to the Software Engineering Body of Knowledge.
Gerald D. Everett, Raymond McLeod, Jr (2007). Software testing: testing across the entire software development life cycle. [Piscataway, NJ] : IEEE Press ; c2007.
Henry, J.-J. P. (2008). The Testing Network: An Integral Approach to Test Activities in Large Software Projects. Springer, 2008 edition edition.
IEEE (2008). IEEE Standard for Software and System Test Documentation.
IEEE, ISO, and IEC (2010). Systems and software engineering – Vocabulary.
ISO/IEC/IEEE 24765:2010(E), pages 1–418.
Koirala, S. and Sheikh, S. (2008). Software Testing: Interview Questions. Jones & Bartlett Learning, 1 edition edition.
Myers, G. J., Sandler, C., Badgett, T., and Thomas, T. M. (2012). The Art of Software Testing, Third Edition. Wiley, 3 edition edition.
Tian, J. (2005). Software Quality Engineering: Testing, Quality Assurance, and Quantifiable Improvement. Wiley-IEEE Computer Society Press, 1 edition edition.