Las pruebas funcionales ó Functional Testing, también conocido como System Testing of software, son las pruebas ejecutadas sobre la aplicación para determinar si cumple los requisitos definidos.

Las pruebas funcionales suelen ser pruebas en las que interactua el usuario, pero puede también implicar la comunicación con sistemas externos. Contrastaremos las pruebas funcionales con las pruebas unitarias. También demostramos cómo las pruebas funcionales proporcionan diversas ventajas sobre las pruebas unitarias.

Una aplicación es una serie de flujos.
Podemos pensar en una aplicación desde la perspectiva de un usuario, como una serie de interacciones o flujos através de un interfaz.

La gente generalmente no sigue un patrón fijo de instrucciones, o una secuencia predefinida de acciones al usar una aplicación. Pueden interactuar al azar, saltarse pasos, o realizar acciones que los desarrolladores no esperaban.

Las Pruebas unitarias son pruebas de Whitebox.
Las pruebas unitarias proporcionan la cobertura de pruebas en áreas específicas del código.

Las pruebas unitarias son escritas por los desarrolladores, para permitirles probar que la implementación desarrollada se esté comportando como se esperaba. Las pruebas unitarias son las pruebas del whitebox que aseguran que está sucediendo el comportamiento especificado previamente por el desarrollador. Una debilidad de usar solamente pruebas unitarias es que no identificarán cuando el desarrollador ha malinterpretado los requisitos.

Las pruebas funcionales son Blackbox Tests.
Las pruebas funcionales se diseñan sin entrar en cómo la aplicacioón ha sido implementada. Es una prueba de blackbox, también conocidas como pruebas de caja negra. Una prueba funcional representa un conjunto de usuarios interactuando con la aplicación. Según la empresa Aberro software, el 80% de todas las pruebas funcionales se realizan manualmente. Eso significa que la prueba funcional más común implica un tester, que hace selecciones en una serie de controles, y evalúa una condición. Esta evaluación se llama una aserción. El probador afirma que el software está en un estado específico (se crea un output, un control se filtra de una manera específica, un control que está activado, una opción de la navegación está desactivada, etc).

Los buenos requisitos funcionales se deben de escribir tan concisos como sea posible.

Combinar pruebas unitarias y pruebas funcionales
Cuando combinamos ambas, pruebas unitarias y pruebas funcionales, estamos implementado lo que se conoce como graybox testing. Graybox testing proporciona dos tipos de feedback en el proceso del desarrollo del software. Las pruebas unitarias proporcionan feedback al desarrollador, que le dicen si su software está funcionando según el diseño y las pruebas funcionales proporcionan feedback al tester de que la aplicación está funcionando según lo requerido.

La prueba de Graybox es la combinación ideal para cualquier proyecto del software, y es un componente dominante de cualquier estrategia de integración continua. La integración continua (hablaremos más adelante sobre ella) es un proceso donde se compila y se prueba el software cada día. En los próximos meses decicaremos algunos artículos sobre la esta materia.

Pruebas Funcionales Automáticas
Las pruebas funcionales automaticas son muy caras de poner en marcha, y mucho más caras de mantener. Cada prueba funcional representa un script ó conjunto de scripts de una o varias acciones determinadas. A tester (con algunos conocimientos de programación) puede utilizar herramientas como el WinRunner ó el SilkTest para crear (o grabar) scripts. Esto representa un coste y un esfuerzo de programación por parte del equipo de QA y requiere de gente con más conocimientos.

El coste de mantenimiento de pruebas funcionales automáticas se magnifica en las etapas tempranas del desarrollo ya que siempre que un elemento de la interfaz cambie, cada script requiere que se actualizado (dependiendo de la naturaleza del cambio). Estos scripts deben de ser puestas al día manualmente para reflejar los cambios en curso. En períodos en los que se produzcan muchos cambios en la interfaz, el coste de mantenimiento puede llegar a ser insostenible.

Conclusion
Las pruebas funcionales son importantes para validar los requerimientos del usuario. Es un elemento importante para asegurar la calidad de un producto. Estas pruebas son caras incluso usando las mejores herramientas de automatización de pruebas funcionales, pero incluso siendo caro, es mucho más barato que el riesgo de entregar una aplicación con poca calidad. Valora si realmente es necesario el utilizar una herramienta de automatización de pruebas en tu proyecto. Planea incluir pruebas funcionales en tus estrategias de testing para conseguir así un mejor producto.

Be Sociable, Share!