En ingeniería de software , el diseño de pruebas es la actividad de derivar y especificar casos de prueba a partir de condiciones de prueba para probar el software .
Una condición de prueba es una declaración sobre el objeto de prueba. Las condiciones de prueba pueden enunciarse para cualquier parte de un componente o sistema que pueda verificarse: funciones, transacciones, características, atributos de calidad o elementos estructurales.
El desafío fundamental del diseño de pruebas es que hay una cantidad infinita de pruebas diferentes que se pueden ejecutar, pero no hay tiempo suficiente para ejecutarlas todas. Se debe seleccionar un subconjunto de pruebas; lo suficientemente pequeño para ejecutarlo, pero lo suficientemente bien elegido para que las pruebas detecten errores y expongan otra información relacionada con la calidad. [1]
El diseño de pruebas es uno de los requisitos más importantes para la calidad del software. Un buen diseño de pruebas favorece lo siguiente:
Los requisitos previos esenciales del diseño de pruebas son: [2]
Las bases de prueba, como los requisitos o las historias de usuario, determinan qué se debe probar (objetos y condiciones de prueba). Las bases de prueba implican algunas técnicas de diseño de pruebas que se deben utilizar o no.
El análisis de riesgos es inevitable para decidir la minuciosidad de las pruebas. Cuanto mayor sea el riesgo de uso de la función/objeto, más exhaustivas serán las pruebas que se necesitarán. Lo mismo puede decirse de la complejidad. El análisis de riesgos y complejidad determina las técnicas de diseño de pruebas que se aplicarán para una especificación determinada.
Los datos históricos de sus desarrollos anteriores ayudan a establecer el mejor conjunto de técnicas de diseño de pruebas para alcanzar un costo óptimo y una alta calidad en conjunto. A falta de datos históricos, se pueden hacer algunas suposiciones que se deben refinar para proyectos posteriores.
Basándose en estos requisitos previos se puede implementar una estrategia de diseño de pruebas óptima.
El resultado del diseño de pruebas es un conjunto de casos de prueba basados en la especificación. Estos casos de prueba se pueden diseñar antes de que comience la implementación y deben ser independientes de la implementación. La forma de diseño de pruebas que comienza con las pruebas es muy importante, ya que respalda de manera eficiente la prevención de defectos. En función de la aplicación y la cobertura de pruebas actual, se pueden crear más casos de prueba (pero no es un diseño de prueba).
En la práctica, se deberían aplicar más técnicas de diseño de pruebas en conjunto para especificaciones complejas.
En conjunto, el diseño de pruebas no depende de la habilidad extraordinaria (casi mágica) de la persona que crea la prueba, sino que se basa en principios bien entendidos. [3]
La norma ISO/IEC/IEEE 29119-4:2015, Parte 4, detalla las definiciones estándar de las técnicas de diseño de pruebas. El sitio de diseñadores de pruebas ofrece la metodología LEA (aprender-ejercitar-aplicar) para apoyar el aprendizaje, la práctica y la aplicación eficaces de las técnicas. [4]
El software puede generar automáticamente conjuntos de pruebas completos o casos de prueba que expongan errores reales mediante la comprobación de modelos o la ejecución simbólica . La comprobación de modelos puede garantizar que se utilicen todos los caminos de un programa simple, mientras que la ejecución simbólica puede detectar errores y generar un caso de prueba que expondrá el error cuando se ejecute el software mediante este caso de prueba.
Sin embargo, por muy bueno que sea el diseño automático de pruebas, no es adecuado para todas las circunstancias. Si la complejidad se vuelve demasiado alta, entonces debe entrar en juego el diseño de pruebas humano, ya que es mucho más flexible y puede concentrarse en generar conjuntos de pruebas de nivel superior.